2020-04-30に更新

一手詰めルーチンを書こうぜ☆(^~^)?

びょふっ☆(^~^) 公開下書き

一手詰めルーチンは何が嬉しいんだぜ☆?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もし一手詰めルーチンが無ければ……☆」

20200430wcsc88.png

KIFUWARABE_80x100x8_01_Futu.gif
「 Root ノードから行ける Leaf ノードは全部行くぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そう、それが無駄くさい……☆」

20200430wcsc89.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 チェックメートかどうかは 局面を見て調べればいいのだから、チェックメートだったら 探索を打ち切ればいいんだぜ☆
そうすれば、後ろの ノード は探索しなくていい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Leaf に向かっている途中でできるから、 前向き枝刈り ね」

20200430wcsc91.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 一手詰めルーチン が入っていなければ、じゃあ玉を取られたら負けという らいおんキャッチ にすればいいんだが、
らいおんキャッチから見れば 一手詰めルーチンは 実質3手らいおんキャッチ ぐらいの効き目がある☆
つまり らいおんキャッチに比べ、一手詰めルーチンは 枝が伸びるのが2回前に 枝刈りできる☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 7手ぐらいしか読めないソフトに取って、2手前に枝刈りできるのは かなりでかい☆
一局面感覚的平均指し手80手 × 80手の 6400葉ノード + 80状態ノード = 6480状態ノードぐらい省けるぜ☆
そしてこれは 1手深く読めるようになるほど 威力が 80倍ずつ でかくなっていくぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何を言ってるか分からん……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 他のコンピューター将棋ソフトは 3手詰めルーチン を入れるのが今どきなんだけど、自力実装できてないので 1手詰め ルーチンにしましょう」

一手詰めルーチンって何なんだぜ☆?

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ わたしがやっているのは ライオンキャッチ だったのか……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 WCSC28の どうぶつしょうぎバージョンきふわらべ を 本将棋用に改造したからな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ わたしは どうぶつしょうぎルール で本将棋大会に出てたのか……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 おおきな森のどうぶつしょうぎ バージョンだから 十分 本将棋に混ざれるのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 本将棋では、らいおんキャッチ ではなく 一手詰め がルールだぜ☆ 玉が盤面に無いという状況はない ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 分かりづら……☆」

20200430wcsc92a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 一手詰めの1つ前では、 ↑ こんな感じで、専門用語がないので造語すると ジェイル ができているケースがある☆
玉が利きに飛び込むか、壁や味方の駒が邪魔で 8方向すべて 移動できないケースだぜ☆」

20200430wcsc93.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 また、 ↑ ジェイル ができていなくても、一手詰め できるぜ☆」

20200430wcsc93a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし、相手が ↑ 合い駒をもっていると 一手詰め できないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 例外が いくつもあったら わたしのプログラムにふさわしくないぜ☆ イッパンカ してくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee.gif
「 うおーーーっ ぬががが☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 一般化せずに かんたんに書けば もっと早くできあがるんじゃないの?」

20200430wcsc94.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 一手詰めの概念図は こうなると思うが、内容を詰めていこうぜ☆」

20200429wcsc86a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 以前、 Movility7 (モビリティ・セブン)というのを考えていたんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 将棋のルールに そんなもんは 無いけどな☆」

20200430wcsc94a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 一手詰めが決まったその決め手の Movility7 (モビリティ・セブン)は、このような概念図になるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 これが 一手詰めの トリガー というわけね」

20200430wcsc95.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 合い駒は 移動合い でもいいからな☆
ジェイルが完成するのは、 決め手 を指したときでいい☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 決め手 を指す前に ジェイルが完成しそうか、そうでないか 判定できないと なんでもかんでも 一手詰め判定することになるだろ☆」

20200430wcsc95a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この7パターンが、ジェイル完成まで どれぐらい離れているか 距離で表せばいいわけだろ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 持ち駒で ただ捨て王手 なんて いくらでもできるのだらか、その思惑は失敗するわよ」

20200430wcsc95a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これが ジェイル完成 の1歩手前の図で、 そこに打てば ジェイルが完成する図だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 分かりづら……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 決め手 に使った駒が 玉の逃げ道をついでに 塞ぐんだぜ☆
それが 竜 だったりすると、もう少し ジェイル は不完成でいい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 はいはい! 穴熊 してたら トリガー全開放よ! ぜんぜん計算 省けないわよ!」

KIFUWARABE_80x100x8_01_Futu.gif
「 しかも、決め手 の駒を 取られたら 一手詰め は不成立だろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame.gif
「 うっ ぶくぶくぶ……☆」

アルゴリズムにしましょう

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 一般化は諦めて、アルゴリズムにしましょう」

20200430wcsc96.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ 相手玉に 利き が被さることが トリガー だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 その決め手の駒を 取り返せるかどうかを 最初に調べろだぜ☆ 駒を取る手 は だいたい価値が高い☆」

20200430wcsc96a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 取り返せるんなら 不成立だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 玉で取り返せるかも知れないよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 叩き は当然 一手詰め判定しなさいよ!」

20200430wcsc96a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ただし、 ↑上図 の場合では、 銀で 取り返すことはできないぜ☆」

20200430wcsc96a4b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 空き王手 とか、 ディスカバード・アタックを食らってる方 になってしまうからな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ピン されている駒では 取り返せないのよ」

KIFUWARABE_80x100x8_01_Futu.gif
「 ピンされているかどうか は調べないといけないな☆」

20200430wcsc96a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 長い利き を持っている駒でも 手続きは 途中まで同じだな☆」

20200430wcsc96a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 合い駒を打つか、移動合い することができるかもしれないのが違いだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 持ち駒は ピンされていないから 楽だな☆」

20200430wcsc96a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、ここにくるまで どうあったにしろ、玉は 8方向 に逃げようとするぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 決め手の駒がある方向はもう調べたかと思うが、
調べたかどうか判定するヒマがあったら さっさと 決め手の駒がある方向も 再び調べてしまえだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 味方の駒、壁 の方には逃げれないぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 逃げるなら 空きマス よね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 相手の駒を取りながら逃げ てもいいぜ☆ 腹銀とか☆」

20200430wcsc96a6b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 頭金の利きは広いからな☆ うしろにしか逃げ道は無いぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そこに 利き が利いてるか 調べておく必要があるな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 二歩や、打ち歩詰め、連続王手の千日手 は省けだぜ☆ 合い駒の二歩も無しな☆」

話しは出尽くしたのかだぜ☆?

KIFUWARABE_80x100x8_01_Futu.gif
「 もう出尽くしたか☆? なら、着手しようぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 囲碁ではないんで☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 自分、相手別の 利き判定ボード が要るんじゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 要るな☆」

20200430wcsc97.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 将棋の初手は30手と言うが、将棋ソフトは21回 空振りしている☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何だぜ、この図は☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 きふわらべはこの図を覚えておけよ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 つら……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 盤の外にも利いているんだから 初手は 61手 なんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 つら……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 この 利きボード は どうやって更新すんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 どんな初期局面でも、駒は順番なく同時に存在するんで、とりあえず 左上から右下まで スキャンして 1個ずつ 利きを計測しようぜ☆?」

<書きかけ>

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事