Exemplo n.º 1
0
        /// <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
        }
Exemplo n.º 2
0
        /// <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);
        }