Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 public static void Implement(IEngineConf engineConf)
 {
     SpecifiedFiles.Init(engineConf);
     Logger.Init(engineConf);
     Util_KifuTreeLogWriter.Init(engineConf);
 }