開発者 | プログラム名 | 使用マシン(CPU等) | 使用言語 |
---|---|---|---|
山田泰広 | 山田将棋(Version 3.00) | PC/AT互換機(Core i7 920, 2.66GHz) | C |
1回戦 | 2回戦 | 3回戦 | 4回戦 | 5回戦 | 6回戦 | 7回戦 | 勝敗 | 順位 | |
---|---|---|---|---|---|---|---|---|---|
山田将棋Ver 3.00 | ○ponanza | ○臥龍 | ○鈴木将棋 | ○隠岐 | ●KCC | ●Blunder | ●WILDCAT | 4-3-0 | 6 |
1回戦 | 2回戦 | 3回戦 | 4回戦 | 5回戦 | 6回戦 | 7回戦 | 8回戦 | 9回戦 | 勝敗 | 順位 | |
---|---|---|---|---|---|---|---|---|---|---|---|
山田将棋Ver 3.00 | ●習甦 | ●KCC | ○WILDCAT | ●TACOS | ○Shotest | ●K-Shogi | ○ym将棋 | ○マイムーブ | ●SPEAR | 4-5-0 | 12 |
一番のプログラム的改良は、マルチスレッド化。新 PC はアメであった反面、 ムチの意味もこめて。コア 4 つのうち、3 つを遊ばせて戦っていたんでは 笑いものになりかねないんで、自分を追い込むことができた。 とはいえ、着手は 3 月上旬。間に合う可能性は、 50% ないと思っていたが、今年はこれさえ間に合えば満足、 という気持ちで取り組んだ。
参考にしたのはお約束の Crafty。Crafty で TREE 構造体で 実装されている「局面情報のラッピング」は、実は第 17 回参加の時点で 完了していた。TREE という名前は探索木に由来するのだろうが、 なんとなく味気なく感じたので、山田将棋では WORLD という 名前にしている。「将棋盤という世界」を複製して、別スレッドに 処理を任せるというイメージだ。で、その構造体へのポインタを *w で 確保し、w を各関数へ渡し、w->ban[] (盤)、w->kiki[] (利き)と いったデータを参照・更新する。
始めの 2 週間くらいは、山下さんの Crafy メモを片手に、 自分でも Crafty のコメントに和訳をつけてみた。すると、 関数同士のつながりや変数の用途が、少しずつではあるがぼんやり 見えてきた。用途などのコメントが見当たらない変数は、 grep してどの関数で使われているかを調べ、「なんだ、 デバッグ用情報として出力されてるだけだ」という 確認ができたら、自分のプログラムでの適用や導入を後回し、 という具合に進めた。で、なんとか動いたのが 4 月 20 日頃。 その後 1 週間くらいで、LPS, NPS がいい感じに上がってきたんで、 うれしくなった。次の一手問題での解答時間が早くなった。
バグ修正で大きかったと思われるのは、両玉からの距離に 応じた位置評価テーブル、の探索中での更新処理。もう 2 年くらい前に実装していたと思う。更新にあたって、 直前(親)の指し手が玉移動、という条件は当然のもの。 玉が移動しない枝を進む・戻る場合は、このテーブルの更新は 不要だ。がこの条件に指定していた玉の先後を見事に 逆に指定していたのだ。というわけで、ノードの頭でむなしく if 判定が空回りして、テーブルがまったく更新されて いなかったのだ。
取り組みの内容が濃かったという意味では、コメダプログラミングが 大きい。コメダというのは、東海地方を中心に展開されている 喫茶店チェーン。きちんと分煙されてる店舗をみつけ、 平日帰宅後に 1 時間半くらい、20 回くらいは通ったと思う。 適度な視線で集中できるうえ、ファミレスと違い泣きわめく 子供にイライラさせられることもない。
第 6 戦の Blunder 戦で、初めて勝又先生に解説をいただいた。 初参加ながら好調な Blunder に注目されてのことだと思うが、 劣勢になり結局負けとなった山田将棋側にいろいろアドバイスいただいた。 まず、二枚金。もろいうえに、2八銀と上がるタイミングが難しく 壁銀にもなりやすいので、最近は相振りでも美濃で戦うのがよいとのこと。 そして相振りは 3 手目に角道を止めた先手番側がそのままだと 角の働きが悪いので、角交換を目指すべきとのこと。 勉強になった。早速その対局後、相振り先手のケースでは、角交換を あまり抑制しないように手直しした。振り飛車しか指せない山田将棋には 序盤角交換を抑制するためのパラメータが 10 年以上前からある。 このパラメータを上記条件時に緩和した。二枚金については 定跡とのからみもあるので、来年までに改善したい。
結局 4 勝 3 敗ながら、4 連勝スタート後の残り 3 戦が、 同じく星の伸びていた上位との対戦となったため、 ソルコフ等で予選通過が決まった。ほっとした。
習甦、KCC にいいところなくたて続けに負けたあと、 探索深さと思考レベルを調整。両対局とも消費時間が 10 分未満だったため。
以下は第 3 戦、後手 WILDCAT が△6八金と歩を払って寄ったところ。
ここから▲6三歩△7二金▲1四馬として、こちらの勝ちが見えてきたようだ。 落ちている4三の金に目がくらまなかったのが良かった。 以降、2五の桂を取って、こちらの玉は上部に逃げれるし、 相手玉は▲6四桂でしびれるため。後手 WILDCAT の持ち駒 銀桂歩 9 8 7 6 5 4 3 2 1 ・v桂 ・v香 ・ ・ ・ ・ ・ 一 v香v王 ・v金 ・ ・ 竜 ・ ・ 二 v歩v歩v歩 ・v歩v金 ・ 馬 ・ 三 ・ ・ ・ ・ ・ ・v歩 ・v歩 四 ・ ・ ・ 銀 ・ ・ ・v桂 ・ 五 ・ 歩 歩 銀 歩 銀 歩 ・ 歩 六 歩 ・ ・ ・ ・ 歩 ・ 歩 ・ 七 ・ ・ ・v金 ・ 金 ・ 王 ・ 八 香v竜 ・ ・ ・ ・ 角 桂 香 九 先手 山田将棋 の持ち駒 歩歩歩
次の局面は、第 5 戦 Shotest に対して、山田将棋が△5五金と打って角道を止めたところ。
この後 Shotest が▲3一銀打として、銀を守りにいったのが良くなさそうだ。 山田将棋は、▲2一銀△2二飛▲4一銀とされて2一の銀を取ると▲5二歩成から囲いを はがされる筋が見えていて、こちらが悪そうという評価だった。 結局、飛車が 6 筋に転回し、そっぽの銀を遊ばせることに成功、 取れる大駒を気にせず鋭く攻めて寄せることができた。後手 山田将棋 の持ち駒 9 8 7 6 5 4 3 2 1 v香v桂 ・v金v角 ・ ・v桂 ・ 一 ・v王v銀 ・ ・ ・ ・ 銀v飛 二 ・v歩 ・v金 歩v歩 ・v歩v香 三 v歩 ・v歩 ・v歩 ・v歩 ・v歩 四 ・ ・ ・v歩v金 桂 ・ 歩 ・ 五 歩 ・ 歩 ・ ・ ・ 歩 ・ 歩 六 ・ 歩 ・ 歩 ・ ・ ・ ・ ・ 七 ・ 角 王 銀 金 ・ ・ ・ ・ 八 香 桂 ・ ・ ・ ・ ・ 飛 香 九 先手 Shotest の持ち駒 銀歩
次は、第 8 戦、マイムーブが△7五銀と引いて、次の飛車成りをみているところ。
飛車先を完全に破られたように思うのだが、ここで山田将棋は▲8六歩。 超うさんくさい手だ。こんなので受かっているのだろうか。銀に払われると、 ▲4五銀(ねらいは角頭)△8四飛(角頭を受ける)▲8五歩といった感じで良さそうではあるが。 この後、うまく駒をさばいて、5三にと金を作りうまく攻めることができた。後手 マイムーブ の持ち駒 歩歩 9 8 7 6 5 4 3 2 1 v香v桂 ・v金v銀v金 ・v桂v香 一 ・v飛 ・ ・ ・ ・ ・v王 ・ 二 v歩 ・ ・v歩v角v歩v歩v歩v歩 三 ・ ・ ・ ・v歩 ・ ・ ・ ・ 四 ・ ・v銀 ・ ・ ・ ・ ・ ・ 五 ・ ・ ・ 歩 銀 歩 ・ ・ 歩 六 歩 ・ ・ ・ 歩 金 歩 歩 ・ 七 ・ ・ 飛 ・ ・ ・ 銀 王 ・ 八 香 桂 ・ ・ 角 金 ・ 桂 香 九 先手 山田将棋 の持ち駒 歩
最終的に 4 勝 5 敗 2 次予選 12 位でシード獲得、という過去最高の成績となった。 が 12 位という順位には大きな意味はないと思う。 A級リーグ1号、TACOS、きのあ、うさぴょんに、これまで一度も 勝ったことがないのに、対戦相手にめぐまれてたまたま ソルコフとかが良かっただけ。3 勝、4 勝のグループはほとんど差がないと思う。