From 8ab16efe48373f36e999d309bf382cf8338184d7 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:08:04 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/ml/opt.js | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 js/ml/opt.js diff --git a/js/ml/opt.js b/js/ml/opt.js new file mode 100644 index 0000000..3d0ca2e --- /dev/null +++ b/js/ml/opt.js @@ -0,0 +1,169 @@ +/** + * 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; + } +};