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

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

思考時間制御の修正案

 先日書いた、合議での票の割れ具合に応じた思考時間制御の問題点ですが、解決策が見つかったのでメモ。

 つらつら書くより擬似コードの方が分かりやすいかと思うので、まずそれから。C++風の構文です。

// PVには静止探索の読み筋も含むので、長さはバラバラ
各クライアントからPVを取得する; 

const int minPvLength = 取得したPVのうち、最も短いものの長さ;

// 局面の一致具合の最大値
int maxAccordCount = -1;

for( int d = 1; d <= minPvLength; d++ ) {

  // この値は1以上クライアント数以下になる
  const int firstMajorityCount = d手先で最も多く現れた局面の出現回数;

  // 全局面が同一なら、この変数は0になる
  const int secondMajorityCount = d手先で二番目に多く現れた局面の出現回数; 

  // 必要なら最大値を更新
  maxAccordCount = max( maxAccordCount, firstMajorityCount - secondMajorityCount );

}// for(..d..)

// ここから先で、maxAccordCountに応じて思考時間制御を行う

 まー要するに、PV中の局面を順に見ていって、最も出現回数の差が大きかった部分(=最も局面の一致した部分)の一致具合をベースに、思考時間制御をしようって事です。

 例えば、「7手先で全局面が一致したから、現局面での思考時間は短くていいかな」とか「minPvLengthまで探しても局面がバラバラだから、現局面では長めに思考時間を設定しよう」とかやる感じです。

 多分これで上手く問題解決するはずなんで、選手権までには実装します。