探索ルーチンの4並列化は、前前夜までに終えていました。といっても、実際に4並列で走らせるのは、この夜がはじめてです。 まずは、いつもテストに使っているデータセット(81問)を流してみます。…なんと、途中で変なアドレスにアクセスするらしくてダウン。
デバッグモードでコンパイルしたものだと再現しないし、リリースモードでコンパイルしたものでも、ダウンする同じ問題に対してテストを繰り返すと、3回に2回しかダウンしません。 なので、これは、スレッド間の排他とか、タイミング問題によって起きている、ということのようです。
リリースモードでも、ダウンするアドレスは分かりますし、アセンブラレベルでは追いかけることができるので、マップファイルを見ながら検討をつけたところ、詰め将棋の中の、受け手の生成で落ちているようです。
あらためて、コードとレジスタの内容をよーく見ると、王手がかかっていないのに王手を生成しようとして、異常なアドレスにアクセスするようです。
王手がかかっていないなんてことがあるようだと、王手の生成にバグがあるのか?と思いながら、(王手の生成なんかは半年以上もいじっていないので、いまさらバグも残っていそうもないのですが…)さらにレジスタの内容やメモリダンプを調べていくと、どうも、王手生成で王を取る手が生成されており、王を取ってしまったあとには王手を受ける手は存在しない、ということのようです。
ここまで追いかけたら、朝の4時になっていました(--;
もっとも、ここまで追いかけられれば、後は簡単です。王手生成の際に、王を取る手を生成できてしまう時には、その局面は詰んでいることにしてしまえばOK。 こういうことがどんな時に起きるかというと、詰めろがかかっているかどうか見るために、一手パスした局面に対して詰め将棋を呼び出す際に問題が起きたようなので、対処としてもこれで(詰んでいるということにしてしまって)良さそうです。 (今、さらに深く原因を考えてみると、スレッドごとに持っている局面の状態テーブルの、王手がかかっているフラグがコピーされていないために、王手がかかっていれば呼び出されないはずの探索が行われていた、ということでした。 そうか、探索が同じスレッドで行われるか別のスレッドで行われるかによって、症状が出たり出なかったりするんだ…。そりゃ、タイミング依存だわ。)
デバッグ終了して、テストセットを再度流し終えたら、朝5時になってしまいました(--;
これでめげずに、さらに追加の定跡データをいくつか作成しました。まず、最近入手したプロ棋士の棋譜を、2000局ほど追加。 それから、後手番の四間飛車をオリジナルの定跡データから分離して、定跡選択時に四間飛車を選択可能にします。 定跡ルーチンも、今まで利用していなかった情報をいくつか利用できるように、小改造。 そうしてみたら、定跡の候補手がやたらに増えてしまっているし、質の良くない手も候補に引っかかっているようなので、あまり質の良くない手は候補から排除するルーチンも組み上げます。
さて、動作テストを行ってみると、結果は良好です。今まで、定跡として候補に上げられなかった手も候補にあがってくるし、変な手は候補にあがらなくなったようです。
ここで、朝の6:50になってしまっていました。あぁ、朝ご飯食べて、会場にマシンを運ばなきゃ…結局、一睡もしないままだ(;_;)
まぁ、いいや、プログラマが睡眠不足でも、プログラムの実力には関係ないしね(^^;
YSSにあたるのは事前に分かっていたので、この勝負に勝つためだけに、定跡ルーチンを強化し、定跡データを準備してきました。
先手うさぴょんの初手7六歩に、後手YSSが3四歩と角道を空けてくれれば、そのコースにのっかったのですが、残念ながら後手の応手は8四歩。いきなり勝負が終わってしまいました(^^;
YSSとは、どうしようもなく相性が悪くて、AI将棋2002にも、用意した定跡に乗ってきてくれないと、うさぴょんはさっぱり勝てないんですが、やっぱり勝てませんでした(;_;)
後手のうさぴょんが、3手で定跡を外れた途端に、4手目、6手目と怪しい手を連発してしまいました(泣)
しかも、飛車先を突破されて、だめかも…と思ったのですが、なぜか怪しいことに、飛車を手にして、角損ですが、と金が二枚作れてしまっています。 うさぴょんの怪しい玉形も、意外に柔軟で、崩しにくい形になっています。そのまま、と金を使って寄せてしまいました。なんてラッキー(^^)
この勝負、うさぴょんはえらい時間を使っています。25分切れ負けなのに、24分8秒も使っているし…。
先手番の定跡を、YSS相手に設定したままで迎えてしまいました(^^;
AI将棋は角を交換したあと、いきなり5四角とはしないで必ず33銀と上がるようなので、この形に対しては序盤の準備をちゃんとしていません(--;;; 案の定、メチャクチャな形になってしまいました(--;
13手目にして、ちょっと覗きに来た、鈴木師匠には、「これはもううさぴょん悪いでしょう」と言われる始末(--;
70手目前後では、うさぴょん大ピンチ(--;;
しかし、その後、95手目には、うさぴょんの玉がうまく逃げてしまって、優勢になり、勝ちきってしまいました。
桜とは、昨年もあたっています。昨年は、うさぴょん先手で矢倉になり、うさぴょんが一方的に攻める展開から、勝ちきってしまいました。
去年と同じような展開になるとつまらないので、四間飛車を選びます。
桜は、振り飛車に対しては左美濃を用意してあるとのことで、きれいに左美濃に組まれました。
うさぴょんは、美濃囲いに組んだあと、自分で囲いを崩してしまいます(泣)しかも、桜の棒銀が調子良く進んでくるのを止められません(泣)
でも、桜も調子よく棒銀に進めていったのに、自分で銀を閉じ込めてしまいました。これで、ひとまず安心。
桜が銀を捨ててさばきに来ましたが、うさぴょんがうまく指して逆転しました。しかし、時間との戦いが待っています(--;
最後に桜の玉を詰ませた時には、残り3秒しかありませんでした。
ハイパー将棋とは、まともに組んで戦ってみたかったので、定跡はオールラウンドを選択しました。
後手のハイパー将棋が飛車を振り、うさぴょんは居飛車で速攻を選択。
私のレベルでは、一手指すほうが良く見えるような、見ていて面白い将棋になりました。
もっとも、ハイパー将棋の作者の若林さんによれば、居飛車の速攻では、振り飛車に駒をさばかれてしまっては、居飛車良くないとのこと。勉強になります。(今度、評価関数に入れておきます。)
ですが、うさぴょんの評価関数では、ちょっとだけうさぴょん有利のまま進みます。ハイパー将棋も、少しうさぴょん優勢と判断しているとのこと。
ところが、先読みの中で、ハイパー将棋に歩を垂らされる手が見えた瞬間に、うさぴょんの評価値が激減。一気に劣勢と判断しました。
そのまま、と金を作られて、寄せ合いの速度で負けてしまいました。
同門対決になりました。でも、まだまだ師匠?のうさぴょんとしては負けるわけにはいきません。
奈良さんとは、定跡の元データとして、同じ棋譜を使っている部分が多々あり(プロ棋士の棋譜を元にしています)、 そのまま対決すると定跡だけで決着してしまうのではないか?ということを奈良さんが考えてくれて、力戦形になりました。
もしも、定跡データだけで勝負していたら、おそらく定跡だけでうさぴょんが有利な局面に誘導してしまい、ツマラナイ試合になってしまっていたと思います。 というのは、うさぴょんは、自分の手番の棋士の勝った棋譜だけを定跡の元データにしており、奈良さんの方は特にそのような操作はされていない、ということなので、 同じ棋譜から定跡として引っ張ってくるようなことがおきた場合、必ずうさぴょん有利になってしまう(はず)だからです。
それに気が付いて、力戦に誘導してくれた奈良さん、ありがとう。
さて、力戦形になりました。うさぴょんは、筋違い角を選択。早々に定跡から外れたようです。
角を追う奈良将棋と、逃げながらチャンスを伺ううさぴょんの戦いになりました。
うさぴょんがやっぱり駒損をするんですが、なんとなく、うさぴょんの方が玉に絡むのがうまいみたいで、その分だけ勝てた感じです。
シェアウェアである、関田将棋との対決です。
個人的には、もう既にうさぴょんの方が強い、と思っていたソフトなので(でも、昨年の順位は関田将棋の方が上ですし、今までの成績も上です)それを証明する機会になった、という感じです。
定跡としては、後手番ですし、四間飛車を選択。
振り飛車なのに、あっさり角交換を許してしまいます(--;
でも、どういうわけだか、いっぱい駒をはがされるんですが全部うさぴょんの持ち駒に戻ってきます。
60手目あたりで、プロ棋士の勝又五段が覗きに来ました。
ひどい将棋を指してるねぇくらいは言われた気がします(^^;;
が、ここから後のうさぴょんは、勝又五段が解説するように進めていくので、プログラマがびっくり。 (勝又先生も、「最近のコンピュータプログラムは、(こんなクラスのプログラムでも)終盤は強くなったねぇ」と驚いておられたようですが。)
しかし、大切なところで、(解説どおりに指さずに)いまいち決めそこなってしまいました(^^;;
それでも、問題なく勝ちきることが出来ました。
ここで勝った方が、おそらく柿木将棋との対戦になり、柿木に勝てれば決勝進出確定、柿木に負けても、もしかすると決勝に届くかも、という大一番。
竜の卵とは、鈴木将棋で参加した2000年から、これで3年連続対戦になりますが、今まではいいところなく負けています。しかし、今年こそは勝たないといけません。
昨年は居飛車でひどい目にあったので、今年は、四間飛車を選択しました。
ところが、これがどうもいまいち(--;;
いいところなく負けてしまいました。
まともに矢倉にしとけばよかった?というのはあとでの感想…。
他の勝敗次第では、この勝負に勝った方に決勝進出の目もあるかも知れない、という、連続で大一番。
なのに、磯部さんのマシンが不調らしく、通信がうまくいきません(--;;いつまでも試合がはじめられません(--;
とりあえず、通信の代理になるマシンとして、山本君のノートパソコンを借用することになりました。
さて、やっと大一番の開始です。
でも、私は決勝進出を諦めていたので、自分で定跡を選択する気力なし(^^;;
というわけで、対戦相手の磯部さんに、希望の戦形を聞いてみたところ、「うさぴょんの得意な形で(^^)」と言われたので、 「じゃぁ、昨年調子の良かった相矢倉で右四間にしてみます」ということで、定跡をセット。
でも、あまり右四間になりそうもない(^^;角交換しているし、飛車を動いたら、角打ち込まれちゃう。
と思っていたら、右四間に振って、きっちり角を打ち込まれて馬を作られてしまいました(^^;;;;
もうこれは負けモード、と思っていたら、磯部将棋が馬を引いてしまって、あやしげな雰囲気に。
あやしげな雰囲気から、一気にうさぴょんの勝ちの雰囲気になってしまいました。
でも、今日のうさぴょんは時間の使いすぎ(^^;逆転に成功した時には、もう残り時間がなくなって、思考が短くなっていました。
残り時間が切迫して、何か追いかけ方がいまいち。ちゃんと詰めろになっているのかいないのか…。あぁ、広い方に逃がしちゃった(--;;これは、もう、詰まない…。
そのまま、うさぴょん時間切れ。もっとも、時間が残っていたら、磯部に詰められていたことでしょう。
戦績 | 5勝4敗 |
二次予選 | 11位 |
総合順位 | 14位 |
やっぱり、自分で我慢できないような欠点があるうちは、決勝なんてまだまだだよなー、と思っていたんですが、今回は、意外に決勝に近いところまで進めちゃいました。
すごーく遠くにあると思っていた決勝進出という夢が、もうそんなにメチャクチャに遠いわけでもない、という感じでしょうか。
もっとも、YSSにボロ負けしたり、磯部将棋相手に逆転勝利してるっぽいのに勝ち切れなかったりするようではまだまだなんですけど(^^;
そうそう、戦いが終わったあと、体力的に結構ボロボロになっていてつらかったんですけど、山本君に家の近くまで車で送ってもらって、ずいぶん楽をさせてもらってしまいました。
いつもいつもお世話になります。ぺこりm(..)m