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

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

MTD(f)実装開始

 とりあえず既存のαβで探索するクラスを小規模修正してMTD(f)にするつもりが、読み抜けがあって全然進んでないです。

 んで、何を修正したかったかと言うと、手の配列を先頭から順に読んでいく部分。

 通常探索と静止探索1段目・2段目、それから通常探索でハッシュの手を読む部分の計4箇所で、ほぼ同じ処理をしています。

 んで、単なるαβのうちは別に問題じゃなかったんですが、ログの表示とかmpnの計測とかProb Heuristicその他もろもろで、結構コードが長くなっちゃってます。

 ならいっその事、手の配列を生成する部分だけ探索ごとに別々に持って、実際に探索する部分は共通の関数にまとめようかと考えました。

 が、実装していると問題発生。

 通常探索は再帰的に通常探索を呼び出さないといけませんし、静止探索も1段・2段とそれぞれ別です。

 つー訳で、ここん所をどうやって使い分けるか検討中。

 クラス構造的に一番美しい(?)と思うのは、探索呼び出し部分を共通インタフェースとして持つクラスを3つ*1作って、そのクラスのインスタンスを関数に渡してやるっつー設計なんですが*2、これだと無駄にクラスが増えて嫌なんですよねぇ。

 かと言って、関数の引数で“動作モード”みたいなもんを渡して、“通常探索モード”なら再帰的に通常探索を呼び出す、“静止探索1段目モード”だと・・・ってのは、クラスは増えないけどちょっと個人的にはやりたくない書き方です。

 ん〜、クラスが増えなくって綺麗に書ける方法、無いかなぁ。

*1:通常探索、静止探索1段目、同2段目

*2:と言うか、評価関数でやってるのとほぼ同じ事