どうぶつしょうぎをプログラもうぜ☆(33) 封殺 を考えようぜ☆(^~^)

2016-11-30 20:51

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「例えば、次の局面☆」

201611302052

KIFUWARABE_80x100x8_01_Futu

「次の手は、探索したところ

B2ぞう で 必至 だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう☆

指し手生成の段階では Z*B2 は 緩慢手かんまんて 扱いだが、

封殺手ふうさつて というカテゴリーを作って、

格上げさせたいんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「封殺手 と 緩慢手 の違いは何なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「その前に、

王の逃げ道を塞いでいる駒を動かして、

王の逃げ道を開けてしまう手があると、

王を逃がしてしまうことがあるんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「きりんを動かしても、その先で 詰めることはできるが、

探索では 6手 は読むヒツヨウがあるな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「まいった、の最後の1手まで 読む必要があるから偶数手になるぜ☆

それより、C4 にでも 迷子の ぞう を打っておけば

ステイルメイトで 詰みだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「包囲網を崩すのは 悪手 なのね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「でも、包囲駒での王手を、

緩慢手より 順位を下げるのは どうかと思うぜ☆

それより、

封殺手を 王手より順位の上に持ってきた方が

丸く収まるんじゃないかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ヌル・ムーブ なんていいんじゃないの?

一手パスしてみて、次のターンで 参っていれば、

ステイルメイトを発見できるわよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「探索部が ごちゃごちゃするぜ☆

もっと いじらない方法で やりたいぜ☆」

kifuwarabe_80x100x8_08_gentleman

「▽らいおんの 移動マスは A1、A2、B2、C1、C2 の5つだぜ☆

これを ▲きりん 2つと ▲ぞう で塞いでいるぜ☆

この3つの駒は どれも動かしたくないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「重ね利き を今 見てないからな☆

もしかすると 動かしても 別の駒の利きが 残っている時もあるかもしれない☆

重ね利き をしていない個所に利かしている駒は

動かしたくないぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「重ね利きを調べられないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「処理が増えると 探索が浅くなるぜ☆

利きの数の差分更新 を持っていれば イッパツ あるんだが☆」

KIFUWARABE_80x100x8_01_Futu

「イッパツ って何だぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒の場所ごとに、利いてる升番号を配列で全部持っておくのな☆

その駒が消えたり、現れたりするたびに、その升のカウントを

1増やしたり、減らしたりするんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「すると 重ね利きの数は調べられるので、

自分が らいおん の移動マスに掛けている全ての利きの、

重ね利きの数が 2以上なら、

その駒は 包囲駒から外しても、王の利きは残るぜ☆」

KIFUWARABE_80x100x8_01_Futu

「やろうぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「処理が重くなるのが 眼に見えてるからな☆

どうしようかな☆」


23:06

201611302305

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これが 利きの数 のボードになるんだが、

これを 1手 指すたびに 足したり引いたり

しないといけないぜ☆」

KIFUWARABE_80x100x8_01_Futu

「やろうぜ☆?」


2016-12-01 00:04

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「利きの数の差分更新の下準備をしておいたぜ☆

使おうぜ☆」

kifuwarabe_80x100x8_10_yattaze

「よっしゃ☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「その駒を取り除いても

盤外を除く らいおん の近傍8マスに 利きが 1つ以上残っていれば

最低限必要な包囲駒ということではないことが 分かるわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「にわとり や らいおん の野郎は、

移動先で また 包囲網の利きを キープしていることもあるぜ☆

駒を1個動かして、まだ包囲されているか、をチェックしているのと 大して変わらないな☆」

KIFUWARABE_80x100x8_01_Futu

「指し手生成するときは 移動元マスと 移動先マスは

分かっているだろ☆

動かしてみて、包囲網を解除する手は

包囲解除紐付王手、

包囲解除しない紐付王手、

と分けてみればどうだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「指し手の種類の数が 2倍になってしまう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「まず、相手のらいおんが ステイルメイト にあるのか

調べてみましょう!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「やっぱり、うそパス☆?」


00:58

201612010058

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「包囲されているかどうか、だけは判定できるようにしたぜ☆」

kifuwarabe_80x100x8_10_yattaze

「やったな☆!」

kitashirakawa_chiyuri_80x100x8_05_hehe

「やったぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どう使おうかなんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「包囲されている らいおんの8近傍のうち、

利きの重ね合わせの数が 1 のところだけ調べれば、

『動かすことに疑問のある駒』 は分かるでしょ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「 『動かすことに疑問のある駒』 の駒種類の

利きのうち、 らいおんキャッチ 以外の利きを外す移動先は、

『包囲網解除の手』 ということまでは分かるな☆

『包囲網解除の手を悪手とする』フラグでも作るかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「 『らいおんの逃げ道を開ける手』 という名前にしたら

どうだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「分かりやすいわねぇ」


02:24

201612010224

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「単純に、包囲している駒だけなら 取れるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「この駒それぞれの、動くと包囲が崩れる移動先を

調べましょう」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「指し手リストが2つあるんなら、

分けて持っておけるんだが……☆」


04:40

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ストックフィッシュ7 では リストを2つ作るのをケチって

リストの前から 最善手を入れて、

リストの後ろから 緩慢手を入れる、

というふうにやってるんだが、真似するのも大変なので

とりあえず リストを2つ作るぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「でけた☆」

201612010438a

201612010438b

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「指してみましょう!」


04:45

KIFUWARABE_80x100x8_01_Futu

「B2ぞう☆!」

201612010445

kitashirakawa_chiyuri_80x100x8_05_hehe

「0.007秒で 必至を見つけたようなんだぜ☆」

kifuwarabe_80x100x8_10_yattaze

「やったな☆!」

kitashirakawa_chiyuri_80x100x8_05_hehe

「やったぜ☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「やったわね!」

kitashirakawa_chiyuri_80x100x8_05_hehe

「やったんだぜ☆!」


06:48

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「どれぐらい 速度が落ちたのか 調べたんだが……☆」

201612010647

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「2分間で 16手 読めるようになっているぜ☆

前まで 2分間で 12手 ぐらいだったのに☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「無駄な手を読まなくなった分、深く読むようになったのね」

kifuwarabe_80x100x8_08_gentleman

「へっへっへ☆(^▽^)」


 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(33) 封殺 を考えようぜ☆(^~^)
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(32) SEE を考えようぜ☆(^~^)

2016-11-29 14:07

 

Chess Programing Wiki 「Static Exchange Evaluation」

https://chessprogramming.wikispaces.com/Static+Exchange+Evaluation

 

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューター・チェス・ウィキ に乗っていた SEE のサンプル・コードが

クソ・コード だったので、自分の頭で考えようぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「SEE って何なのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「単に 駒を取って 得した 評価値だぜ☆

100点の ひよこ を取ったら、 SEE評価値は 100点 だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「じゃあ 駒割りと SEE評価値は 何が違うのよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒の取り合いを最後までやったときの、

という意味が付いてくる評価値だぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「そんなの、

駒を取ったら足して、駒を取られたら引いていけば

簡単に求まるんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「安い駒から 交換を始める、という工夫があるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「で SEE評価値 なんだが、

注意するところとしては、手番から見た数字なので

駒を取り合って 最終的に 自分が良いと思っていたら プラス だぜ☆

相手番がどう思ってるか知りたければ 単に 符号を反転させるだけだぜ☆

SEE評価値が マイナス が出ていれば、損しているぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「自分の手番で、自分のSEE評価値を見るんだぜ☆

さしひき 0 で、まあ 良しとするかな とか、

さしひき +200 で ありだな、とか

さしひき -100 で、無いわ、とか☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんか 簡単そうなプログラムに思えるけど……、

何が難しいわけ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒を動かさずに計算したい☆

計算に時間がかからないようにする工夫が難しいんだぜ☆

ふつうに 駒を動かしていたら、ただの勘定だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「だが、コンピューター・チェス・ウィキ に書かれている

サンプル・プログラムは 駒を動かして 駒を取り合って

何点 損しました、と数えているんだぜ☆

だから クソ・コード☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「計算スピード のことを考えずに 考え方の サンプルとして

プログラムを置いてあるのね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「肝心の 安い駒をどう調べるの、とか書いてないだろ☆

自分で考えて書いたぜ☆」


KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ポイントとしては、

100点の駒を取って 100点得した、と考えるのではなく、

取り合いのときに出てくる駒は 全部 相手に渡る駒だ、

と考えて

使った駒を マイナス にして累計していくんだぜ☆

で、お互いの 損を相殺すると、

どっちかに損が残っているか、0かの どっちかだろ☆

それを プラス・マイナス反転させると、得している評価値が出てくる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんか ややこしいこと してんのね。

駒得をプラスしあって 最後に引き算するのと 何が違うの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「例えば、先手の得点、後手の得点 と 2つ計って

先手の累計、後手の累計と 加算していって

最後に 後手-先手 とでもやれば 先手のプラスが出るんだが、

コンピューターの計算では 計算を省きたいので この数字を 1個 でやってるのな☆

だから ややこしいことを している☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「交換の途中にいる 自分の駒は、相手に渡すいけにえの駒と

考える☆

ひよこ(100)を ぞう で 取ったら

100 - 0

と考える☆ SEE評価値は 100点だぜ☆ この ぞう(200) は 取れるかもしれない ぞう なので、次の相手番で 取りに行ける駒があれば

200 - 100

と考える☆ SEE評価値は 100点だぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「-100点でも、200点取り返せば +100点よね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「その ぞう を取りに行った 100 点の ひよこ、

また取られるかもしれないな☆ もし取れるなら、

100 - 100

と考える☆ すると さしひき 0 点に戻ってしまうぜ☆

式としては、

取った駒の価値 - SEE評価値

だぜ☆

-〔100 -{200 - (100 - 0)}〕 =

-〔100 -{200 - (   100  )}〕 =

-〔100 -{      100      }〕 =

-〔          0           〕 = 0」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「評価値を2つ用意せずに 1つで やってしまっているわね。

器用なことをするから わかりづらいのね」

KIFUWARABE_80x100x8_01_Futu

「ひよこ 2個取るために、 ぞう 1個 を捨てるのは、

いいのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そこらへん、どうするかな☆

さしひき 0 だから 取りに行ってるんだが☆」


15:24

OKAZAKI_Yumemi_80x80x8_01_Damaru

「探索の 葉っぱ で SEE評価値 を どのように使うの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「今の続きの局面を、相手番に指させるんだぜ☆

相手が 駒を取り合って出した SEE評価値より、

取り合う前の 葉の評価値 の方が 同じか高いんだったら

踏み込んでも問題なしとして 葉の評価値をそのまま使おうぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「相手の SEE評価値がプラスだったら、

自分にとっては 損するから

-SEE評価値 を、葉の点数にしようぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「簡単な実装なのねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「動けばいいんで☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「とりあえず サンプル・プログラム を真似たぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「クソ・コード なんじゃないのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「とりあえず コードを書いて動かしてみようぜ☆」


18:10

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「よし、ずぼら でも動くコードを 導入したぜ☆」

201611291821b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「① が、問題となっている局面な☆」

201611291821b_1

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレイヤー2は A3 の ▲きりん に襲い掛かるのは

良い手かどうか 調べようぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「で、再帰関数さいきかんすう の特徴なんだが、

いったん 最後まで 突っ走ってから、

戻ってくる途中で 計算する☆

つまり 次に見るのは ⑤ だぜ☆」

201611291821b_2

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「▲A3 に襲い掛かれる プレイヤー2の 一番 やっすい駒、

A2 の きりん が突っ込んだようなんだぜ☆

SEE値は 0 点……、バグか☆

ここは きりん を取ったので 200 点に直しておくぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「次に見るのは ④ だぜ☆」

201611291821b_4

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレイヤー1 は、一番やっすい駒、

A4 の ▲ひよこ で 取り返したようだな☆

きりん を取ったので SEE評価値は 200点 だぜ☆

まあ バグで最初の きりんの200点が入ってないので

本当はここは 0点 なんだが☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「次に見るのは ③ だぜ☆」

201611291821b_3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレイヤー2 は、今残っている 一番やっすい駒

B2 の ▽ぞう で ひよこ(100) を取りに行ったな☆

あれっ、SEE評価値が 0 になっているぜ☆

ここは -100、

最初の きりん も正せば +100 になっていて欲しかったぜ☆」

KIFUWARABE_80x100x8_01_Futu

「しっかりしろ、お父ん☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「最後に見るのは ② だぜ☆」

201611291821b_2

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ぞう を取ったので 200 になっているな☆

バグが無ければ 本来ここで SEE評価値 100 になっているはずだぜ☆

プレイヤー1 から見て SEE評価値 100 なら、

プレイヤー2 から見れば SEE評価値 -100 なので、

駒交換を始めるのは 損だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「検算してみましょう。

プレイヤー2 は きりん(200) ぞう(200) 損の 400損、

プレイヤー1 は きりん(200) ひよこ(100) 損の 300損、

帳尻は プレイヤー1 の 100得よ。

プレイヤー2は、駒交換を始めるのは -100 の損ね」

KIFUWARABE_80x100x8_01_Futu

「お父ん、バグ直せだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame

「…………☆」


19:39

201611291938

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「この局面を覚えておこうぜ☆

改造FEN を覚えておけば、あとで局面を再現できるぜ☆」


20:05

201611291959

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「直したぜ☆」


20:12

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「サンプル・プログラムには この他にも

らいおんが取られたら 駒の取り合いをやめるとか、

Standing pat とか、 なんか いろいろ 盛り込まれているようだが

分かんないのでパスだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「らいおん が取られるのは 重大事項 なんじゃないの?」


20:55

\ カタカタ /

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒の取り合いで らいおん が取られた場合、

そこで SEE評価値を調べるのを中断し、

詰みか、詰められ の手数表示に 切り替えるようにしておいたぜ☆」

KIFUWARABE_80x100x8_01_Futu

「いいんじゃないか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「SEEのソースコードを張り付けておくぜ☆

そのままでは使えないが、雰囲気は分かるだろ☆」

        /// <summary>
        /// static excange evaluation という技法だぜ☆(^▽^)
        /// 駒の取り合いで どっちが大損こいているか調べるぜ☆(^~^)
        /// 
        /// 第2引数は、動作確認用だぜ☆(^~^)使わないならヌルにしろだぜ☆
        /// </summary>
        public Hyokati SEE(Masu ms, String2 syuturyokuTest_orNull)
        {
            Hyokati hyokati = Hyokati.Hyokati_Rei;

            // そのマスに利いている駒を調べるぜ☆(^~^)
            Teban teban = this.Teban;
            Teban aiteban = Conv_Teban.Hanten(this.Teban);

            // ひよこ→きりん→ぞう→にわとり→らいおん の順にアタックするぜ☆(^▽^)
            Komasyurui[] junbanKs = new Komasyurui[] { Komasyurui.H, Komasyurui.K, Komasyurui.Z, Komasyurui.N, Komasyurui.R };
            Masu ms_src;
            for(int iKs=0; iKs< junbanKs.Length; iKs++)
            {
                uint semegomaBB = this.BB_Koma[(int)teban,(int)junbanKs[iKs]] &
                    Util_Bitboard.Effect1piki[(int)junbanKs[iKs], (int)aiteban, (int)ms];// msから相手番の利きを伸ばせば、攻撃を掛けれる場所にいる自駒が分かるぜ☆(^▽^)
                int iMs;
                while (Util_BitEnzan.PopNTZ(ref semegomaBB, out iMs))
                {
                    ms_src = (Masu)iMs;

                    // FIXME: とりあえず、成らずで作ってみるぜ☆(^~^)
                    Sasite ss = Util_SasiteSeisei.MakeSasite_03Narazu(ms_src, ms, this, this.Teban
#if DEBUG
                        , "SEE"
#endif
                        );

                    // 駒を取る前に、取る駒の点数を取っておくぜ☆(^~^)
                    Komasyurui tottaKomasyurui = Med_Koma.KomaToKomasyurui(this.Komas[(int)ms]);
                    Hyokati tottaKomaHyokati = Util_Hyokati.HyokaKomawari(tottaKomasyurui);

                    Nanteme nanteme = new NantemeImpl();
                    this.DoSasite(ss, ref nanteme, this.Teban
#if DEBUG
                        , "SEE"
                        , "SEE"
#endif
                        );

                    if (Komasyurui.R == tottaKomasyurui )
                    {
                        // らいおん を取ったのなら、決着だぜ☆(^~^)
                        hyokati = Hyokati.TumeTesu_SeiNoSu_ReiTeDume;
                        if (null != syuturyokuTest_orNull)
                        {
                            syuturyokuTest_orNull.AppendLine("SEE>らいおん捕まえた☆");
                        }
                    }
                    else
                    {
                        hyokati = this.SEE(ms, syuturyokuTest_orNull);

                        if (Conv_Hyokati.InHyokati(hyokati))
                        {
                            hyokati = (Hyokati)(tottaKomaHyokati - hyokati);
                        }
                        else
                        {
                            // 詰めが出ている場合☆
                            hyokati = (Hyokati)(-(int)Conv_Hyokati.CountUpTume(hyokati));
                        }
                    }

                    if (null != syuturyokuTest_orNull)
                    {
                        // 後ろから遡るように表示されると思うが、そういう仕組みなので仕方ないだろう☆(^~^)
                        Face_ConsoleGame.Ky("ky", syuturyokuTest_orNull);//デバッグ用☆
                        syuturyokuTest_orNull.Append("tottaKomaHyokati = ");
                        syuturyokuTest_orNull.AppendLine(((int)tottaKomaHyokati).ToString());
                        syuturyokuTest_orNull.Append("SEE = ");
                        Conv_Hyokati.Pretty(hyokati, syuturyokuTest_orNull);
                        syuturyokuTest_orNull.AppendLine();
                    }

                    this.UndoSasite(ss);

                    goto gt_EndLoop;
                }
            }
            gt_EndLoop:
            ;

            return hyokati;
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「呼び出しているところの、探索の葉っぱ は、こういう感じだぜ☆」

                out_nokosuYomisuji = new YomisujiImpl();// 読み筋として追加するものは無いぜ☆(^~^)
                out_nokosuHyokaRiyu_JohoNoTame = HyokaRiyu.Happa;
                // 当然だが、手番の局面を評価するんだぜ☆(^▽^)手番にとって良ければプラスだぜ☆
                Hyokati tebanHyokati = Util_Tansaku.Hyoka(out out_nokosuKomawariHyokati_JohoNoTame, out out_nokosuNikomaHyokati_JohoNoTame);

                // このとき、駒を取った手かどうか☆
                if (eranda_sasiteType==SasiteType.KomaWoToruTe)
                {
                    // 駒を取る手が 葉っぱ に来たときは、SEE(Static Exchange Evaluation)をやりたいぜ☆
                    // 駒の取り合いが収まったときの評価値を出すんだぜ☆
                    Hyokati aitebanHyokati = Option_Application.Kyokumen.SEE(Conv_Sasite.GetDstMasu(eranda_sasite), null);

                    if (aitebanHyokati <= tebanHyokati)
                    {
                        // 相手以上の評価値なら、良い手なんじゃないか☆(^▽^)
                    }
                    else
                    {
                        // 相手の方がいい評価値なら、やらない方がマシかも☆(>_<)?
                        tebanHyokati = (Hyokati)(-(int)aitebanHyokati);
                    }
                }

KIFUWARABE_80x100x8_01_Futu

「ローマ字で書かれた この クソ・コード は何なんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ストックフィッシュ7の GPLの感染から逃れるために

全面的に 怪奇 を目指しているぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「読みにくいわねぇ。

開発効率 落ちてんじゃないの?」

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(32) SEE を考えようぜ☆(^~^)
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(31) タダ捨てをやめてくれだぜ☆

2016-11-28 22:59

KITASHIRAKAWA_Chiyuri_80x100x8_02_Hidosu

「タダ捨てを止めてくれだぜ☆」

kifuwarabe_80x100x8_04_tententen

「まさか、取るやつがいるとは☆」

kifuwarabe_80x100x8_06_yodare

「最終的に わたしが勝っていればいいんだぜ☆

最後の手を指したとき わたしの駒が多くて、

相手の駒が少なければいいんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒を1個取って、相手が駒を取ってこない手が

一番いいよな☆

それを 勝手読み と言う☆」


23:45

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「序盤の研究をしようぜ☆」

201611282345

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「B3B2 ひよこ を、B1C2 らいおん と避けて、

H*B3 ひよこ打 と返されて、もう悪くしているぜ☆」

kifuwarabe_80x100x8_05_nohoho

「A1 の きりん を B1 や A2 に動かすより、

ぞう で ひよこ を取った方が マシ かだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ぜんぜん マシ じゃないぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「駒を取る手 より、

緩手 と思っている手 を指した方が マシ なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ひよこ と ぞう の交換になっている☆

指し手生成の段階で

(1) 得をする、駒を取る手

(2) 損をする、駒を取る手

に分けた方がいいのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「どう違うんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「相手の利きにある 駒 を取ったら、

取り返されるから 損するんじゃないか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「取り返されたのなら、取り返し返したらいいのよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そういうときって、安い駒、安い駒 と交換していって、

最後に どちらかかの 一番良い駒が残るよな☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「手番の利きが 1つ、相手番の利きが 1つ の升のとき、

手番の駒の利き は、これから動く駒の利きが 入ってるから

駒を取った後の利きは 0 よね。

すると 1 対 1 は、取り返されるのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どの駒が 1つのマスに対し、利き を掛けているか調べたいぜ☆

あるいは、1つのマスに対し、どのマスから 利きが掛かっているか調べたいぜ☆」

KIFUWARABE_80x100x8_01_Futu

「全マスの駒の利きを ループで 調べろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「取られる駒と、利きを掛けている駒の評価値が

1P       2P

──────ひよこ(100)

ぞう(200)  ひよこ(100)

とするとき、

1P は 100 得して、 200 損するから、

合計で 100 損する手、

『損をする、駒を取る手』 と見るべきなのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ぞう の価値が 200 でいいのかも疑問だけど!」

KIFUWARABE_80x100x8_01_Futu

「どっちでもいいぜ、決めてくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ、

1P       2P

──────ひよこ(100)

ぞう(200)  ひよこ(100)

きりん(200)

のように、後ろに きりん の準備があればいいのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「プレイヤーは ぞう(200) 1枚、

または きりん(200) 1枚を失うが、

ひよこ(100) 2枚 を手に入れるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「で、この きりん は 取り返されるところ にはいないんだろ☆

その駒を さばいた 時の局面の見晴らしは どうかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「さばかなきゃ良かった、とか思わないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒を さばき終わったあと の評価値の計算は簡単だぜ☆

駒割り と 二駒関係 を足し算するだけだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒を取り合っている間に 詰む とか、

取り返さない選択肢があるとか、

そういう計算は 含まないのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「とりあえず、

味方の駒と 相手の駒 をリストにして

駒の価値の低いもの順に並べ、

味方の数 と 同じ数だけの相手の駒の点数は 自分の点に、

味方の数 の駒の点数は 相手の点

にすればいいんじゃないか☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「味方より 相手の駒の数が少なければ、

相手の駒の点数は 全て自分の点になり、

先頭から相手の駒の数-1個まで の点数は 相手の点になるわね」

KIFUWARABE_80x100x8_01_Futu

「駒を取りに行って +- が0だったら

得をする、駒を取る手 なのかだぜ☆?

損をする、駒を取る手 なのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつしょうぎ は 後手必勝 と言うし、

先手番を取っても それが 得 とは限らないからな☆」

KIFUWARABE_80x100x8_01_Futu

「どっちなんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「初期局面で さっそく 出てくるわよ。

ひよこ の取り合い で、

『損をする、駒を取る手』

と決めてしまっていいのかしら?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ、イーブンだったら 良い手 にしておくかだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「実装できるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「探索の葉っぱに仕込むことになるかななんだぜ……☆

駒を取った手 の 葉っぱ に 評価値を付けるときに、

移動先の同じマスに まだ 相手の駒の利き が被っているか、

が トリガーになるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「毎回、利きを調べるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「敵駒の利き、というビットボードは作っているので、

駒の取り合いが発生するかどうかの判定は

1命令 で できるはずだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「どの駒が 利いているかは、全駒をループか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつしょうぎ に飛び利きは無いし、

移動先マスの 8近傍 をループでいいんじゃないか☆」

KIFUWARABE_80x100x8_01_Futu

「8近傍なんか 調べられるのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「らいおんの利き が、ちょうど 8近傍の形をしているな☆

ビットボードを、らいおんの利き の形に切り抜けば、

ちょうど 8近傍だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「あとは NTZ して << (左シフト) すれば マス番号 が出てくるわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「マス番号が分かれば、そのマスの駒を調べるだけだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「それを 味方の駒配列、敵の駒配列 に振り分けるだけだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そのあと、価値の低い順に駒を並び替える必要があるぜ☆

要素数8 の配列に 駒を3つぐらい入れて ソート かだぜ☆

駒の価値は 正の数だから、

これを 負の数にして 勝ちの低いもの順に並べれば、

価値の高い駒が先頭に集まって、うしろは 0 が並ぶんじゃないかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「細かなテクニックだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「細かなテクニック要らずだったら プログラマーは 石油王 になってるぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「よくわかんない例えね」

KIFUWARABE_80x100x8_01_Futu

「これで SEE とやらは 実装できるのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「スタティック・エクスチェンジ・エヴァリュエーション だろ☆

駒のエクスチェンジ取り合いスタティック終わった時のエヴァリュエーション評価値☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「さっそく 入れてみましょう!」


01:53

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつしょうぎ って、らいおん で王手かけてくることがあるよな☆

まあ、自殺手なんだが、

すぐ らいおん や近くの味方で取り返せば 逆に勝ち なんだが、

返討にしたのが らいおん なのか、そうでないのか、

いちいち 見分けるのが もったいないぜ☆

適当にぶったぎって らいおん だったらラッキー、

でいいのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「ひとまず、それで☆」


02:06

 

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あとで読もう☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ブログを しおり として利用するのね」

KIFUWARABE_80x100x8_01_Futu

「お父ん、自分の書いたブログ記事なんか 読み返さないだろ☆」


02:45

Chess Programming Wiki 「Static Exchange Evaluation」

https://chessprogramming.wikispaces.com/Static+Exchange+Evaluation

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「チェス・プログラミング・ウィキを見てみると、

お父んが考えていた方法より 簡単な方法で SEE を

実装しているぜ☆」

KIFUWARABE_80x100x8_01_Futu

「どうやるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒を取り合っている現場となっているマスが1つあるだろ☆

将棋盤上の その場所を指でずっと指して固定しておいて、

続けて プレイヤー1、プレイヤー2 は続きから

交互に指し続けるんだぜ☆

ここまでは 対局 と同じだな☆」

KIFUWARABE_80x100x8_01_Futu

「探索と同じだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「このとき、ルールがあるんだぜ☆

そのマスに利いている、自分の駒のうち 一番価値が低い駒だけを動かしなさい☆

勝ちが低いというのは、例えば ひよこ、ぞう、きりん、らいおん、と言った順だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ぞう と きりん は、どっちが価値が安いのかしら?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「シェビチェフ距離で考えると、

きりん は 1マス隣同士の 近接戦、

ぞう は 2マス隣同士で 中距離戦 をやっている☆

説明の仕方を変えると、

きりん は 自分たち隣同士で肩を組んで 壁を作ることができるんだが、

ぞう は 自分たち隣同士で肩を組んでも 隙間を抜けられる☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ほう!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「シェビチェフ距離については、ここに記事を書いた……、と

思ったら 記事が閉じていたぜ☆

どうなってるんだろな☆」

 

Enty 「ぐれーすけーる」

https://enty.jp/grayscale

 

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「で、きりん と ぞう は、どっちが価値が安いの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「まず、評価値とは 詰め が見えているときには役に立たず、

詰め を見つけるまでの 序盤 のための案内

ということを思い出そうぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「きりん を持っていると 詰め には利用しやすいが、

きりん が役に立つような場面は 包囲も終わった 終盤 だぜ☆

せいぜい 横に歩けるようになった ひよこ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「それに比べて ぞう は まるで 2マス飛びに動けるような 大ゴマ だぜ☆

序・中盤に 盤面の中央を制圧するには 向いているかもしれないぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「結論は 分かんないのね」

KIFUWARABE_80x100x8_01_Futu

「SEE の話しを続けてくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「Wiki に乗っているのは クソ・コード だったので

考え直すぜ☆

記事を変えるぜ☆」

 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(31) タダ捨てをやめてくれだぜ☆
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(30) どうぶつしょうぎ に、ステイルメイトは無いのか☆?

2016-11-28 03:45

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なんか インターネットで記事を読んで

どうぶつしょうぎ には ステイルメイトが無いのかと思ってたんだが☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「あるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「きふわらべ、お父んが作った 詰将棋 を 解いてみろだぜ☆」

kifuwarabe_80x100x8_08_gentleman

「任せろ☆」

201611280344b

KIFUWARABE_80x100x8_01_Futu

「持ち駒は ひよこ 1つ か☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「さあ、どう解くんだぜ☆?」

kifuwarabe_80x100x8_08_gentleman

「ひよこ を打つんだぜ☆」

201611280344

OKAZAKI_Yumemi_80x80x8_02_Syaberu

!?

OKAZAKI_Yumemi_80x80x8_01_Damaru

「どこに打ったの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「B4ひよこ だぜ☆

詰みだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんで?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ、プレイヤー2の らいおん を動かしてみろだぜ」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「…………」

KIFUWARABE_80x100x8_01_Futu

「夢美、諦めろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なんか、ステイルメイトのこと 考えてなかったんで、

ちょっと いろいろ テストしとかないと いけないななんだぜ☆」


04:02

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ、お父んが 前に考えていた 3手詰め を解いてみろだぜ☆」

kifuwarabe_80x100x8_08_gentleman

「任せろだぜ☆」

201611280401b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「3手詰めぐらい 解けるだろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「持ち駒は ひよこ 2つ ね。

こんなの 簡単よ」

KIFUWARABE_80x100x8_01_Futu

「お父ん、ひよこ は 2つ使わないと いけないのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ひよこ を 2つ使わないで、どんな解き方があるんだぜ☆?」

\ ピシッ /

KIFUWARABE_80x100x8_01_Futu

201611280401

OKAZAKI_Yumemi_80x80x8_01_Damaru

!?

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame

「…………☆」

KIFUWARABE_80x100x8_01_Futu

「お父んの詰将棋は 王手しなくても 解けるぜ☆ 簡単だな☆」

kitashirakawa_chiyuri_80x100x8_05_hehe

「よしよし☆

作ったわたしより 賢くなると いい気分だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「どうぶつしょうぎ は、自殺手も合法手と書いてあるわよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「自殺手は 負けでいいだろ☆

ステイルメイトも考えて 詰将棋 を作らないといけないな☆」

 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(30) どうぶつしょうぎ に、ステイルメイトは無いのか☆?
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(29) 手番とか、枝とか、葉っぱの評価値とは☆

2016-11-27 21:51

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「大間違いをしていたので、

間違えていない説明をするぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「11月27日なのに……。

11月1日から開発してるのに……」

KIFUWARABE_80x100x8_01_Futu

「ささ、話せだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ルート・デプス というのは、

根っこから葉までの深さという意味で、木の高さのことなんだが、

1、2、3、4、……、という風に 1 から増えていくぜ☆」

KIFUWARABE_80x100x8_01_Futu

「うむ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「で、木の高さが 1 というのは、

交差点みたいなもので、

胴体から見れば 頭1つ、腕2本、足2本 に分かれているように

おうぎかなめが1つの放射線図だぜ☆」

KIFUWARABE_80x100x8_01_Futu

「そうだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ、胴体を検索したときは、探索局面数 5 ということにしておこう☆

これ、ルート・デプス 1 ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「木の枝が 深くなると どうなるのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ、探索は 胴体から 手首の先まで伸びるとするぜ☆

頭1つに、手足4本☆ 手や足には それぞれ 5本の指が生えているから、次のような図になるぜ☆」

  • 胴体
    • 右腕
      • 親指、人差し指、中指、薬指、小指
    • 左腕
      • 親指、人差し指、中指、薬指、小指
    • 右足
      • 親指、人差し指、中指、薬指、小指
    • 左足
      • 親指、人差し指、中指、薬指、小指

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「一気に 枝 は 25本 になるぜ☆

葉っぱ は 21枚 ☆」

KIFUWARABE_80x100x8_01_Futu

「胴体が 自分の手番とすれば、

頭や腕、足は 相手の手番、

指は 自分の手番 だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう……、で ネガマックス法 を使っている場合は、

局面の評価値は 手番の者から見て 良ければプラス、

悪ければマイナスだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「相手番の 局面の評価値は、マイナスにすればいいな☆

頭、腕、足で 出した評価値は

頭に マイナスを付けて 符号を反転してやれば、

胴体の手番からみた評価値になるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう……、で、読み筋とかを出す info 文字列な☆

腕では 探索者の反対側の視点、

指では 探索者の視点になっているので、

いま どっちの視点になっているかも 評価値と一緒に表示しないと、

プラス・マイナスを 逆に見てしまうことがあるぜ☆」

KIFUWARABE_80x100x8_01_Futu

「表示するときに 探索者の反対側の視点の点数には 頭にマイナスを付けようぜ☆」

201611272237

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「評価値の頭に p1、p2 を付けてみるかだぜ☆

図示の局面で プレイヤー1 が -600 点というのは おかしいぜ☆

ひよこ100点、ぞう200点として、プレイヤー1が 600点だろ☆」

 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(29) 手番とか、枝とか、葉っぱの評価値とは☆
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(28) 静止探索を作ろうぜ☆?

2016-11-26 23:08

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒のタダ捨てがひどいぜ☆

静止探索を入れようぜ☆?」

KIFUWARABE_80x100x8_01_Futu

「静止探索って何だぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒を取ったら 評価値が上がるだろ☆

その次の手で 駒を取られたら 評価値が下がるだろ☆

駒を取る手が無くなって 評価値の上がり下がりが 静かになるまで

駒を取る手だけの探索を 続けることだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「入れようぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「普通の探索をコピーして 名前を SeisiTansaku にでも

変えればいいと思うんだが、

でかいプログラムだからな☆

バグ探しの範囲も2倍になるよな☆」

KIFUWARABE_80x100x8_01_Futu

「要らないところは コピーしなければ いいんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「運悪く、

静止探索の中で 千日手が回ってくるかも知れないし、

どのコードを外していいのか 分からないぜ☆」

KIFUWARABE_80x100x8_01_Futu

「単純に 探索の深さ を延長したらどうだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「深さA と 深さB かだぜ☆

深さA に達したら 次は深さB を目指し、

その間は 駒を取る手 を探す……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「静止探索というより、延長じゃない。

どんどん 葉 が広がるわよ。

葉まで読んだら、評価関数で ピタっと 探索を止めないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「何か 制限付きの 延長の方が楽そう……☆

作るのが☆」

KIFUWARABE_80x100x8_01_Futu

「反復深化で あとで読むのに、先先 読んで

無駄にならないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「タダ捨ての手を防ぐだけなら、

味方の利きが届いていないところに駒を打つな、

とかでもいいんだが☆」

 

 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(28) 静止探索を作ろうぜ☆?
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

コンピュータ将棋 アドベント・カレンダー☆

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こんばんわだぜ☆

家の前の公園に住んでいる 北白河ちゆり さんに

そっくりだから ちゆり と呼ばれている 北白河むすでょ だぜ☆

よろしく☆」

cpolze4ueaikfgf_%e5%85%ac%e5%9c%92

※公園

KIFUWARABE_80x100x8_01_Futu

「公園に住んでいるというと 家がない人のようだぜ☆

きふわらべ だぜ☆ よろしく☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「コンピューター将棋の アドベント・カレンダーって何やるの?」

201612020228

ADVENTAR 「コンピュータ将棋 Advent Calendar 2016」

http://www.adventar.org/calendars/1457

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「もう2年ぐらい デジゲー博に出るヒマもないほど

コンピュータ将棋ばっかり やってるわよね。

岡崎夢美よ。よろしく」

201612020232

デジゲー博 次は来年だぜ☆(^~^)

総合トップページ

201612020423b

OKAZAKI_Yumemi_80x80x8_01_Damaru

「デジゲー博 起ち上げの 第1回 から 全参加 してたのに……」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう、ファミ通でも 記事になっている でかいイベントだぜ☆」

 

同人・インディーゲームの期待・圧倒・驚きが勢揃い! “デジゲー博2016”リポート(1/3)

http://www.famitsu.com/news/201611/17120866.html

 

デジゲー博2016 アフターレポート

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ところで、最近は コンピューター囲碁電王戦 も

始まったようだな。 おじまよーじ って知ってるかだぜ☆?」

ccdevswumaagbuy

ccdfwgpusaagdme-%e3%82%b3%e3%83%94%e3%83%bc

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プラネット・ゼータ、動作が軽快で遊びやすいよな。

季節の変わり目に売ってるので、1000円札と 500円玉 握って

近くの本屋で 買ってこいだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「本屋で つでに シー・マガジン を買うのとかお勧めだぜ☆

ソートや 画像処理などの アルゴリズムが載っている☆」

 

C Magagine

http://www.sbcr.jp/topics/11895/

 

KIFUWARABE_80x100x8_01_Futu

「お父んは情弱だな☆

いまどき ネットで なんでもできるんだぜ☆」

RPGアツマール

http://game.nicovideo.jp/atsumaru/

 

 

KIFUWARABE_80x100x8_01_Futu

「お父んは本来、こっち側の住人だよな☆

ささ、コンピューター将棋から足を洗って RPGを作れだぜ☆」

C76夏コミ新作RPG 「はぢきせ!」 OP&告知ムービー

http://www.nicovideo.jp/watch/sm7823991 ※タイトルの電波ソングを聴ける


マジカルバケーションDSあるあるorねーよwithはぢきせでマジバケ1
http://www.nicovideo.jp/watch/nm11066318

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「タイトルは 電波ソングにして欲しいとかプッシュしたり、
RPGの主人公は コードギアスみたいな ルックスのいいキャラクターにしたいとか 趣味を丸出しにしたり、
要望に応えられた完成度は 100%☆
この キャラクター・エディット 画面とか お父んがスクリプトを組んで作った☆」

KIFUWARABE_80x100x8_01_Futu

「コードギアスを要望しながら タイトルに電波ソングを持ってくるのが すごいぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「今回のこのコンピューター将棋のブログ記事、

ゲーム内容とのシンクロ率100%☆ 電波ソング オー・サプレマシー

をBGMに掛けながら読むのが 義務な☆

“♪ あなたの くれた この装備が あれば~☆!” 」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「これ、コンピューター将棋の記事だったのね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なんかお父んな、世間の人とは ちょっと ずれているようで」

OKAZAKI_Yumemi_80x80x8_01_Damaru

時軸じじく が ずれてるわよね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「やりたいことがあるから やるだろ☆」

KIFUWARABE_80x100x8_01_Futu

「そんなこと できるやつが 存在しない☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「サークルに参加したり、メンバー集めてゲーム作ったり、

コミケで売ったり、 デジゲー博のスタッフしたり☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これなんて お父んが ゲーム のコンテストに応募した

ガチ作品だぜ☆ 優勝賞金は イッセンマン、を狙ったんだが……☆」

【ニコニコ動画】【時代に】C78夏コミ新作「Vs&Ves」告知ムービー【逆行】
http://www.nicovideo.jp/watch/sm10228857

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「似たようなことをしている人が 周りにいない……☆

で、集まるわけよな。

例えば 同じ種類の人って こんな感じだぜ☆」

【ニコニコ動画】【時代に】C78夏コミ新作「ザーグ伝説Z」告知ムービー【逆行】
http://www.nicovideo.jp/watch/sm10229677

KIFUWARABE_80x100x8_01_Futu

「秋葉原を 電気街と思っている人たちだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「秋葉原の電気街には 昔、 同人ゲームショップ の さんげっと

という専門店があってな☆

こういう あんまり見かけない人が作ったゲームや グッズが

置いていた☆」

cdwewauveaa6fr6

cdv8y82ukaao0ct

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「店内には チップチューンが流れ、外国人にもツイートされ

同人ゲームを アーケード筐体に入れて バーコードリーダーで選ぶと無料で遊べる(何かCDは1枚ぐらい買って帰れ) “うさアストロ” とか

50台以上のタブレットを並べた 店頭デモ とか やってた

面白いお店だったぜ☆」

ckldf9uuyaejnlu_%e7%84%a1%e6%96%99

cdrdij4vaaanzfi

ccn8k-8ueaaqusk_%e3%83%87%e3%83%a2%e6%a9%9f

demo8

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なお、ハゲ頭のヒゲ店長に 店内の巨大ディスプレイを路面に出して

ゲーム画面を秋葉原に流せ☆! とか プレッシャーかけたのは わたし だぜ☆wwwww

おそらく 誰も気づかないが 秒換算でも何万円、

トータルで 何百万円 の価値があることはやってたんじゃないか☆wwwwww

金持ちが この記事を読んでいたら、店内の同人ゲームを一通り遊んでいる 元・店長の KWSK をよろしくだぜ☆wwww 特技は 木材で什器をDIYな☆(^▽^)wwwwww

腸を壊しながら どこかでまた何かやってるだろ☆wwww」

ccti9anukaara86-1_%e5%a4%a7%e7%94%bb%e9%9d%a2

KIFUWARABE_80x100x8_01_Futu

「いろいろ やってるな……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「雨の日も 風の日も がんばったぜ☆」

cdbntu1uiaa-vx3_%e9%9b%a8%e3%81%ae%e6%97%a5%e3%82%82

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「購入を☆」

82%e6%9e%9a%e3%81%ae%e9%9f%b3%e6%a5%bdcd%e3%82%bd%e3%83%95%e3%83%88

1%ef%bc%91%ef%bc%90%ef%bc%90%e4%ba%ba%e4%b9%97%e3%81%a3%e3%81%a6%e3%82%82%e5%a4%a7%e4%b8%88%e5%a4%ab

kifuwarabe_80x100x8_07_uwaaaa

「なんだぜ これーーーっ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「店で物を買うのが 一番の支援になるんだぜ☆」

kifuwarabe_80x100x8_06_yodare

「次はいつ 遊びに行くんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「もう店が無い☆」

KIFUWARABE_80x100x8_01_Futu

「……………………☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「無くなったものを紹介されても、なんにもできないじゃないの!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「へぇ、こんな人 いるんだ、みたいな紹介だぜ☆

何にお金を使っているか、は

一番 的確な 自己紹介だと思っているぜ☆」

KIFUWARABE_80x100x8_01_Futu

「店がなくなったら お金が使えなくなるな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「まったくだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「なんで お父んは 同人ゲーム に そんなに お金を注ぎ込んでいるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「いや、べつに、ただ 生きているだけなんだが……☆」

KIFUWARABE_80x100x8_01_Futu

「ほっとくと また 同人ゲームを作ろうとするんだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう……☆

どちらかというと 遊ぶより 作るのが趣味なんで……☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「で、 なんで 同人ゲームに 戻ってこないの!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューター将棋のAI や、 機械学習は、

ゲームのキャラクターに 人間らしい反応が求められていく時代には

ヒツヨウとされるだろ☆

人工知能、AI は、習得しておきたいぜ☆

もう 『北のほこらに行け、炎の魔竜が棲んでいるそうじゃ』 とか

言ってくる爺さんもいなくなるぜ☆」

KIFUWARABE_80x100x8_01_Futu

「AI どころか、お父んは

『お箸は何本要りますか?』 『じゃあ 一膳で』

ぐらいしか 一日の間に 会話しないだろ☆

AI は お父んには不要だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「…………、あれっ、

AI って なんで要るんだろ……☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「簡単なことを するのが AI なんじゃないの。

顔を認識するとか、 声色から感情を察するとか、

人間に当たり前にできることが AI でしょ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう、将棋を指したりな。小学生でもできる☆」

kifuwarabe_80x100x8_04_tententen

「AI が無いと、コンピューターは 将棋を 指せないのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「たっくさん データを記憶できる メモリー とか、

何千万回の計算を 1秒の間にできる CPU とか、

そういうものが揃ってこないと、 “簡単” なことも できないんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「簡単なことをするために、でかい出費だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「しかも 利用者が欲しがっているのは AI そのものではなくて、

AI が裏にいるのかどうかも分からない サービスだからな☆

コンピューターは こんなことが 簡単にできました、

それを知っていることが 新たなサービスの発明に つながるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「 (その知識で……、家に金を入れてくれ……!) 」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューターが将棋を指せる、それはもう AI なんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「で、わたしは コンピューターに 簡単 なことをやらせたい☆

それが ゲームを面白くさせると思うんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ゲームを作るなら アクション・ゲームでも4か月、

RPGなら 1年半ほど 欲しい、

開発費は 家が買えるぐらいあると 色んなことができる……、

音楽を外注して、イラストレーターに金払って、印刷は安くして……

あっ、太陽誘電、CD製造するの止めてるぜ☆

スタッフは 4人~6人ぐらいの少人数がよくて 請求書は書こうぜ、

税務署は必ず目を光らせているから 経理の勉強しようぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「でも お金がないなら無いで

ゲームの下地部分だけ作って 知り合いに売り込むか☆

絵を差し替えたり 音楽を合わせたりする オーサリング が得意なやつもいるし、

プログラムは1行も書けないけど 調整を任せればゲームの深さをどんどん掘っていく レベル・デザイン が得意なやつもいる☆

キャラクターや シナリオも丸投げして、

お父んは、

1日中椅子に座って ぼけーっと天井でも眺めながら あの人はゲーム制作のどこに関わっているんですか、とか言われながら 書くと動く 何かを実現するコード を書いていたい、

とか話しかけようとすると 誰とも 話が通じないのな☆」

kifuwarabe_80x100x8_04_tententen

「誰とも 話が通じなくてもいいじゃないか☆

一人でやれば☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう……☆

ゲームは 2、3 日で作ってんでしょ、と思ってる人とか

金くれと言うと 返事がこなくなった人とは 話しにならない……」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「で、去年の電王トーナメントに ねこ将棋 さんが出ていたんだが、

スマホの 詰めパラ 作ってるのか、面白そうだな、

で、今年の6月には ねこ将棋 さんと組んで

スマホ・アプリを出したんだぜ☆」

201612020407

スマホ・アプリ 「きふわらべGO」

https://play.google.com/store/apps/details?id=com.kukilabo.kwb&hl=ja

kifuwarabe_80x100x8_04_tententen

「お父んは 行動が早すぎるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ガス代も払えないのに ゲームは作れるのよね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「お金が入ったら 払う☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そろそろ本題に入ろう☆

これを見てくれだぜ☆」

201611260340

KIFUWARABE_80x100x8_01_Futu

「何だぜ、これ☆? 安っぽい画面だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューター将棋に 美術 は要らないんで……☆

むしろ PC の CPU が 100% になって

キー入力した 漢字変換が 待ってくれ状態になったりするんで、

極力 PCに何も負荷かけてない ぐらいのものがいい☆」

kifuwarabe_80x100x8_09_umm

「むずかしい話しで テンションが下がってきたぜ……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「これは なんなの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつしょ……、 しょうぎ・さん・よん という

小さな盤と 動きの少ない駒 で遊ぶゲームだぜ☆

たなかてつろう という人が 完全解析 して

78手で 後手必勝といったことも知られている☆」

KIFUWARABE_80x100x8_01_Futu

「これと コンピュータ将棋アドベンターと

どういう関係があるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューター将棋の入門にはいいだろ☆ スタンドアローンの1人用ゲームとして開発中だぜ☆」

201611260402

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ちょっと待ってよ、

クリスマスまでの時間を楽しく過ごす ただのブログ記事で

何を始める気なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「えっ☆? 2017年5月の 第27回世界コンピュータ将棋選手権で ポナンザを倒そう、と夢見ている人たちが 読んでいるんじゃないのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「そんな 憧憬、即 行動 みたいなやつはいない」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「みんな もっと こう……、やんわりした話を書くのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「12月11日の 数学ヤクザも☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「やんわりよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「次の5月が過ぎると その次は 10月か11月☆

のんびり 待ってられないぜ☆

このブログを読んで すぐにでも開発しようぜ☆!

わたしなんか」

%e9%9b%bb%e7%8e%8b%e6%88%a6%e3%82%92%e8%a6%8b%e3%81%aa%e3%81%8c%e3%82%89

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「電王タッグマッチを見ている横で 開発していたからな☆

3か月後 電王トーナメント☆」

kifuwarabe_80x100x8_03_iyaiya

「作りかけの わたしが いるぜ☆」

20150905_cohezqnu8aabol__%e6%97%a9%e7%a8%b2%e7%94%b0%e5%85%a5%e5%8f%a3

20150905_coi6hy9ueaa90tt_%e5%a4%a7%e9%9a%88%e9%87%8d%e4%bf%a1

20150905_coi_priu8aafjzi_%e6%97%a9%e7%a8%b2%e7%94%b0csa

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「その次の年には コンピューター将棋協会の協会員になって

早稲田大学や 芝浦工業大学でやっている例会に参加、

フィッシャー・ルールの導入をプッシュしたぜ☆」

kifuwarabe_80x100x8_09_umm

「好きなように生きてるな……☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「きふわらべちゃん、角の頭を守ってくれないのよねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「どうぶつしょうぎ でも悩みは同じ☆

わたしの頭は 1手1手 読まなくても

駒を前に進めて 駒をガンガン取ってけば らいおん取れるだろ、というのが すぐ見えてしまう☆

コンピューターには そういう 勝ち方みたいなところが 分からないんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「なんで 分からないんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「椅子や 机と おんなじだぜ☆

本棚に向かって 将棋指そうぜ、と言ったって 指せないだろ☆

コンピューターも 下駄箱に毛が生えたようなものだぜ☆」

KIFUWARABE_80x100x8_02_Hidosu

「毛って何だぜ……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「将棋が勝てさえすれば 知能なんか 要らないのにね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なんか、千手観音が1劫年かけるレベルで遊ぶ 1兆本、

2兆本 という ものすごい数の釘を打ち付けた

パチンコがあって、その釘に 将棋とは何たるかを込めて角度を

付けて あとはその クソ・パチンコの結果と 将棋の結果が

たまたま合えば すごいパチンコと言えるよな☆」

kifuwarabe_80x100x8_04_tententen

「人はもっと “知的” にがんばっているのに……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューターが 下駄箱より すごいのは、

画面に文字を出してくれることだぜ☆

B2ひよこ☆!」

201612021104

kifuwarabe_80x100x8_03_iyaiya

「同ぞう☆!

文字なんか マンガでも テレビでも 出てくるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プログラムは、その文字を消して 書き直すことが

何回もできるんだぜ☆

これが案外 すごいことなんだぜ☆

B3ぞう☆ あいぞうかんむり だぜ☆」

201612021108

KIFUWARABE_80x100x8_01_Futu

「A2きりん☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「すいすい 指しているわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「…………☆ お父んの飯のタネだぜ☆

実のところ 第4回 電王トーナメントに出た きふわらべ より

機能が充実している☆」

kifuwarabe_80x100x8_03_iyaiya

「ぶっぬぐぐぐぐぐ☆!

早く指せだぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「できないのは 通信対局と マウス操作ぐらいのものだぜ☆

駒の位置をキーボード入力すれば 指せるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「C列4段にある ▲き を

C列3段に進めたければ、

do c4c3

と打ち込んで [Enter]キーだぜ☆ 簡単だろ☆」

201612021115

KIFUWARABE_80x100x8_01_Futu

「おら☆! A1ぞう だぜ☆! 穴ぞう☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ぞう なんか 穴に入れなくていいのに……☆

このように すぐに 打ち返してくるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「フリーで配布すんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「したら お父んが死んでしまう☆

さっきの話を聞いていたのかだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューターというのは、

考えるからすごいわけでは無いんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「人間が 指し手を打ち込み、

コンピューターが結果を画面に出す、

この2つができるから 人と仕事ができる、

というのが すごいんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「早よ 指せ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「C2きりん☆」

201612021130

KIFUWARABE_80x100x8_01_Futu

「C4ひよこ打☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「えっ、なんで そんなとこに打つの!?

タダじゃないの!?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「読み筋が出てるだろ☆

C4▽ひよこ打(H*C4)、 A3▲ひよこ打(H*A3)、 同▽きりん、

同▲らいおん(B4A3)、 A2▽ひよこ打(H*A2)、同▲ぞう(B3A2)☆

打った ひよこ は無視されて 左端で開戦して、

形勢判断は 515 のプラスと見ているようだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ぜんぜん プラスに見えないんだけど」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ふむ……、プログラムにバグがあるのかもしれないな☆

ひよこ を取ったら勝てるだろうけど、

きふわらべ の読み筋通りにさしてやるかだぜ☆

A3ひよこ打☆!」

201612021149

KIFUWARABE_80x100x8_01_Futu

「B2きりん だぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「読み筋通りなのに 手を変えたんだけど」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「さっきは 時間 1.001秒、深さ 6、枝 107731 だったんだが、

今度は 時間 1.001秒、深さ 7、枝 115703 になっているな☆

さっきと比べて 1つ深く 読んだみたいだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんで 同じ思考時間なのに 読める枝が 8千本近く 増えた上に 深く読めたの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コンピューターは、枝は すいすい 読めるんだぜ☆

言ってしまえば 枝なんてものは 仕事部屋に向かう途中の曲がり角の数を数えているようなものだぜ☆

途中で寄り道していれば すぐに増えてしまう☆

探索で時間がかかっているのは、葉っぱ での評価だからな☆

それに比べれば 枝を増やす なんて コンピューターにとっては レストランに寄ってコーヒーでも飲んで 休憩しているようなものだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「じゃあ 枝が少ないというのは 葉っぱを1枚でも多く 吟味しているからということなの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「わたしの 計測方法では 葉っぱも 枝 だからな☆

枝の数字だけからは 内訳は分からないが、

単純に 1つ深く読んだんで 枝も増えたんだろう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんで 1つ深く読めたの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「持ち駒の ひよこ を打ったから 指せる手が

少なくなったんじゃないか☆?

持ち駒1個持ってるだけで 6個所ぐらい 選択肢があるからな☆

枝分かれが減れば、深く読めるぜ☆」

KIFUWARABE_80x100x8_01_Futu

「お父ん、これからは 持ち駒は さっさと打てよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「C3らいおん☆」

201612021227

KIFUWARABE_80x100x8_01_Futu

「B3きりん だぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「きふわらべちゃんの 読み筋通り進むと、

きふわらべちゃん 負けちゃうじゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「すぐには負けないが、

探索部分は まだよくできてなくて おかしな動きは よく見る☆

ここで 王手がかかっているな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「状況を確認してみようぜ☆

ここで sasite seisei とコマンドを打ってみるぜ☆」

201612021238

201612021238b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こんな感じに この局面で指せる 指し手を カテゴリー別に分けるんだぜ☆

上から順に 優先的に探索されるぜ☆

これ、『指し手のオーダリング』 な☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「 余裕返討手 というところに C3B3、

逃げろ手 というところに C3B3、C3C4 があるわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「余裕返討手 というのは、

らいおん は逃げれるけど、王手かけてきたやつを取り返そう、という手だぜ☆

逃げろ手 というのは、これ以上 優先順位が下の手を考えている場合ではない、すぐ逃げろ、という手だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「1手1手で シビれるような わずかな読み違いで勝負が決まってしまうような手を 繊細に読むように 読む順番の優先順位付けを している☆

後ろの方は なんか もう読まなくていいや とか思って

バッサリ カットしたりする☆

逃げなきゃいけない局面で、他の手なんか考えてなくていいよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「つまり この局面で選べる手は

B3らいおん と、C4らいおん があるんだぜ☆

あー、バグだぜ☆ C3B3 が2つあるだろ☆

2回も同じ枝を探索することになってしまう、無駄だぜ☆」

KIFUWARABE_80x100x8_02_Hidosu

「バグがあっては 状況把握は 何にも正しくならないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ 指し掛け にするかだぜ☆

ky fen と コマンドを打ち込んでみるぜ☆」

201612021252

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「fen zr1/2K/HkR/2h z 1

という記号の並びが出てきただろ☆

これを覚えておくと あとで 局面を復元できるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「パスワードみたいな文字ね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ 復元するぜ☆

ky fen zr1/2K/HkR/2h z 1

と打ち込んで [Enter] キーだぜ☆」

201612021309

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これで 続きからできるぜ☆」

201612021311

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「逃げろ手 の C3B3 は いなくなったろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「さくっと 直せたのね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「バグ取りで 一番時間がかかるのは 問題個所の特定だからな☆

問題個所を知ってれば 直すだけだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「続きを指そうぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「B3らいおん☆!」

201612021319

KIFUWARABE_80x100x8_01_Futu

「B4ぞう打☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「タダ捨てなんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ set P2Com false コマンドでコンピューターを止めて

undo Z*B4 コマンドで局面を戻してみるぜ☆」

201612021323

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そして sasite seisei コマンド☆」

201612021326

201612021326b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「きふわらべも B4ぞう打 は、タダ捨て だと思ってるみたいだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「じゃあ タダ捨て打 を止めさせなさいよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「タダ捨て してる方がマシ、みたいな 場面もあるんだぜ☆

タダ捨て が 悪手とは 言えないんだぜ☆

将棋にも 送りの銀 とか、タダ捨て を使った 絶品の詰め技があるだろ☆

だから タダ捨て をさせない、というような 決め打ったプログラムは書けないぜ☆ 優先順位を下げるだけ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「タダ捨てを止めさせることは できるんだが、

他にも何か不具合があって、タダ捨て をしているのかもしれない☆

どこかが悪いときは、問題を起こしてくれるのは 大事なんだぜ☆

問題を隠してしまっては、悪いところを解決することができないんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「じゃあ 早く直してくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「悪いところがどこかを見つけるのがタイヘンなのな☆

平気な顔をしてないで、どんどん症状を起こしてくれだぜ☆(^▽^)」

201612022328

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ ここで、 B2きりん打 と勝負手を放ってみようぜ☆

この手は 損か 得か☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「A1の▽ぞう で B2の▲きりん を取るでしょ、

C2の▲きりん で、B2の▽ぞう を取り返すでしょ、

きりん と ぞう の交換よね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ひよこ は 100点、

きりん と ぞう は 同じ 200点、

らいおん は 2900点、 にわとり は 300点、

と お父んが勝手に点数を決めておいたので、

きりん と ぞう の交換は さしひき 0点だな☆

この交換は 悪くなさそうだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「という計算も コンピューターはやっている☆

計算は コンピューターの中の心臓ともいえる中心部、

CPU というところが得意なんだぜ☆

やってみよう☆

see K*b2

とコマンドを打つんだぜ☆」

201612022328

KIFUWARABE_80x100x8_01_Futu

「よし、じゃあ計算するぜ☆」

201612022336b

kitashirakawa_chiyuri_80x100x8_05_hehe

「ここで コンピューターを理解する コツ なんだが、

ビデオを逆再生したり、小説のページを後ろから読むみたいに、

詰むか 詰まないかも 逆から読むんだぜ☆

これ、 『再帰関数さいきかんすう』 の特徴の1つな☆」

KIFUWARABE_80x100x8_01_Futu

「お父ん、  ~  の数字をペイントしたな☆

何だぜ、これ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「一番の未来が⑤だぜ☆ 先頭に来ている☆

未来から現在に遡って読むのは 人間には読みづらいから 下から上に 出力結果を読もうぜ☆

①が B2 に きりん を打った局面だぜ☆」

201612022336b_1

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「SEE評価値は 相手番がどう思ってるかの評価値だから、

makeru 3、 と出ているが これは表示が間違っていて

katu 3、 3手で手番の勝ちなんだぜ、と答えを出しているな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「1手で きりんを打ち込む、

2手で ぞうがきりんを取る、

3手で きりんがぞうを取り返す、

で終わりでしょ?

王手にはなるけど、まだ勝ちじゃないんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「調べてみるかだぜ……☆

計算結果を ②~⑤ に 残しておいてくれているので、

助かるぜ☆」


2016-12-02 23:50

kifuwarabe_80x100x8_06_yodare

「ぴん ぽん ぱん ぽん☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

何!?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「おっと、アラームかだぜ☆

コンピューター将棋 アドベントカレンダー の締め切り10分前に

なったようだぜ☆

ここで投稿するか……☆(^~^)」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「でも、記事は もうちょっと 続くんじゃよ」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「まだ書くの?」

kitashirakawa_chiyuri_80x100x8_05_hehe

「12月3日は、まだあと24時間残っているぜ☆!」

kifuwarabe_80x100x8_05_nohoho

「12月2日の23時59分までが締め切りなのに……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「次の手は ②☆」

201612022336b_2

KIFUWARABE_80x100x8_01_Futu

「2手目、B2ぞう☆!」

201612022336b_3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「3手目、B2きりん☆!」

201612022336b_4

KIFUWARABE_80x100x8_01_Futu

「4手目、B2らいおん☆!」

201612022336b_5

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「5手目、同らいおん☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

ええーっ!

kifuwarabe_80x100x8_03_iyaiya

「らいおん を取られてしまったぜ☆

B2 に きりん を打たれてはダメか☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「いやいや、きふわらべちゃん!

らいおん で きりん を取らずに、らいおんを横に逃がせばいいのよ?」

KIFUWARABE_80x100x8_01_Futu

「目の前に きりん がいるのに、何で取らないんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「その後ろに らいおん がいて、取り返されちゃうからよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

(そうか……( ^ω^)

らいおん で取りに行くときは、 もう相手の利きがないことを確認しないと行けないのかだぜ☆)

 

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「らいおん のときだけじゃないわよ。

ぞう だって、きりん だって、 ここで取るのを止めておけば

損しなかった、というときだってあるのよ?

例えば

▲ぞう損、▽ひよこ損、▲ひよこ損……、と ▽2プレイヤーが

ぞう得 なら、もう △きりん を突っ込ませなくても もう十分よ」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「▲ぞう損、▽ひよこ損、▲ひよこ損、△きりん損 となってしまっては

ぞう得 だったのが さしひき 0 に なっちゃいますからね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

(なるほど……( ^ω^)

そんなことが あるのかだぜ☆)

KIFUWARABE_80x100x8_01_Futu

「もっと突っ込んだら 得することは無いのかだぜ☆?

▲ぞう損、▽ひよこ損、▲ひよこ損、△きりん損、▲にわとり損 ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

(ほう……( ^ω^)

いろんなケースを考えているぜ☆ これがプログラムかだぜ☆)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「将棋で例えると、こういう場面かだぜ☆?」

201612030331_1

 

201612030331_2

 

201612030331_3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ここで止めておきたい☆

竜なんかで 取り返したら、 えらい目に遭うんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「でも お父んは 取るんだろ☆?」

201612030331_4

 

201612030331_5

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ふっwwwwwwwwwwwwww」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ 計算してみようぜ☆

最後に残った 銀☆」

201612030331_6

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ひとまず 0点 としておこう☆

次、銀に取られた 竜☆」

201612030331_7

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「自分の価値は 相手に渡るんだぜ☆

確かに、 こいつが、竜を取った竜 なんだったら

清算したんだな、と 話は分かるが……☆」

201612030331_8

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「仮に 銀を 600点 としておこう☆

竜、-400点 の仕事しかしてないぜ☆」

KIFUWARABE_80x100x8_01_Futu

「手番(▽)から見れば、銀と竜の交換なら +400点だな☆」

201612030331_9

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「逆回しで作っているこの図は 確定の未来を示しているので、

現局面の手番(▽)から見れば 竜さん+400点 どうぞ ウェルカム☆ だし、

現局面の相手番(▲)から見れば 400点損する未来しか見えないぜ☆」

KIFUWARABE_80x100x8_01_Futu

「けっこうな判断だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ ここで、竜は飛び込まなかった、という未来にしてみようぜ☆

竜は取られる心配もないし、ここで 取った、取られた の切れ目としておこう☆

なんか 争いに巻き込まれなかった 銀は とりあえず 0点 で☆」

201612030331_10b

 

201612030331_11

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「 “と” なんか取っても持ち駒になると 歩 だし、気分は 100点 なんだが……☆」

201612030331_12

KIFUWARABE_80x100x8_01_Futu

「 “と” は 銀 を取っていたようだな☆

どちらも 600点とすると、 さしひきは 0 だぜ☆

0以上なら 取り合いは やっても損は無いんじゃないかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「歩 と 銀 の交換なのよ?

駒割りは 計算し直さないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「取った駒を使えない チェス から来た考え方なので……☆」

201612030331_13

KIFUWARABE_80x100x8_01_Futu

「 “と” の価値を 100点としよう☆

手番(▽)から見ると、銀は ここに置いてるだけで -500点 だな☆

相手番(▲)から見れば 仕掛けは +500点、

やるだけ 500点 のお得だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「人間なら いつでも取れる500点なら 後で取ってもいいだろう、

と考えて 他の所に手を付けたりするんだが、

コンピューターは 視界に入った一番いい選択肢は 取りに行くぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「竜の何が悪かったのかしら?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「取ると 400点損をすることが確定している 銀 を取ったからだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「歩は 何が良かったのかしら?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「取ると 500点得をすることが確定している 銀 を取ったからだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「何で 確定しているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「未来から 現在に戻ってきながら 計算しているからな☆

これが 『再帰関数さいきかんすう』 のパワー☆

小説を後ろのページから読むようなものだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「なんで 再帰関数 は未来を知っているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「まず 未来に向かって 適当に走っている☆

わたしみたいだな……☆

そして マラソンの往復だぜ☆ 一番奥の中継ポイントを回って

帰ってくる途中に計算するんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「どこが 一番奥なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「最初に深さを決めて 一気に奥まで行くタイプと、

駒の取り合いみたいな、取り合いが起こる駒が無くなったら終わり、といった条件を付けたタイプもあるぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「じゃあ さっさと らいおんを取り合うバグ を取り除きなさいよ」

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame

「ブログを書くのか、バグを取るのか どっちかにして欲しいぜ……☆ ぐはー☆」


08:22

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「よし、直したぜ☆」

201612030821

KIFUWARABE_80x100x8_01_Futu

「らいおん で突っ込む直前で ぴたっと止まったぜ☆

なぜだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「(1) 駒を取り合うときの 最後の手を SEE=0 と仮定して、

(2) この駒を取ったら損するぞ、という手を SEE<0 と仮定して、

(3) 計算中はずっと 0 <= 手番から見たSEE にしておいて、

(4) どこかで 手番から見たSEE < 0 が現れたら

SEE を 0 にリセットする、

という 至極 シンプルな 4つのルール で うまいこと行くんだな、これが☆」

KIFUWARABE_80x100x8_01_Futu

「なぜだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「 SEE を、 おいしさ という単語に置き換えろだぜ☆

(1) 最後に駒を取ったやつは、誰も食べれないから おいしさ 0 ☆

(2) 食らうと死ぬ毒は おいしさ<0 ☆

(3) 計算中はずっと 0<=おいしさ ☆

(4) どこかで おいしさ<0 があらわれたら、毒食って死んだんだぜ☆ そこより1つ手前のやつが 誰にも食べられない最後のやつ、ということにして(1)に戻るんだぜ☆」

kifuwarabe_80x100x8_09_umm

「ふむ……☆ 駒1個ずつの点数で考えるのではなく、

将来の指し手の 利益 を おいしさ と表現し、

おいしい状態で 駒の取り合いの升に飛び込むのは

おいしさ を丸ごと相手に渡してしまうようなものだから、

そんな手は指さず、

将来の指し手が 損 しかないときは 毒 と表現し、

毒 の状態で 駒の取り合いの升に飛び込むのは

損しない、ということかだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ちょっとお! きふわらべちゃんの方が あんたより賢いわよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「いや、教えている わたしが 賢いんで……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「やっと指せるぜ☆

B2きりん打☆」

201612030851

KIFUWARABE_80x100x8_01_Futu

「同ぞう だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「同きりん☆」

201612030853

KIFUWARABE_80x100x8_01_Futu

「C1らいおん☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「うまいわよ、きふわらべちゃん」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なんか、4段目に転がってる ▽ぞう、▽ひよこ が スーパーの陳列棚 になってるよな☆

カレーに入れて食べるかだぜ☆?

あと 読み筋の中で わたしが タダ捨て するのを読んでるだろ☆

そんなの無いからな、

C2きりん☆」

201612030858

KIFUWARABE_80x100x8_01_Futu

「B1らいおん☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「AI が作れれば、友達なんかいなくたって ゲームで遊べるわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「聴こえているぜ ご主人さま☆

A2ぞう☆」

201612030902

KIFUWARABE_80x100x8_01_Futu

「A1らいおん☆

お父ん、歯を磨けよ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「深夜3時に磨いた☆

B4らいおん☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「あんたは どんなAIを 積んで らいおんを 動かしているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「この頭は 自前なんで……☆」

201612030906

kifuwarabe_80x100x8_07_uwaaaa

「C3きりん☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ちょっと、これって あれじゃないの、あれ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あれじゃ分からない……☆

きふわらべは ぞう を C1 に打ってくることを期待しているようだな☆

確かにそんな手を指したら この局面からでも お父んは一気に負けてしまいかねない……☆

C3らいおん☆」

201612030911

KIFUWARABE_80x100x8_02_Hidosu

「まいったぜ☆(>_<)」

kitashirakawa_chiyuri_80x100x8_05_hehe

「よし、勝ったぜ☆ なかなか面白かっただろ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「あれよ、あれ!

コンピューターは 負けが見えると 王手を水平線の向こうに追いやって、

詰みを先延ばしにするのよね! 電王戦でやってたやつ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「何だぜ、それ☆?」

kitashirakawa_chiyuri_80x100x8_05_hehe

「電王戦と言えば、毎回 楽しみにしているものがあるんだぜ☆」

 

第4回電王トーナメント参加者つぶやきまとめ(その1)前日事前準備編

http://togetter.com/li/1033959

 

KIFUWARABE_80x100x8_01_Futu

「何だぜ、これ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「電王トーナメントの つぶやき まとめ だぜ☆

前日、大会中の ツイート を まとめたものだぜ☆

コンピューター将棋選手権版と、 電王トーナメント版 があるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「30数チームの中で 頂点の 1チームだけが 電王戦に出られるのね」

kitashirakawa_chiyuri_80x100x8_05_hehe

「きふわらべも 頂点へ持っていこうぜ☆」

KIFUWARABE_80x100x8_01_Futu

Ponanzaポナンザ、浮かむ瀬(Aperyエイプリー)、やねうら王、読み太、大将軍たいしょうぐん

全員 倒していくんだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

Seleneセレネ、たこっと、Qhapaqカパックnozomiノゾミ、うさぴょん2´ダッシュ、†白美神†、習甦しゅうそ

上には いっぱいいるぜ、やったな☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「きふわらべ ちゃんは 今 どのぐらいに いるの?」

KIFUWARABE_80x100x8_01_Futu

「33位だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

NineDayFeverナインデイフィーバー や YSSワイエスエス、 Bonanzaボナンザ といった強豪ソフトも

今回の電王トーナメントでは 出てこなかったし、

コンピューター将棋ソフト全体の中での 順位はもう少し下がるぜ、

やったな☆!」

kifuwarabe_80x100x8_04_tententen

「……………………☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんか もっと きふわらべちゃんは すごい コンピューター将棋ソフトなんじゃないの?

ブログ記事も すんごく長いし、もう大会にも 5度は出場している常連なんでしょ?」

kifuwarabe_80x100x8_09_umm

「…………………………………………☆」

kitashirakawa_chiyuri_80x100x8_05_hehe

「飛車が2マス以上 進めるよな☆」

kifuwarabe_80x100x8_05_nohoho

「まだ 自力で 勝ったことがないんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「えーっ!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「プログラム歴は?」

kitashirakawa_chiyuri_80x100x8_05_hehe

「25年☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「コンピューター囲碁いご歴は?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「半年ぐらい……☆(^~^)」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「倒した将棋しょうぎソフトの数は?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

攻茶花電こうちゃかでん、 Labyrinthus+ラビリントス・プラス の2つだぜ☆

十六式・いろは と、 にこあ将棋 とは引き分け☆

大樹たいじゅの枝ライブラリーを使った きふわらべ も入れると、

shogi686、 なり金将棋、 Claireクレア、 白砂はくさ将棋 に勝ったこともあるぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「その、ライブラリー というのを使いましょうよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう……、みんな ライブラリ を使うといいぜ、

いきなり 去年の3位 とか、そんな強さの コンピューター将棋ソフトから始められるんで☆」

KIFUWARABE_80x100x8_01_Futu

「でも お父んは 使わないんだろ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「1度は 使ってみたんだぜ☆

大樹の枝ライブラリーからは、

アンローラー、テンプレート、リンクリストのような関数呼び出し、評価関数の構造、

ムーブピッカー、ベンチマーク、 吸収できるものは いっぱいある☆

その知識は さらに

最強のフリーのコンピューター・チェス・ソフト ストックフィッシュ7

を読むのに助けになる☆

どうぶつしょ……、しょうぎ・さん・よん にも生かされているぜ☆

直接 役立っているわけではないが、枠組みのようなものが頭の中にできる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「でも ライブラリー 使わないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「オリジナルの きふわらべ が、コンピューター将棋界を揺るがすんだぜ☆」

kifuwarabe_80x100x8_06_yodare

「ゴゴゴゴゴゴ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「例えば この局面☆」

201612031236b

KIFUWARABE_80x100x8_01_Futu

「C4ひよこ☆!」

201612031236

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ひゃー!

なんで そんなとこ 打っちゃうの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「わたしは 犬とは しゃべれないが、

コンピューターとは 対話できる☆

コンピューターに直接 聞いてみればいいんだぜ、 なんで そんな手を打ったのか☆

人間に通じる言葉ではなく、

わたしと コンピューターとの間でだけ通じる秘密のメッセージで☆」

 

ky fen k1r/1z1/1ZK/1R1 Hh 2

set JohoJikan 0

set SaidaiFukasa 2

set SikoJikan 10000

go

 

201612031256

201612031256b

KIFUWARABE_80x100x8_01_Futu

「深さ2 での全ての読み筋は こうだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「これは きふわらべちゃんの 思考過程が 全部載っているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「そうそう……☆

量が多くなりすぎるんで、 深さ2 ぐらいが ちょうどいいぐらいだぜ☆

これを読んで、 どこで C4ひよこ打☆ なんか一番いいと思ったのか

調べるんだぜ☆

これを 『ログを読む』 とも言う……☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ログを読んでると コンピューター将棋ソフト界を 震撼させることができるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「きふわらべ の存在そのものが 脅威だぜ☆

きふわらべ なんかに負けたら 自信が ぐらーっ と揺らぐぜ☆

プログラムのコメントに 顔文字が書いてあるコードが

33位から 頂点を狙っているんだぜ☆」

kifuwarabe_80x100x8_08_gentleman

「すくすく育つぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「で、ログには何て書いてあるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「まず、eda を見てくれだぜ☆」

201612031328b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「当然 1 ずつ増えていくんだぜ☆

UpAlpha とか、BetaCut とか書いてあるところは数字は増えない☆

そして 葉っぱ でも何でもない 本当のただの枝は

通過するだけなんで、

情報が表示されてないだけで 枝は 飛び番で 増えているぜ☆

読み筋の手が 根本から変わったときなんかは 飛び番 するな☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「見方が分かると 読めるものねぇ」

201612031328c

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「 jikanじかん は 1000分の1秒 で表示されているぜ☆

情報を出すのが時間かかるんで、

情報を出さなければ もっと速い☆

普段は 3秒に1回ぐらいの間隔で 出すようにしているぜ☆」

201612031328

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「 そして fukasaふかさ は まず、深さ1 を横にずばっと読み、

深さ1の読みが終わったら

次は 深さ2 の読みが ずらーっと続くぜ☆」

201612031357b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「深さ2 の方は、 2/2 というやつと、 1/2 というやつの

2つがあるぜ☆

深さ2 を読むときは、 深さ1 は全部 通り抜け通路みたいなもんで通り過ぎるだけなんで 情報は出していないぜ☆

で、これはいい葉っぱだったぜ、というのを見かけたら

深さからの帰り道で ベストを更新するので、

1/2 の深さには UpAlpha と書いていたりするぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「だんだん 読めてくるわね」

201612031424

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「気になるのは hyokatiひょうかち だぜ☆

きふわらべ は 2プレイヤーで、評価値のプラス・マイナスは

全部 2プレイヤー視点に “置き換え” て書いているぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プログラム中では 手番から見た評価値なので、

深さが 1、3、5…… のときと、 2、4、6…… では

プラス・マイナスがひっくり返っているんだが、見づらいだろ☆」

kifuwarabe_80x100x8_03_iyaiya

「初期局面から2手目、わたしの1手目から 二駒関係で -870点が付いているぜ☆ こんな手 指せないぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「なんか、評価値が変わってないのに UpAlpha になってるところがない?」

201612031440

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「それ、ランダム を入れてあるぜ☆

同じ評価値なら きまぐれ で 指し手を選ぶようにしてある☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「なんで そんなこと するの!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「毎回 同じ指し手を 指してきたら、

ゲームを楽しめないじゃないか☆」


23:02

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame

「寝ていたら 23時になっていた……☆

続きだぜ☆」

201612032301

201612032301b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ランダム性を停止させてみても、

ひよこを 打つのは変わらないな☆」

KIFUWARABE_80x100x8_01_Futu

「ログをよく 見てみようぜ☆」

201612032339

201612032339b

KIFUWARABE_80x100x8_01_Futu

「B1きりん☆」

KITASHIRAKAWA_Chiyuri_80x100x8_02_Hidosu

「お父ん、random のつづりを間違えて randam にしていたぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「random 性を消すと 一見 まともそうな 指し筋 だぜ☆

なるほど……、

最善手だけを指すコンピューターに ランダム性なんか入れたら

1つ ランダムが働くたびに 必ず悪い方を選ぶわけかだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ひどい話しね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「でも ひよこのただ捨て の方がマシだったんだぜ☆

きりんが らいおんの逃げ道を塞ぐ壁になってしまって、

C2きりん☆ の 一手詰めだぜ☆」

KIFUWARABE_80x100x8_02_Hidosu

「まいったぜ☆(>_<)」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「2手の深さを読ませているのに、1手詰め が見えないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「調べてみるかだぜ……☆」

kifuwarabe_80x100x8_06_yodare

「ぴん ぽん ぱん ぽん ☆!」

OKAZAKI_Yumemi_80x80x8_01_Damaru

何!?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「おっと、23時47分、もうそろそろ 12月3日 も終わりだぜ☆

じゃあ ここらへんで 楽しいブログも 終わるかだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「残念だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「コンピューター将棋の説明というか、

コンピューターの5大装置の説明で終わった感があるわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これ、クリエイターに直接お金を支援できる Enty.jp な☆

もっと お父んに ひと月10万円ぐらい 金を入れてくれたら テクニカル・ライティング ばっかり 書き続けるんだが……( ^ω^)」

KIFUWARABE_80x100x8_01_Futu

「一手詰めルーチンも ログ出して 調べようぜ☆?」

kitashirakawa_chiyuri_80x100x8_05_hehe

「よしよし☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「明日は チダショーの ポナンザみたいな指し手を楽しむかだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「おっしま~い!

解散よ、解散!」

はてなブックマーク - コンピュータ将棋 アドベント・カレンダー☆
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(27) 指し手生成のオーダリングをテストしようぜ☆

2016-11-26 00:19

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あれ☆?…………日付が変わっている…………☆」

201611260017

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「指し手を、調べたい順に 並べ替えるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「王手放置するみたいだけど」

KIFUWARABE_80x100x8_01_Futu

「きりん なんて、怖くないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒配置をシャッフルして、いろんな局面で 指し手生成を

テストしてみるぜ☆

目視確認で☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「そこを自動化できないの?」

201611260025

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これなんて、バグなんだぜ☆

2P の らいおん は トライしてるだろ☆

じゃあ 1P の らいおん は、指し手があってはいけないんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「指し手がなければ 投了☆

この局面では 投了 するようにしておかないと、

探索プログラムは この続きの手も探し続けて、

メートなんか 無かったことになってしまうぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「もう決着してるのに……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「決着してるときは 指し手 を作らないようにする必要があるぜ☆」


00:52

201611260052

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これなんて、王手放置が起こっているケースだぜ☆

らいおん で、 らいおん を取って、きりん に取り返されたら

どうなるんだろうな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「こんな状況でも、トライできるときは トライだけを狙うのね」


01:05

201611260104

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これも 面白い例だぜ☆

プレイヤー1 は、自分の らいおん がいなくなっているから、

指しては いけないんだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「指すと どうなるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレイヤー1 は、相手にトライさえ されなければ、

無敵になっているな☆

探索ツリーが どんどん伸びていくぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「本来、こうなる前に ツリーは 伸びるのを止めてなきゃ

いけないぜ☆」


01:12

201611260111

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これも 面白いぜ☆

プレイヤー2 は すぐトライできるんだが、

プレイヤー1の らいおん が プレイヤー2の らいおん を

王手しているので、

王手を仕掛けている駒を除去する手を 優先的に考えているんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「フルボッコな配置だぜ☆」


01:29

201611260129

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これもバグだぜ☆

ネセサリー・キャプチャーと、らいおんを取る手で

C2C3 を2回検出しているぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「プレイヤー1の らいおん は、

プレイヤー2の らいおん を取る手以外もあるから、

ネセサリー・キャプチャーじゃ 無いんだぜ☆」

KIFUWARABE_80x100x8_02_Hidosu

「ストレートのバグじゃないか☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「直しましょう!」


02:45

201611260244

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これなんかも 良い例だぜ☆

人間なら 必ず打たなければならない手 が1つあるんだが、

きふわらべ には まだ、1手詰められ が見えていないようだな☆」

kifuwarabe_80x100x8_08_gentleman

「フフン☆

まだまだ 先は長いぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「トライが目の前よね。

B3 に ぞう を打って、トライを防ぎましょう!」

kifuwarabe_80x100x8_07_uwaaaa

「えーっ☆!」


2016-11-26

201611261620

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あれ、これは おかしいぜ☆

ここは プレイヤー2は、プレイヤー1 の らいおん を

取る一択だぜ☆

逃げようとするのは おかしいぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「らいおん が隣同士の 王手回避漏れ局面ね。

返り討ち手 の中に らいおん を取り上げる手が含まれる場合は、

逃げろ手 を指さないようにしましょう」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「よし☆」


17:19

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これも面白いバグだぜ☆」

201611261718

OKAZAKI_Yumemi_80x80x8_01_Damaru

「詰んでもいないのに、なんで 指し手 がないの?」

kifuwarabe_80x100x8_07_uwaaaa

「両王手だぜ、まいったぜ~☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「両王手をされたら 負け、と 教えていたんだが、

もう少し 考えれば

逃げれるんだったら 負けじゃないよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「予断よね。

直しなさい」


19:58

201611261958

kifuwarabe_80x100x8_07_uwaaaa

「まいったぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「早いぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「読み筋を 出すようにはできないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「量が多すぎるぜ☆」


20:23

2プレイヤー(TansakuNomi)の思考中(^~^)
info jikan 39 fukasa 1/1 eda 0 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)A1B1
info jikan 57 fukasa 1/1 eda 0 hyokati mate 0(20000)(0 -24 Leaf) yomisuji (1)A1B1 
info jikan 75 fukasa 1/1 eda 0 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)A1A2
info jikan 88 fukasa 1/1 eda 0 hyokati mate 0(20000)(0 -22 Leaf) yomisuji (1)A1A2 
info jikan 103 fukasa 1/1 eda 0 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)B2B1
info jikan 113 fukasa 1/1 eda 0 hyokati mate 0(20000)(0 -26 Leaf) yomisuji (1)B2B1 
info jikan 123 fukasa 1/1 eda 0 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)H*A4
info jikan 131 fukasa 1/1 eda 0 hyokati mate 0(20000)(0 -51 Leaf) yomisuji (1)H*A4 
info jikan 140 fukasa 1/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)A1B1
info jikan 148 fukasa 2/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B3A2
info jikan 161 fukasa 2/2 eda 1 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)B3A2 
info jikan 174 fukasa 2/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B3C2
info jikan 184 fukasa 2/2 eda 1 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)B3C2 
info jikan 197 fukasa 2/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B3A4
info jikan 213 fukasa 2/2 eda 1 hyokati mate 0(20000)(0 3 Leaf) yomisuji (1)A1B1 (2)B3A4 
info jikan 228 fukasa 2/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B4A4
info jikan 238 fukasa 2/2 eda 1 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)B4A4 
info jikan 254 fukasa 2/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)C4C3
info jikan 264 fukasa 2/2 eda 1 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)C4C3 
info jikan 273 fukasa 2/2 eda 1 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)H*A1
info jikan 287 fukasa 2/2 eda 1 hyokati mate 0(20000)(0 4 Leaf) yomisuji (1)A1B1 (2)H*A1 
info jikan 305 fukasa 1/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)A1A2
info jikan 314 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)B3A2
info jikan 334 fukasa 2/2 eda 2 hyokati mate 0(20000)(400 1 Leaf) yomisuji (1)A1A2 (2)B3A2 
info jikan 345 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)B3C2
info jikan 355 fukasa 2/2 eda 2 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1A2 (2)B3C2 
info jikan 368 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)B3A4
info jikan 377 fukasa 2/2 eda 2 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1A2 (2)B3A4 
info jikan 387 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)B4A4
info jikan 397 fukasa 2/2 eda 2 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1A2 (2)B4A4 
info jikan 410 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)C4C3
info jikan 425 fukasa 2/2 eda 2 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1A2 (2)C4C3 
info jikan 438 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)H*A1
info jikan 448 fukasa 2/2 eda 2 hyokati mate 0(20000)(0 3 Leaf) yomisuji (1)A1A2 (2)H*A1 
info jikan 457 fukasa 2/2 eda 2 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1A2 (+)H*B1
info jikan 465 fukasa 2/2 eda 2 hyokati mate 0(20000)(0 3 Leaf) yomisuji (1)A1A2 (2)H*B1 
info jikan 477 fukasa 1/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)B2B1
info jikan 499 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)B3A2
info jikan 507 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)B2B1 (2)B3A2 
info jikan 528 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)B3C2
info jikan 556 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)B2B1 (2)B3C2 
info jikan 567 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)H*B2
info jikan 576 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 4 Leaf) yomisuji (1)B2B1 (2)H*B2 
info jikan 587 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)B3A4
info jikan 600 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 3 Leaf) yomisuji (1)B2B1 (2)B3A4 
info jikan 611 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)B4A3
info jikan 622 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 1 Leaf) yomisuji (1)B2B1 (2)B4A3 
info jikan 636 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)B4C3
info jikan 645 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)B2B1 (2)B4C3 
info jikan 655 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)B4A4
info jikan 663 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)B2B1 (2)B4A4 
info jikan 672 fukasa 2/2 eda 3 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)B2B1 (+)C4C3
info jikan 680 fukasa 2/2 eda 3 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)B2B1 (2)C4C3 
info jikan 688 fukasa 1/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)H*A4
info jikan 702 fukasa 2/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)H*A4 (+)B3A4
info jikan 710 fukasa 2/2 eda 4 hyokati mate 0(20000)(200 3 Leaf) yomisuji (1)H*A4 (2)B3A4 
info jikan 719 fukasa 2/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)H*A4 (+)B4A4
info jikan 731 fukasa 2/2 eda 4 hyokati mate 0(20000)(200 2 Leaf) yomisuji (1)H*A4 (2)B4A4 
info jikan 739 fukasa 2/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)H*A4 (+)B3A2
info jikan 748 fukasa 2/2 eda 4 hyokati mate 0(20000)(0 5 Leaf) yomisuji (1)H*A4 (2)B3A2 
info jikan 756 fukasa 2/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)H*A4 (+)B3C2
info jikan 769 fukasa 2/2 eda 4 hyokati mate 0(20000)(0 4 Leaf) yomisuji (1)H*A4 (2)B3C2 
info jikan 777 fukasa 2/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)H*A4 (+)C4C3
info jikan 785 fukasa 2/2 eda 4 hyokati mate 0(20000)(0 4 Leaf) yomisuji (1)H*A4 (2)C4C3 
info jikan 792 fukasa 2/2 eda 4 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)H*A4 (+)H*B1
info jikan 802 fukasa 2/2 eda 4 hyokati mate 0(20000)(0 7 Leaf) yomisuji (1)H*A4 (2)H*B1 
info jikan 810 fukasa 1/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)A1B1
info jikan 820 fukasa 2/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B3A2
info jikan 835 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)H*B3
info jikan 845 fukasa 3/3 eda 6 hyokati mate 0(20000)(0 -43 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)H*B3 
info jikan 854 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)B2A2
info jikan 861 fukasa 3/3 eda 6 hyokati mate 0(20000)(400 -9 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)B2A2 
info jikan 870 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)H*B3
info jikan 879 fukasa 3/3 eda 6 hyokati mate 0(20000)(0 -43 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)H*B3 
info jikan 889 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)B1A1
info jikan 902 fukasa 3/3 eda 6 hyokati mate 0(20000)(0 -24 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)B1A1 
info jikan 915 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)B2A1
info jikan 928 fukasa 3/3 eda 6 hyokati mate 0(20000)(0 -23 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)B2A1 
info jikan 940 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)B2C2
info jikan 948 fukasa 3/3 eda 6 hyokati mate 0(20000)(0 -21 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)B2C2 
info jikan 958 fukasa 3/3 eda 6 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (2)B3A2 (+)H*A4
info jikan 973 fukasa 3/3 eda 6 hyokati mate 0(20000)(0 -47 Leaf) yomisuji (1)A1B1 (2)B3A2 (3)H*A4 
info jikan 983 fukasa 2/3 eda 7 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B3C2
info jikan 990 fukasa 2/3 eda 7 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)B3C2 
info jikan 999 fukasa 2/3 eda 7 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B3A4
info jikan 1007 fukasa 2/3 eda 7 hyokati mate 0(20000)(0 3 Leaf) yomisuji (1)A1B1 (2)B3A4 
info jikan 1015 fukasa 2/3 eda 7 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)B4A4
info jikan 1023 fukasa 2/3 eda 7 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)B4A4 
info jikan 1036 fukasa 2/3 eda 7 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)C4C3
info jikan 1045 fukasa 2/3 eda 7 hyokati mate 0(20000)(0 2 Leaf) yomisuji (1)A1B1 (2)C4C3 
info jikan 1054 fukasa 2/3 eda 7 hyokati mate 0(20000)(-9 -9 None) yomisuji (1)A1B1 (+)H*A1
info jikan 1062 fukasa 2/3 eda 7 hyokati mate 0(20000)(0 4 Leaf) yomisuji (1)A1B1 (2)H*A1 
info jikan 1071 fukasa 1/3 eda 8 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)A1A2
info jikan 1080 fukasa 1/3 eda 8 hyokati mate 0(20000)(0 -22 Leaf) yomisuji (1)A1A2 
info jikan 1089 fukasa 1/3 eda 8 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)B2B1
info jikan 1112 fukasa 1/3 eda 8 hyokati mate 0(20000)(0 -26 Leaf) yomisuji (1)B2B1 
info jikan 1121 fukasa 1/3 eda 8 hyokati mate 0(20000)(-9 -9 None) yomisuji (+)H*A4
info jikan 1130 fukasa 1/3 eda 8 hyokati mate 0(20000)(0 -51 Leaf) yomisuji (1)H*A4 
info jikan 1140 fukasa - eda 9 hyokati mate 0(20000)(-9 -9 None) yomisuji null
決着図

図は  1手まで 1プレイヤーの番
ひ1
   A   B   C  
 ┌──┬──┬──┐
1│▽き│  │▽ぞ│
 ├──┼──┼──┤
2│  │▽ら│  │
 ├──┼──┼──┤
3│  │▲ぞ│  │
 ├──┼──┼──┤
4│  │▲ら│▲き│
 └──┴──┴──┘
ひ1

まいったぜ☆(>_<)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「1つ1つ 精査するかだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「精査も何も、評価値が 20000 になっているのはなんでよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「調べるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「アルファ値が 1度も更新されていないから、

最低値みたいだぜ☆」

 

 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(27) 指し手生成のオーダリングをテストしようぜ☆
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(26) 定跡ファイルに同じ局面が何個も入っているぜ☆

2016-11-25 13:56

KITASHIRAKAWA_Chiyuri_80x100x8_04_Aozame

「定跡ファイルに同じ局面が何個も入っているぜ☆」

KIFUWARABE_80x100x8_01_Futu

「同じ局面に 違うハッシュ値が付いているのかだぜ☆?」

fen krz/1h1/1H1/ZRK - 1 #4885913197151562240
B3B2 none 743 11 119
C4C3 none 543 11 119
B4A3 none 743 7 119
B4C3 none 743 7 119
fen krz/1h1/1H1/ZRK - 1 #443379103489215872
B4C3 none 19997 13 119
fen krz/1h1/1H1/ZRK - 1 #4482540176444913024
B4C3 none 19997 13 119
B3B2 none 19995 13 119

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あ…( ^ω^)…、ほんとだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「こんなん、トランスポジション・テーブルが仕事してないわよ」

201611251408

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「アプリケーション起動後は、1つの局面は 1つのハッシュ値を

返すはずなんだぜ☆」

KIFUWARABE_80x100x8_01_Futu

「ハッシュ値の差分更新が悪さをしているのでは?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「……☆(^~^)」

201611251412

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「………………☆」

201611251415

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「……………………☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「バラつかないわねぇ」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「定跡ファイルの書き出しが、追記モード になっているということは?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「調べてみるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「解決した☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「ほう」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ソースコードを貼るぜ☆」

        /// <summary>
        /// 内容をセットするぜ☆(^▽^)
        /// </summary>
        /// <param name="ky"></param>
        /// <param name="danMojiretu"></param>
        /// <param name="mZ_Mojis"></param>
        /// <param name="mK_Mojis"></param>
        /// <param name="mH_Mojis"></param>
        /// <param name="mz_Mojis"></param>
        /// <param name="mk_Mojis"></param>
        /// <param name="mh_Mojis"></param>
        /// <param name="teban_Mojis"></param>
        public static void SetNaiyo(
            Kyokumen ky,
            string[] danMojiretu, // [0~3]1段目~4段目、[0~2]1筋目~3筋目
            string mZ_Mojis,  //持駒▲ぞう
            string mK_Mojis,  //持駒▲きりん
            string mH_Mojis,  //持駒▲ひよこ
            string mz_Mojis,  //持駒△ぞう
            string mk_Mojis,  //持駒△きりん
            string mh_Mojis,  //持駒△ひよこ
            string teban_Mojis  //手番
            )
        {
            ky.MotiKomas[(int)MotiKoma.Z] = KyokumenImpl.CountMaisu(mZ_Mojis);  //持駒▲ぞう
            ky.MotiKomas[(int)MotiKoma.K] = KyokumenImpl.CountMaisu(mK_Mojis);  //持駒▲きりん
            ky.MotiKomas[(int)MotiKoma.H] = KyokumenImpl.CountMaisu(mH_Mojis);  //持駒▲ひよこ
            ky.MotiKomas[(int)MotiKoma.z] = KyokumenImpl.CountMaisu(mz_Mojis);  //持駒△ぞう
            ky.MotiKomas[(int)MotiKoma.k] = KyokumenImpl.CountMaisu(mk_Mojis);  //持駒△きりん
            ky.MotiKomas[(int)MotiKoma.h] = KyokumenImpl.CountMaisu(mh_Mojis);  //持駒△ひよこ

            // 盤上の12升(既にクリアされているものとするぜ☆)
            int suji;
            for (int dan = 1; dan <= 4; dan++) //1段目~4段目の順に解析。
            {
                //
                // "2z" のように、3列を 2桁 で表記しているので、タテ筋のループ・カウントの数え方には注意だぜ☆(^~^)
                //
                suji = 1;
                for (int caret = 0; caret < 3 &&
                    caret < danMojiretu[dan - 1].Length // char配列の長さが短いことがあるぜ☆
                    ; caret++)
                {
                    char moji = danMojiretu[dan-1][caret];
                    switch (moji)
                    {
                        // 数字は空きマスの個数なので、筋を進めるぜ☆(^▽^)
                        // とりあえず 3 まで用意☆(^~^)
                        case '1':
                            {
                                ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Koma.Kuhaku;
                                suji += 1;
                            }
                            break;
                        case '2':
                            {
                                ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Koma.Kuhaku;
                                suji += 1;
                                ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Koma.Kuhaku;
                                suji += 1;
                            }
                            break;
                        case '3':
                            {
                                ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Koma.Kuhaku;
                                suji += 1;
                                ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Koma.Kuhaku;
                                suji += 1;
                                ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Koma.Kuhaku;
                                suji += 1;
                            }
                            break;
                        default:
                            // 駒でした。
                            ky.Komas[(int)Conv_Masu.ToMasu(suji, dan)] = Conv_Koma.Parse(moji);
                            suji += 1;
                            break;
                    }
                }
            }

            // 手番
            ky.Teban = Conv_Teban.Parse(teban_Mojis);
            Debug.Assert(Conv_Teban.IsOk(ky.Teban),"未定義の手番☆");
        }

KIFUWARABE_80x100x8_01_Futu

「なんだぜ、この純国産みたいなクソ・コードは☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「変数名を漢字にしていいんだったら、もっと見やすくなる☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「止めて!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「fen を改造してるんだが、z2 みたいに 空白2マスを

数字1文字で書くだろ☆

これを忘れて 3文字あると思っていて 読み取りを

ミスっていたんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「今まで よく動いていたというか、

動いていなかったというか」

201611251551

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「B3B2 が2つあるぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「ムーブ・ピッカーを調べましょう」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「王手する ひよこ と、

相手の ひよこ を取る ひよこ がいるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「同じでしょ!」

201611251615

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「相手のらいおん のマスから、

自分の駒が 1手戻る方向に動ける、と考えれば

駒ごとの 王手ができるマス が分かるな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「みんな 自分のことを ぞう だと思っていたので、

きりん は きりん、

ひよこ は ひよこ

であることを教えた☆」

KIFUWARABE_80x100x8_02_Hidosu

「なぜ バグ が増えるんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ぜんぜんテストしてないからな☆(^~^)」

201611251627

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「深さ8 のくせに 読み筋7 なのは なんでだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「調べましょう!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「とりあえず、ツリーの葉っぱで info を出すようにしたぜ☆

これで よし☆」

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(26) 定跡ファイルに同じ局面が何個も入っているぜ☆
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

どうぶつしょうぎをプログラもうぜ☆(26) 定跡ファイルのパーサーを書こうぜ☆?

2016-11-24 14:09

KIFUWARABE_80x100x8_01_Futu

「お父ん、機械学習しようぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「その前に 定跡ファイルのパーサーを改良しようぜ☆?

起動が 遅くて たまらん☆」

C3C2 none 0 1 119
fen 1kz/1rK/1Z1/1R1 Hh 1
C2B2 none -2900 1 119
H*A3 none 0 1 119
H*A2 none 0 1 119

 

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「やねうら王方式だぜ☆

局面の行と、その局面での合法手の行のリストが

並んでいるだけだぜ☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「8000キロバイト程度を読込むだけなのに、

なんで 5秒 ぐらいかかっているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ファイルから文字列を読み取る時間は、

人間的時間間隔からすると 一瞬だぜ☆

まあ、コンピューター的時間間隔からすると 遅いが☆

文字列を 1行ずつ 切り取っている時間が遅いんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「1行目を読み取ったら、1行目を消して、

2行目から最終行までの 文字列を残すだろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「切り取らなければいいのに」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「そうか( ^ω^)……、レコード盤の針方式かだぜ☆

やってみるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「Trim( ) って楽なんだが、

無くていいなら 無い方がいいんで、外してみるぜ☆」

                if ("" == line.Trim())//空行は無視☆
                {

                }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こうしようぜ☆」

                if (line.Length < 1)//if ("" == line.Trim())
                {
                    // 空行は無視☆
                    // 半角空白とか、全角空白とか、タブとか 入れてるやつは考慮しないぜ☆(^~^)!
                }

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「これも 無駄 なんじゃないの?」

                MatchCollection mc = KyokumenImpl.Regex2.Matches(fen);
                foreach (Match m in mc)
                {
                    if (0 < m.Groups.Count)
                    {
                        // 該当しないときは空文字列か☆
                        stra[1] = m.Groups[1].Value;  //1段目
                        stra[2] = m.Groups[2].Value;  //2段目
                        stra[3] = m.Groups[3].Value;  //3段目
                        stra[4] = m.Groups[4].Value;  //4段目
                        stra[5] = m.Groups[5].Value;  //持駒▲ぞう
                        stra[6] = m.Groups[6].Value;  //持駒▲きりん
                        stra[7] = m.Groups[7].Value;  //持駒▲ひよこ
                        stra[8] = m.Groups[8].Value;  //持駒△ぞう
                        stra[9] = m.Groups[9].Value;  //持駒△きりん
                        stra[10] = m.Groups[10].Value;  //持駒△ひよこ
                        stra[11] = m.Groups[11].Value;  //手番

                        if (!(
                            stra[1] == "" && stra[2] == "" && stra[3] == "" && stra[4] == "" && stra[5] == ""
                            && stra[6] == "" && stra[7] == "" && stra[8] == "" && stra[9] == "" && stra[10] == ""
                            && stra[11] == ""
                            ))
                        {
                            // 略
                        }
                    }
                }

OKAZAKI_Yumemi_80x80x8_01_Damaru

「パターン・マッチしてるんだったら、全部が空白なことなんて

ないでしょ」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「それもそうかだぜ☆

このチェックは省くぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「パースするたびに クリアーしているのも 無駄だよな☆

あれ☆?

new するより、逆に クリアーして メモリを使いまわした方がいいのか☆」

            MatchCollection mc = KyokumenImpl.Regex2.Matches(fen);
            foreach (Match m in mc)
            {
                if (0 < m.Groups.Count)
                {
                    KyokumenImpl.SetFromFen(
                        this,
                        // .Value は、該当しないときは空文字列か☆
                        m.Groups[1].Value,  //1段目
                        m.Groups[2].Value,  //2段目
                        m.Groups[3].Value,  //3段目
                        m.Groups[4].Value,  //4段目
                        m.Groups[5].Value,  //持駒▲ぞう
                        m.Groups[6].Value,  //持駒▲きりん
                        m.Groups[7].Value,  //持駒▲ひよこ
                        m.Groups[8].Value,  //持駒△ぞう
                        m.Groups[9].Value,  //持駒△きりん
                        m.Groups[10].Value,  //持駒△ひよこ
                        m.Groups[11].Value  //手番
                    );
                    successful = true;
                }

                // 最初の1件だけ処理して終わります。
                break;
            }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「というか 配列に移し替える必要なんか無かったぜ☆」

            Match m = KyokumenImpl.Regex2.Match(fen);
            if (0 < m.Groups.Count)
            {
                KyokumenImpl.SetFromFen(
                    this,
                    // .Value は、該当しないときは空文字列か☆
                    m.Groups[1].Value,  //1段目
                    m.Groups[2].Value,  //2段目
                    m.Groups[3].Value,  //3段目
                    m.Groups[4].Value,  //4段目
                    m.Groups[5].Value,  //持駒▲ぞう
                    m.Groups[6].Value,  //持駒▲きりん
                    m.Groups[7].Value,  //持駒▲ひよこ
                    m.Groups[8].Value,  //持駒△ぞう
                    m.Groups[9].Value,  //持駒△きりん
                    m.Groups[10].Value,  //持駒△ひよこ
                    m.Groups[11].Value  //手番
                );
                successful = true;
            }

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「というか ループにする必要も無かったぜ☆」

            Match m = KyokumenImpl.Regex2.Match(fen);
            if (0 < m.Groups.Count)
            {
                KyokumenImpl.SetFromFen(
                    this,
                    // .Value は、該当しないときは空文字列か☆
                    m.Groups[1].Value,  //1段目
                    m.Groups[2].Value,  //2段目
                    m.Groups[3].Value,  //3段目
                    m.Groups[4].Value,  //4段目
                    m.Groups[5].Value,  //持駒▲ぞう
                    m.Groups[6].Value,  //持駒▲きりん
                    m.Groups[7].Value,  //持駒▲ひよこ
                    m.Groups[8].Value,  //持駒△ぞう
                    m.Groups[9].Value,  //持駒△きりん
                    m.Groups[10].Value,  //持駒△ひよこ
                    m.Groups[11].Value  //手番
                );
                successful = true;
            }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「.Trim( ) とか、.StartWith( ) とか、.Substring( ) を使うのを止めて、

caret == ~.IndexOf( “~”, caret ) に置き換えだぜ☆」

            if (caret == commandline.IndexOf("toryo", caret))
            {
                caret += "toryo".Length;
                Util_String.SkipSpace(commandline, ref caret);

                out_result = Sasite.Toryo;
                return true;
            }

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「速くなったの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「コード全個所書き換えるまで待てだぜ☆」

 

はてなブックマーク - どうぶつしょうぎをプログラもうぜ☆(26) 定跡ファイルのパーサーを書こうぜ☆?
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket