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への移行は必要)