/// <summary> /// もう深く読まない場合の処理。 /// </summary> private static void Do_Leaf( Tansaku_Genjo genjo, KifuNode node_yomi, EvaluationArgs args, out float out_a_childrenBest ) { // 局面に評価値を付けます。 Util_Scoreing.DoScoreing_Kyokumen( node_yomi,//mutable args ); // 局面の評価値。 out_a_childrenBest = node_yomi.Score; #if DEBUG_ALPHA_METHOD Logger.Trace($"1. 手({node_yomi.Value.ToKyokumenConst.Temezumi})読({yomiDeep}) 兄弟最善=[{a_siblingDecidedValue}] 子ベスト=[{a_childrenBest}]"); #endif #if DEBUG bool enableLog = false; // // ログの書き出し // Util_GraphicalLog.WriteHtml5( enableLog, "指し手生成ログA", $"[{Conv_KaisetuBoards.ToJsonStr(genjo.Args.LogF_moveKiki)}]" ); // 書き出した分はクリアーします。 genjo.Args.LogF_moveKiki.boards.Clear(); #endif //#if DEBUG // // // // 盤1個分のログの準備 // // // Util_LogBuilder510.Build_LogBoard( // nodePath, // niniNode, // kifu_forAssert, // reportEnvironment, // logF_kiki, // logTag // ); //#endif }
/// <summary> /// 指し手を決めます。 /// </summary> /// <param name="enableLog"></param> /// <param name="isHonshogi"></param> /// <param name="kifu"></param> /// <param name="playerInfo"></param> /// <param name="logTag"></param> /// <returns></returns> public ShootingStarlightable WA_Bestmove( bool enableLog, bool isHonshogi, KifuTree kifu, PlayerInfo playerInfo ) { // 「移動」タイプの狙いを、どんどん付け足します。 this.Kokoro.Omoituki( playerInfo.Playerside, (KifuNode)kifu.CurNode, this.Seikaku); // // 指し手生成ルーチンで、棋譜ツリーを作ります。 // SsssLogGenjo ssssLog = new SsssLogGenjoImpl(enableLog); MoveGenRoutine.WAA_Yomu_Start(kifu, isHonshogi, ssssLog); // デバッグ用だが、メソッドはこのオブジェクトを必要としてしまう。 GraphicalLog_File logF_kiki = new GraphicalLog_File(); // 点数を付ける(葉ノードに点数を付け、途中のノードの点数も出します) this.MinimaxEngine.Tensuduke_ForeachLeafs( Util_Sky.ToSfenMoveText(kifu.CurNode.Key), (KifuNode)kifu.CurNode, kifu, this.Kokoro, playerInfo, ShogisasiImpl.ReportEnvironment, logF_kiki ); #if DEBUG // 評価明細のログ出力。 this.kyHyokaWriter.Write_ForeachLeafs( Util_Sky.ToSfenMoveText(kifu.CurNode.Key), (KifuNode)kifu.CurNode, kifu, playerInfo, "" + Util_Sky.ToSfenMoveText(kifu.CurNode.Key) + "/", ShogisasiImpl.ReportEnvironment ); if (0 < logF_kiki.boards.Count)//ログが残っているなら { // // ログの書き出し // Util_GraphicalLog.Log( true,//enableLog, "#評価ログ", "[" + Util_GraphicalLog.BoardFileLog_ToJsonStr(logF_kiki) + "]" ); // 書き出した分はクリアーします。 logF_kiki.boards.Clear(); } #endif // 枝狩りする。 this.EdagariEngine.ScoreSibori(kifu, this.Kokoro); // 1手に決める ShootingStarlightable bestMove = this.ErabuEngine.ChoiceBestMove(kifu, enableLog, isHonshogi); return(bestMove); }