/** * Created by joonkukang on 2014. 1. 16.. */ var math = require('./utils').math; let optimize = module.exports; optimize.hillclimb = function(options){ var domain = options['domain']; var costf = options['costf']; var i; var vec = []; for(i=0 ; i domain[i][0]) { var newVec = []; for(j=0 ; j 0.1) { var idx = math.randInt(0,domain.length - 1); var dir = math.randInt(-step,step); var newVec = []; for(i=0; i domain[idx][1]) newVec[idx] = domain[idx][1]; var ea = costf(vec); var eb = costf(newVec); var p = Math.exp(-1.*(eb-ea)/temperature); if(eb < ea || Math.random() < p) vec = newVec; temperature *= cool; } return vec; } optimize.genetic = function(options){ var domain = options['domain']; var costf = options['costf']; var population = options['population']; var q = options['q'] || 0.3; var elite = options['elite'] || population * 0.04; var epochs = options['epochs'] || 100; var i,j; // Initialize population array var pop =[]; for(i=0; i domain[idx][1]) newVec[idx] = domain[idx][1]; return newVec; } function crossover(vec1,vec2) { var idx = math.randInt(0,domain.length - 2); var newVec = []; var i; for(i=0; i a[i] && rand <= a[i+1]) return i; } return -1; } };