/// <summary> /// 読む。 /// /// 棋譜ツリーを作成します。 /// </summary> /// <param name="kifu">この棋譜ツリーの現局面に、次局面をぶら下げて行きます。</param> /// <param name="enableLog"></param> /// <param name="isHonshogi"></param> /// <param name="logTag"></param> /// <returns></returns> public void WAA_Yomu_Start( KifuTree kifu, bool isHonshogi, Mode_Tansaku mode_Tansaku, float alphabeta_otherBranchDecidedValue, EvaluationArgs args ) { }
public Tansaku_Genjo CreateGenjo( KifuTree kifu, bool isHonshogi, Mode_Tansaku mode_Tansaku ) { // TODO:ここではログを出力せずに、ツリーの先端で出力したい。 KaisetuBoards logF_moveKiki = new KaisetuBoards(); // TODO:「読む」と、ツリー構造が作成されます。 //int[] yomuLimitter = new int[]{ // 600, // 読みの1手目の横幅 // 王手回避漏れのために、合法手全読み(約600)は必要です。 // 100, // 読みの2手目の横幅 // 100, // 読みの3手目の横幅 // //2, // 読みの4手目の横幅 // //1 // 読みの5手目の横幅 //}; //// ↓これなら1手1秒で指せる☆ //int[] yomuLimitter = new int[]{ // 600, // 読みの1手目の横幅 // 王手回避漏れのために、合法手全読み(約600)は必要です。 // 150, // 読みの2手目の横幅 // 150, // 読みの3手目の横幅 // //2 // 読みの4手目の横幅 // //1 // 読みの5手目の横幅 //}; //int[] yomuLimitter = new int[]{ // 600, // 読みの1手目の横幅 // 王手回避漏れのために、合法手全読み(約600)は必要です。 // 600, // 読みの2手目の横幅 // 600, // 読みの3手目の横幅 //}; //ok //int[] yomuLimitter = new int[]{ // 0, // 現局面は無視します。 // 600, // 読みの1手目の横幅 // 王手回避漏れのために、合法手全読み(約600)は必要です。 // 600, // 読みの2手目の横幅 //}; int[] yomuLimitter; #if DEBUG if (mode_Tansaku == Mode_Tansaku.Learning) { // 学習モードでは、スピード優先で、2手の読みとします。 // 2手の読み。 yomuLimitter = new int[] { 0, // 現局面は無視します。 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 600, // 読みの2手目の横幅 }; } else { /* * // 2手の読み。 * yomuLimitter = new int[]{ * 0, // 現局面は無視します。 * 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 * 600, // 読みの2手目の横幅 * }; * // */ //* // 3手の読み。 yomuLimitter = new int[] { 0, // 現局面は無視します。 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 600, // 読みの2手目の横幅 600, // 読みの3手目の横幅 }; // */ } #else if (mode_Tansaku == Mode_Tansaku.Learning) { //System.Windows.Forms.MessageBox.Show("学習モード"); // 学習モードでは、スピード優先で、2手の読みとします。 //* // 2手の読み。 yomuLimitter = new int[] { 0, // 現局面は無視します。 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 600, // 読みの2手目の横幅 }; // */ /* // 3手の読み。 * yomuLimitter = new int[]{ * 0, // 現局面は無視します。 * 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 * 600, // 読みの2手目の横幅 * 600, // 読みの3手目の横幅 * }; * // */ } else { //System.Windows.Forms.MessageBox.Show("本番モード"); /* // 2手の読み。 * yomuLimitter = new int[]{ * 0, // 現局面は無視します。 * 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 * 600, // 読みの2手目の横幅 * }; * // */ //* // 3手の読み。 yomuLimitter = new int[] { 0, // 現局面は無視します。 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 600, // 読みの2手目の横幅 600, // 読みの3手目の横幅 }; // */ /* // 4手の読み。 * yomuLimitter = new int[]{ * 0, // 現局面は無視します。 * 600, // 読みの1手目の横幅 // 王手回避漏れのために、1手目は、合法手全読み(約600)は必要です。 * 600, // 読みの2手目の横幅 * 600, // 読みの3手目の横幅 * 600, // 読みの4手目の横幅 * }; * // */ } #endif Tansaku_Args args = new Tansaku_ArgsImpl(isHonshogi, yomuLimitter, logF_moveKiki); Tansaku_Genjo genjo = new Tansaku_GenjoImpl( ((KifuNode)kifu.CurNode).Value.KyokumenConst.Temezumi, args ); return(genjo); }
/// <summary> /// 読む。 /// /// 棋譜ツリーを作成します。 /// </summary> /// <param name="kifu">この棋譜ツリーの現局面に、次局面をぶら下げて行きます。</param> /// <param name="enableLog"></param> /// <param name="isHonshogi"></param> /// <returns></returns> public void WAA_Yomu_Start( KifuTree kifu, bool isHonshogi, Mode_Tansaku mode_Tansaku, float alphabeta_otherBranchDecidedValue, EvaluationArgs args ) { Tansaku_Genjo genjo = this.CreateGenjo(kifu, isHonshogi, mode_Tansaku); KifuNode node_yomi = (KifuNode)kifu.CurNode; int wideCount2 = 0; // // (1)合法手に一対一対応した子ノードを作成し、ハブ・ノードにぶら下げます。 // Dictionary <string, SasuEntry> moveBetuEntry; int yomiDeep; float a_childrenBest; Tansaku_FukasaYusen_Routine.CreateEntries_BeforeLoop( genjo, node_yomi, out moveBetuEntry, out yomiDeep, out a_childrenBest ); int moveBetuEntry_count = moveBetuEntry.Count; if (Tansaku_FukasaYusen_Routine.CanNotNextLoop(yomiDeep, wideCount2, moveBetuEntry_count, genjo)) { // 1手も読まないのなら。 // FIXME: エラー? //---------------------------------------- // もう深くよまないなら //---------------------------------------- Tansaku_FukasaYusen_Routine.Do_Leaf( genjo, node_yomi, args, out a_childrenBest ); } else { } float child_bestScore = Tansaku_FukasaYusen_Routine.WAAA_Yomu_Loop( genjo, alphabeta_otherBranchDecidedValue, node_yomi, moveBetuEntry.Count, args ); #if DEBUG if (0 < genjo.Args.LogF_moveKiki.boards.Count)//ログが残っているなら { //// //// ログの書き出し //// //Util_GraphicalLog.WriteHtml5( // true,//enableLog, // "MoveRoutine#Yomi_NextNodes(00)新ログ", // $"[{Util_GraphicalLog.BoardFileLog_ToJsonStr(genjo.Args.LogF_moveKiki)}]" //); // 書き出した分はクリアーします。 genjo.Args.LogF_moveKiki.boards.Clear(); } #endif }