クラスター探索

伊藤さんのボンクラーズの説明を読むとMPIを使ってるようですね。
ただ、プロトコルは単純なので自前でソケット通信をしてもできるんじゃないかと書いてありました。
mpiはけっこうわかりにくいので、
自分はソケット通信で自力でやりたいですね


ボンクラーズ的な手法を参考にすると
マスタープロセスが、bonaのsearch.cまでを担当して、tlp的なカットノードの並列探索を、

	  if ( tlp_split( ptree ) )

関数を呼ぶ代わりにプロセス間通信でカットノードに投げる。
この時に、split内部でやってるように、チャイルドプロセスの数だけ投げて、
マスターは止まって待っておく(sleepしておけばCPU負荷はない)
チャイルドの中でbetaカットが発生すれば、マスターに通知。受け取ったマスターは全員に「休め!」と号令をかける
alpha更新の場合は、そのプロセスが真の値を探索する。
alpha更新がなく探索が終了したらマスターに通知する
ここで密結合みたいに探索中の手の位置を共有できないから、
チャイルドプロセスは、たとえば残り100手あって、チャイルドが8人いた場合は、
(100%8)の余り0〜7を担当する。担当分が終わったらマスターに通知する。


split後の探索の終わり方としては、次の3つのパターン

  • 誰かがbetaカットになり全員終了
  • alphaを更新した人から新しいalphaが返る(複数のalphaの最大値が最終的な探索値)
  • 誰もalpha更新しなかった場合は、マスターが持っているalphaが最終的な探索値


あと、一ヶ月あったらクラスター探索作るんだけどなあ(^^;
選手権が終わったらぼちぼちやりましょう。