aki.の月記 このページをアンテナに追加 RSSフィード

2006 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2008 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 03 | 04 | 05 |

2010-05-09

[] 詰め将棋をやってみた (1)  詰め将棋をやってみた (1)を含むブックマーク  詰め将棋をやってみた (1)のブックマークコメント

http://vivio.blog.shinobi.jp/Entry/204/

  前回(4/25)結果 今回結果

羽生[詰め] 94問  96問(+2)

将棋図巧  63問  71問(+8)

将棋無双  44問  58問(+14)

というわけで、やってみました。

何秒回せばいいのか分からなかったので、とりあえず1,500,000ノードで。

NPSは低いときで50k弱なので、最大で40秒弱程度になってます。(←遅い)

やってる途中でバグを見つけて直したりとかして、最終結果はこの通り。↓

問題正解数時間切れ
羽生[詰め]964
将棋図巧6439
将棋無双5153

「前回(4/25)結果」には時間はともかく正答数的には勝ってますが、「今回結果」には見事に負けてますね…。

[] 詰め将棋をやってみた (2)  詰め将棋をやってみた (2)を含むブックマーク  詰め将棋をやってみた (2)のブックマークコメント

もひとつ。

http://vivio.blog.shinobi.jp/Entry/208/

将棋世界6月号の「コンピュータは七冠の夢を見るか?」の問題に挑戦してみました。

一応、答は出ました。

第1図0.6秒、第2図0.0秒、第3図0.1秒、第4図1.1秒、第5図0.9秒、第6図0.0秒くらいでした。

↓Blunderの結果。


ノード時間[ms]手数手順
第1図97,63092623▲41飛成(45)△同王(31)▲52銀打△同飛(82)▲同と(53)△同王(41)▲44桂打△63王(52)▲62金打△53王(63)▲63飛打△42王(53)▲43歩打△41王(42)▲52金(62)△31王(41)▲32桂成(44)△同王(31)▲42歩成(43)△22王(32)▲32金打△12王(22)▲22金打
第2図546,76511,39735△67桂(75)▲89王(79)△78銀打▲同飛(88)△79金打▲同飛(78)△同桂成(67)▲同王(89)△57角打▲68金打△同角成(57)▲同王(79)△77金打▲57王(68)△65桂(73)▲46王(57)△45香打▲37王(46)△47香成(45)▲27王(37)△37金打▲16王(27)△15歩打▲25王(16)△24飛打▲15王(25)△14歩打▲16王(15)△15銀打▲17王(16)△26銀(15)▲18王(17)△27銀成(26)▲29王(18)△28金(37)
第3図3,236,16940,37537△6八銀打▲同歩(69)△6九金打▲同玉(79)△5七桂打▲5九玉(69)△4九金打▲同龍(47)△同桂成(57)▲同玉(59)△4八銀打▲同玉(49)△5七角打▲3八玉(48)△3九飛打▲2八玉(38)△3七銀打▲2七玉(28)△3八角打▲3七玉(27)△5六角成(38)▲2七玉(37)△3八馬(56)▲3六玉(27)△3七馬(38)▲2五玉(36)△2四角成(57)▲1六玉(25)△1五馬(24)▲同玉(16)△1四歩(13)▲1六玉(15)△1五歩(14)▲2五玉(16)△4七馬(37)▲3六歩打△同飛成(39)
第4図291,4553,84735▲83桂(95)△同金(82)▲72銀打△同金(61)▲61金打△82王(71)▲72桂成(84)△同王(82)▲62金(61)△73王(72)▲63金(62)△同王(73)▲52角打△64王(63)▲63金打△65王(64)▲66銀打△同と(56)▲43角(52)△54歩打▲66歩(67)△55王(65)▲56歩打△44王(55)▲45歩打△33王(44)▲23角成(34)△同王(33)▲34角成(43)△22王(23)▲23金打△21王(22)▲22歩打△11王(21)▲12金(23)
第5図274,0132,81449▲44角打△23王(33)▲25飛(29)△同銀(34)▲24歩打△12王(23)▲23金打△同金(32)▲同歩成(24)△同王(12)▲24歩打△34王(23)▲35金打△43王(34)▲53角成(62)△32王(43)▲23歩成(24)△同王(32)▲24金(35)△12王(23)▲11角成(44)△同王(12)▲13香打△12角打▲44馬(53)△21王(11)▲12香成(13)△32王(21)▲33金(24)△41王(32)▲42歩打△52王(41)▲43角打△51王(52)▲41歩成(42)△同王(51)▲53桂打△51王(41)▲41桂成(53)△同王(51)▲53桂打△51王(41)▲61桂成(53)△同飛(81)▲同角成(43)△同王(51)▲71飛打△52王(61)▲43金(33)
第6図28,93728621△65銀打▲同桂(77)△84角(93)▲75銀打△56金打▲同王(66)△76飛成(79)▲66金打△44桂打▲46王(56)△66龍(76)▲同銀(75)△47金打▲35王(46)△46銀打▲26王(35)△25銀打▲17王(26)△16香打▲28王(17)△38圭(48)

時間的には一桁近く負けてるようです…。

ちなみに第3図はテーブルのサイズを少し大きくしないと5Mノード回しても解けなかったりとかしてました。なんかバグの予感。


「前回(4月号参照)言ったじゃないですか……。」は確かに偉そうですね。(ニヤリ)

[] 稲庭将棋対策を考える  稲庭将棋対策を考えるを含むブックマーク  稲庭将棋対策を考えるのブックマークコメント

まず始めの方針として、評価関数で解決するか探索で解決するかという問題があります。

現状の多くのプログラムが、「駒損してでも崩しに行く手」を指せないのは、もし相手が同じだけ探索して指して来たら損だと「正しく認識」しているためなわけなので、仮に稲庭将棋がれさぴょんではなくBonanzaGPS将棋を使っていて、切り替えのタイミングが絶妙だったりすると、逆襲されるリスクも無いとは言えないかもしれません。

でも自分だけ好きに形を作れる為に+2000くらいにはなるので、角損くらいして+1000近くまで下がっても安全圏、という考え方も少なくとも人間なら出来る訳で、そういう何かをアレするのも無くも無いかもしれないと思ったりとかもしつつ、、でもやっぱり探索で解決するのは副作用が大きそうなので、崩した上で駒得とか出来るような形を作る方向で行こうかと思います。


今のBlunderがやってしまう一番まずい形は多分コレ。↓

http://wdoor.c.u-tokyo.ac.jp/shogi/tools/view/index.cgi?go_last=on&csa=http://wdoor.c.u-tokyo.ac.jp/shogi/x/2010%2F05%2F07%2Fwdoor%2Bfloodgate-900-0%2Binaniwa_WCSC20%2BBlunder-WCSC20_4c%2B20100507130002.csa

歩が3〜5段目に行くと加点、といういい加減な特徴のせいで、歩が全部5段目に行ってしまったパターン。こうなってしまうと、桂馬や角が使えなくて攻めれなくなってしまいます。

結構前からそうなることは知っていて、歩が5段目の時の加点を止めれば済む話ではあったのですが、代わりの特徴が思いつかなくて放置していたのでした。

丁度評価関数を作り直すので、その際にコレは廃止して、代わりに盤上の歩の段の平均とかを評価するような特徴を作ろうかと思ってます。歩の段が進行度的に程よいくらいになっていれば加点、変な状態だと0になって、0に向かう手が指されなくなってくれるといいなぁ、という感じで。


逆に上手く行ったパターンが今のところ唯一、コレ。↓

http://wdoor.c.u-tokyo.ac.jp/shogi/tools/view/index.cgi?csa=http%3A%2F%2Fwdoor.c.u-tokyo.ac.jp%2Fshogi%2Fx%2F2010%2F05%2F09%2Fwdoor%2Bfloodgate-900-0%2Binaniwa_WCSC20%2BBlunder-WCSC20_4c%2B20100509200004.csa&go_last=on&move_to=216&submit=show%2Freload

…うーん、どう評価すればいいんでしょう。歩に自分の利きが2つ、相手の利きが2つ。間接利きを加味すると自分が3つにはなりますが、間接利きは計算コストが気になるのと、常に考慮するのが正解とも限らない気もしたり。

5六に歩を打てるようにするという観点としては、「歩に対する自分と相手の利きがそれぞれ1+歩の頭の利きが自分と相手がそれぞれ2」なので、その辺の利きの数の組み合わせを評価してみるとかでしょうか。逆に打たないと5七への利きが相手が2、自分が1なので、そのマイナスを消す手になるように評価すればいいんでしょうかね。

あるいは飛車と銀とか銀と桂馬とかの連携を評価しましょうか。う〜ん。

かず@なのはかず@なのは 2010/05/09 18:26 _kensho.batを動かすとお使いのコンピュータでのなのは詰との比較が出来ますw
局面データをファイルにして引数で渡してやれば、同様に比較が出来ると思います。
第2図は5手くらいで詰むと思いましたが、どちらかの局面入力ミスでしょうか。nanohatsume.exeでも時間かかっていますか?
詰ルーチンは無双IIとかと比較して残念な思いをしていたので、Blunderよりよさそうな結果みたいでうれしいです!

ak11ak11 2010/05/09 18:52 第2図はもしかすると先手番になってませんか?
棋泉で棋譜検索して作ったので合ってると思います。↓

後手の持駒:角 金 銀二 香 歩二
9 8 7 6 5 4 3 2 1
+---------------------------+
|v香 ・ ・ ・ ・ ・v玉v桂 ・|一
| ・ ・ ・ ・ 全 ・v金 ・ 杏|二
| ・ ・v桂 ・ ・ ・ ・v歩 ・|三
|v歩v飛 ・v金 ・v歩v歩 ・ ・|四
| ・ ・v桂 ・ ・ ・ ・ ・ ・|五
| 歩 歩 ・ ・ ・ ・ 歩 歩 ・|六
| ・ ・ ・ 金 ・ 歩 ・ ・ ・|七
| ・ 飛 ・ ・ ・ ・ ・ ・ ・|八
| 香 ・ 玉 ・ ・ ・ ・ ・ ・|九
+---------------------------+
先手の持駒:角 銀 桂 歩七
後手番
先手:伊奈祐介
後手:片上大輔

nanohatsume.exeにこれをやらせてみたら、43桂打と出て来てしまいました。

かず@なのはかず@なのは 2010/05/09 19:39 あぁっ!
全部先手番だと思ってました!
局面図の下にteban=GOTEと入れるんだったかな(未確認)。
PC触るときに確認します。

ak11ak11 2010/05/09 20:14 「TEBAN=GOTE」で行けました。
実戦譜だと、両方の玉に詰みがあったりとかしてなかなか紛らわしいですね。

かず@なのはかず@なのは 2010/05/12 00:04 やり直してみました。
Blunderに完敗です。。。

ak11ak11 2010/05/12 00:27 おお、そうでしたか。
第2図と第3図を除けば、ノード数的には、なのはとBlunderは近い値になってますね。第4図と第5図は時間的にはBlunderが負けてたり。

ogaoga 2011/08/29 16:42 くだらない質問ですいません
稲庭対策で、定跡ファイルに先手・後手の棋譜を数局登録しても効果はないのでしょうか?
普通に指せば50-60手で詰むと思うのですが・・・
定跡ファイルの編集方法が解らなくて検証はできてませんが・・・

ak11ak11 2011/08/30 04:43 定跡ファイルは、局面が完全一致したときに指す手を記録しているだけなので、ちょっと駒の配置が違う場合とかを全て登録しないといけないのでなかなか難しいです。

稲庭対策だけを考えるなら適当に部分一致とかでやる手もあるのですが、稲庭対策専用のコードは入れたくないと思ったりとかも。