/// <summary> /// 指し手を決めます。 /// </summary> /// <param name="enableLog"></param> /// <param name="isHonshogi"></param> /// <param name="kifu"></param> /// <returns></returns> public KifuNode WA_Bestmove( bool isHonshogi, KifuTree kifu ) { #if DEBUG KaisetuBoards logF_kiki = new KaisetuBoards();// デバッグ用だが、メソッドはこのオブジェクトを必要としてしまう。 #endif EvaluationArgs args = new EvaluationArgsImpl( kifu.GetSennititeCounter(), this.FeatureVector, Util_KifuTreeLogWriter.REPORT_ENVIRONMENT #if DEBUG , logF_kiki #endif ); float alphabeta_otherBranchDecidedValue; switch (((KifuNode)kifu.CurNode).Value.KyokumenConst.KaisiPside) { case Playerside.P1: // 2プレイヤーはまだ、小さな数を見つけていないという設定。 alphabeta_otherBranchDecidedValue = float.MaxValue; break; case Playerside.P2: // 1プレイヤーはまだ、大きな数を見つけていないという設定。 alphabeta_otherBranchDecidedValue = float.MinValue; break; default: throw new Exception("探索直前、プレイヤーサイドのエラー"); } // // 指し手生成ルーチンで、棋譜ツリーを作ります。 // new Tansaku_FukasaYusen_Routine().WAA_Yomu_Start( kifu, isHonshogi, Mode_Tansaku.Shogi_ENgine, alphabeta_otherBranchDecidedValue, args); #if DEBUG // // 評価明細ログの書出し // Util_KifuTreeLogWriter.A_Write_KifuTreeLog( logF_kiki, kifu ); //Util_LogWriter500_HyokaMeisai.Log_Html5( // this, // logF_kiki, // kifu, // playerInfo, // logTag // ); #endif // 評価値の高いノードだけを残します。 this.EdagariEngine.EdaSibori_HighScore(kifu); // 評価値の同点があれば、同点決勝をして 1手に決めます。 KifuNode bestKifuNode = null; bestKifuNode = this.ChoiceNode_DoutenKessyou(kifu, isHonshogi); return(bestKifuNode); }
public static void Implement(IEngineConf engineConf) { SpecifiedFiles.Init(engineConf); Logger.Init(engineConf); Util_KifuTreeLogWriter.Init(engineConf); }