目指せ、第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>
Bookmark this on Yahoo Bookmark
Buzz This
Bookmark this on Google Bookmarks
Bookmark this on Digg
Share on Facebook
Share on reddit
Share on LinkedIn
Share on StumbleUpon
Share on GREE
email this
LINEで送る
Pocket

コメントを残す

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