paramtuner v0.0.0リリース
こちらで反省したとおり、使いやすいようにgruntから切り離しました(最初からそうしろ・・・
in codeでチューニング(というか、今は乱数で総当り。最適化のロジックは鋭意作成中)してその結果を利用して、なにか、とかができます。
npm install paramtuner
使い方は、READMEにもありますが
var Server = require('server'); var Tuner = require('paramtuner'); var tuner = new Tuner({ params: { maxConnection: { range: [1, 100] } }, command: function(env, params, next){ var server = new Server({maxConnection: params.maxConnection}).listen(80); // pseudo code var timePerReq = benchmark(server, {connection: 100, request: 10000}); next(null, timePerReq); }, done: function(err, results, time){ var bestCost = Infinity; var bestParams = null; for(var i = 0; i < results.length; i++){ if(bestCost > results.cost){ bestCost = results.cost; bestParams = results.params; } } new Server(bestParams).listen(80); } }); tuner.start();
こんな感じで、done
メソッドの中でもっとも良い奴を選び出して、スタートとかができます。
gridでサンプリングして、それをもとになんかモデルを作って、モデルに従って最適なパラメタを決める、みたいなことをいま作っている途中です。
これができれば、fluent-plugin-anomalydetectでファイルからロードできないときには、一定期間データをためてチューニングして、チューニングが終わったら貯めてたデータを開放して、モデルはファイルに保存、みたいなことができるんじゃないかと(javascript -> rubyへの移行は必要)