GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

評価関数と学習ルーチンのどうでもいい話

 http://d.hatena.ne.jp/Gasyou/20120508/1336489213

 昨年の選手権直後ですが、C++のテンプレートを使って評価関数の評価・学習ルーチンを実装する方法を書きました。

 で、あの後色々やっていて、やっぱりこれは設計ミスだったんじゃないかと思えて来ました。

 まず、例の書き方だとevaluate()関数・forEach()関数・EvaluateProcessorクラス・LearnProcessorクラスの4つがありました。

 ただ、これはあくまでTDLeaf(λ)を実装する為の最低限必要な関数・クラス群です。

 んで、方策勾配法を実装しようとすると新しい関数・クラスが必要になってきますし、パラメータクラスに新しいメンバ変数・メンバ関数が必要になってきます。ボナンザメソッドを実装すると更に関数・クラスが増えます。

 そうすると何が大変って、評価関数を書き換えた際にほぼ同じ関数・クラスを実装し直す必要があります。

 という訳で、今度書き換える時は評価関数自体にはevaluate()・forEach()・EvaluateProcessorといった、評価関数に最低限必要なものだけを実装し、その他の関数・Processorクラスは学習ルーチンの方に持たせようかと検討中。ついでに、forEach()はpublic関数にする必要があります。

 こうすれば、forEach()関数に互換性さえあれば、異なる評価関数クラス間で学習ルーチン固有の関数・Processorクラスを共有可能です。

 また、パラメータクラスもテンプレート引数として与えてやれば、複数の学習ルーチンで使う各種変数・関数がゴチャゴチャする事も無くなるはずです。

 ついでに、評価関数自体はシンプルになりますし、少なくとも現状の7000行近いファイルになる事は無くなるはずです。

 今のプランでは選手権後に全面書き直しを検討中なので、やるとしたらそのタイミングでやります。