目指せ、第27回世界コンピュータ将棋選手権☆ ポナンザ・チェイナーを倒そうぜ☆(^~^)<その4>

2017-04-22 00:54

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「腹が減ったぜ☆」

KIFUWARABE_80x100x8_01_Futu

「壁でも食べたらどうだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「修繕費を払うぐらいなら 100円ローソンに行くぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「パーサーの拡張をしましょう!」

            Itiran_TextParser.KyokumenPattern = new Regex(
                @"fen " +
                // 123~はスペース数
                @"([123456789RZKHNrzkhn]+)" +//1段目
                @"/" +
                @"([123456789RZKHNrzkhn]+)" +//2段目
                @"/" +
                @"([123456789RZKHNrzkhn]+)" +//3段目
                @"/" +
                @"([123456789RZKHNrzkhn]+)" +//4段目
                @" " +
                // 持駒
                @"\-?" +//なし
                @"(\d*Z)?" +//▲ぞう ※持ち駒が1個だけの場合は、数字が省略されます。
                @"(\d*K)?" +//▲きりん
                @"(\d*H)?" +//▲ひよこ
                @"(\d*z)?" +//△ぞう
                @"(\d*k)?" +//△きりん
                @"(\d*h)?" +//△ひよこ
                @" " +
                @"(1|2)" +//手番
                @""
#if !UNITY
                , RegexOptions.Compiled
#endif
            );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつしょうぎ で動きをテストしてるんで、

どうぶつしょうぎ と 本将棋 の両方に対応させたい……、

とはいえ いきなり 9×9 の将棋盤は まだ作れないので、

必要最低限主義者を パンチで コンクリートの床に落とし、

1辺が 3~9升の長さで可変する将棋盤を見越した改造をするぜ☆」

KIFUWARABE_80x100x8_01_Futu

「長い☆ 3行で☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「横幅と、

縦幅を

選べる将棋盤にするぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「やっちゃいましょう!」


01:54

            Itiran_TextParser.KyokumenPattern = new Regex(
                @"fen " +
                @"([123456789RZKHNrzkhn/]+)" +// とりあえず ごっそりマッチ。123~はスペース数
                @" " +
                // 持駒
                @"\-?" +//なし
                @"(\d*Z)?" +//▲ぞう ※持ち駒が1個だけの場合は、数字が省略されます。
                @"(\d*K)?" +//▲きりん
                @"(\d*H)?" +//▲ひよこ
                @"(\d*z)?" +//△ぞう
                @"(\d*k)?" +//△きりん
                @"(\d*h)?" +//△ひよこ
                @" " +
                @"(1|2)" +//手番
                @""
#if !UNITY
                , RegexOptions.Compiled
#endif
            );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「1ステップでやる方法は 難易度が 爆上がり したんで、

2ステップでやる方法にしたぜ☆ カッコ悪いけど簡単☆」

KIFUWARABE_80x100x8_01_Futu

「どんどん カッコ悪くしていこうぜ☆!」


02:08

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「8升は これでよし……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「やったわね!」

kifuwarabe_80x100x8_10_yattaze

「やったな☆!」

kitashirakawa_chiyuri_80x100x8_05_hehe

「やったぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「お父ん、何か食べたいんだが……☆」

KIFUWARABE_80x100x8_01_Futu

「畳でも食おうぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「もっと 食べて嬉しいものが食べたいぜ☆」


02:25

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame

「うっ☆ てきとうに 駒を増やしたら

局面ハッシュの 持ち駒の配列が サイズ・オーバーだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「てきとうに増やした駒に対応させましょう!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「盤上、駒台に存在する全ての駒が、片方の対局者の駒台の上に乗ったら、

を考えて 局面ハッシュ を再生成する方法を考えるかだぜ☆」


03:49

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「持ち駒のハッシュを改造したぜ☆

テストしようぜ☆」


04:17

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「Dirtyフラグを付けて ハッシュを再生成するようにしたぜ☆

指し手生成が 新しい盤に対応してないな……☆」

   /// 合法手の数は、38 が上限のようだが、
        /// 駒の動かし方や、駒の数などルールを ころころ 変えているところもあるので 多めに取っておこうぜ☆(^~^)
        /// 132もあれば十分だろう☆(^▽^)
        /// ざっくり、盤上12升×8方向 + 持ち駒3種類×12升
        ///
public const int SAIDAI_SASITE = 132;

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「配列サイズか☆ どうするかな☆

600 でいいか☆」


04:29

        /// 
        /// 手番と、
        /// 駒の種類と、その升、
        /// この3つを指定すると、利きを表にして返すぜ☆(^▽^)
/// /// /// /// /// public static bool[] Kiki(Taikyokusya tb, Komasyurui ks, Masu attackerMs) { bool[] kiki = new bool[Const_Kyokumen.MASUS]; // 盤上 for (int dan = 0; dan < Option_Application.Optionlist.BanTateHaba; dan++) { kiki[dan * Option_Application.Optionlist.BanYokoHaba + 0] = Util_HiouteCase.IsLegalMove(tb, (Masu)(dan * Option_Application.Optionlist.BanYokoHaba + 0), ks, attackerMs); kiki[dan * Option_Application.Optionlist.BanYokoHaba + 1] = Util_HiouteCase.IsLegalMove(tb, (Masu)(dan * Option_Application.Optionlist.BanYokoHaba + 1), ks, attackerMs); kiki[dan * Option_Application.Optionlist.BanYokoHaba + 2] = Util_HiouteCase.IsLegalMove(tb, (Masu)(dan * Option_Application.Optionlist.BanYokoHaba + 2), ks, attackerMs); } return kiki; }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「盤サイズの決め打ちが多いな☆」


06:01

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「変数名 idoBB を idosakiBB_base、idosakiBB_copy に分けたぜ☆

けっこう 混同している改造ミスがあったぜ☆」


06:16

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「らいおんをキャッチする手があれば それ以上考えない、という分岐で

らいおんをキャッチする手以外のも らいおんをキャッチする手と 数えている不具合があったぜ☆」


06:37

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「まだ 8×8盤だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「少しずつ改造していきましょう!」


09:49

        /// 
        /// FIXME:
        ///
///0~63 /// public Bitboard RightShift(int shift) { // 上位ビットの右の方は、右にはみ出る。 ulong hamideru = (~0UL >> shift) & (ulong)m_value64127_; // 全ビット立ってるのが ~0UL // とりあえず、右シフトする m_value64127_ >>= shift; m_value063_ >>= shift; // はみ出た分を、左端に移動して、 // 下位のビットの上の方へ、コピーしてみよう。 m_value063_ |= (long)(hamideru << (BIT64- shift)); return this; } ///

        /// FIXME:
///0~63 /// public Bitboard LeftShift(int shift) { // 下位ビットの左の方は、左にはみ出る。 ulong hamideru = (~0UL << shift) & (ulong)m_value063_; // 全ビット立ってるのが ~0UL // とりあえず、左シフトする m_value64127_ <<= shift; m_value063_ <<= shift; // はみ出た分を、右端に移動して、 // 上位のビットの下の方へ、コピーしてみよう。 m_value64127_ |= (long)(hamideru >> (BIT64 - shift)); return this; }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「うーむ、符号が邪魔して むずかしいぜ☆

こんなんでいいのか?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「縦1列にならないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「8×8盤の時点で怪しいぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「5×5盤ならきれいなもんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「7×7 から なにか 芸術的なうつくしさを感じるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「6×6盤で 下の方に行くほど 怪しいんだが☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「最初から おかしなビットが立っているし、

32ビットシフトから ビットシフトは停止する☆」


10:45

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつたちには広い盤だぜ☆

はぢめての 2バイト ビットボードを 歩き回ってみるかだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「後手番は任せろだぜ☆」


11:02

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「64ビット付近から おかしくなるんだぜ☆」


11:40

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「レフトシフトは 見た分は 動いているんだが、

ライトシフトは シフト後の 残像が残ってるぜ☆ 直さないと☆」


12:39

        public bool IsIntersect(Masu ms)
        {
            return
                0UL != (Value64127 & (1UL << ((int)ms - MASU64)))
                ||
                0UL != (Value063 & (1UL << (int)ms));
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これも間違いだぜ☆」

        public bool IsIntersect(Masu ms)
        {
            if ((int)ms < MASU64)
            {
                return 0UL != (Value063 & (1UL << (int)ms));
            }
            else
            {
                return 0UL != (Value64127 & (1UL << ((int)ms - MASU64)));
            }
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こうじゃないか☆? 周りに似たコードがあって真似たんだが

これは別のケースだろう☆」


14:08

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「popcnt も符号がからんで おかしいんだろうか☆

64bit いっぱい使わないで 63bit とかにした方がいいのだろうか☆?」

 

はてなブックマーク - 目指せ、第27回世界コンピュータ将棋選手権☆ ポナンザ・チェイナーを倒そうぜ☆(^~^)<その4>
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です