第18回世界コンピュータ将棋選手権 参加記

  • 日程:2008年5月3日(土)〜5日(月)
  • 場所:千葉県木更津市 かずさアーク
  • 参加チーム数:39
  • CSAからの公式記録はこちら

    奈良将棋は、1次予選免除、2次予選は6勝3敗で24チーム中5位 の成績で、苦節7年、初の決勝戦に進むことができました。 決勝戦は1勝6敗で、8チーム中7位。全敗も覚悟していましたので 決勝戦中、勝敗は気にしていませんでしたが、終わってみると1勝で きたことは来年への励みに大切だったのではと感じています。

    このWebページもしばらく更新をさぼっておりました(というより 元々、たいしたことを書いておりません)が、決勝戦に進むのも最初 で最後かもしれませんので、せめてこんな年は、改良の内容や、棋譜 の分析、反省、課題みたいことなどを記しておきたいと思います。

    なお、棋譜はCSAの中継サイトからリンクを張らせていただいてい ます。別windowで表示されるhtmlの書き方も参考にさせていただ きました。また、棋譜の表示は柿木さんの Kifu for Java を、棋譜の検証には私の手元で最新の東大将棋8を使わせていただ きます。

    開発の記録

    2007年大会が終わった頃(2007.05)

    2007年大会(2次予選)は成績が5勝4敗の12/24位と、何とかシー ド権は確保できました。しかし将棋の内容はどれも非常に悪く、あやまり 将棋戦の逆転勝ちがたまたまラッキーなだけで、実質4勝5敗、15位 くらいの内容であったと思います。

    負けた棋譜を並べてみました。また、なんとはなしにログも 見てみました。すると予測探索中に相手の手を受信して、その後 非常に悪い手を返していることが分かって、バグがあるまま大会に出てい たことに愕然としました(多分成績にはほとんど影響はなかったと 思いますが)。このバグはタイミング依存で再現性が低いのですが、 とにかく予測探測中の相手の手の受信 がトリガーになっていることは確かなようなので、ひたすらコードを 見つめました。結局、予測探索中かどうか、の判定と、手が届いているか どうか(+届いていれば手を一時保存)の判定(+処理)を、本来はロック下 でアトミックに行なわなければならないのに、 2つの分かれたチェック関数で 行なっていたことが原因であることが分かりました。これはシングル探索で はまったく問題がない実装(関数I/F)なのですが、並列探索で顕著化する バグでした。

    2008年の2次予選最終、習甦戦で、習甦が予測探索中に相手( 奈良将棋)の手を受信して探索が止まってしまう問題を見たとき、 このバグを思い出しました。習甦さんの発生原因はまったく 分かりませんが、探索の内部ノードがなんらかのイベント で復帰するルート、それが並列探索の場合は、バグを混入/流出しやすい 箇所であると思います。

    Bonanza Method への取り組み開始(2007.06〜07)

    私のプログラムは、これまで山下さんの落とし穴方式、および 定跡DB の類似局面からの手生成(ボーナス付与)で駒組みを 行なっていましたが、値の調整はとても難しい作業でした。 チューニングに時間がかかるということもありますが、 いつも序盤に穴があり、 大会間近にそれに気が付いて、穴を埋める作業に追われていました。 対WILDCAT戦における41金の離れゴマもひどい例です。

    Bonanzaの序盤(駒組み)は、ある程度どんな戦形にも付いていけて 素晴らしく、私もぜひ取り入れてみようとは思っていました。 ただ私にはその数学が難しく、2006年のGPWで保木さんの発表を 聞いて以来半年、最適制御や数値解析の参考書を2,3冊買って(大げさ) 基本的なところから勉強をはじめていました。指数関数の 微分も忘れているような状態だったのでネットでも 勉強、また、学生のプログラミング演習のように、2次曲線の 極値を数値解析で求める100行くらいのプログラムも書いてみていました。

    理論の概要を理解して(つもり?)から 自動学習のフレームワークができるまで、1ヶ月くらいかかりました。 またのちに並列で計算できることに気づき、並列処理を実装するのにも 1ヶ月くらいかかりました。

    Featureの追加(2007.08〜10)

    最初は、駒の価値と持ち駒の価値のfeatureだけからスタートしました が、なんとなく順調に動いているようにみえたので、 positional な featureもじょじょに追加してみました。 feature は後から追加しても、またそこから学習を継続すれば良いので、 人間が将棋に関する新しい概念を学ぶのに似てます。

  • 玉と味方の駒
  • 玉と敵の駒
  • 隣接する味方の2駒
  • ピン
  • 飛車角香の自由度
  • 玉の近傍25マス
  • 飛車の前後の歩
  • 大駒による質駒

    ちなみに保木さんの論文では駒の価値の総和を一定するという制約を 設けていますが、私は歩が100点でさえあればいいのではと考え、歩を100点 にする制約にしています。 (保木さんがなぜ駒の価値の総和を一定にしたのか、 聞きそびれてしまいました。今度教えてください。)

    学習をしばらくやったあとで、αβの呼び出しが 正しくは [-beta, -alpha] としなければならないところを [alpha, beta] としてしまっていることに気が付き、 学習結果を全部捨てることもありました。また高速化のための評価関数の 差分計算にバグがあったこともありました。 棚瀬さんの自戦記に、「学習はバグがあってもすぐには分からないし」とありますが、 まさにそんな感じがしました。

    保木さんの論文ではパラメータが約1万 となっていましたが、私は闇雲に条件を細かく分けていったので、 11月頃にはパラメータ数が100万にもなってしまいました。後に、 ネット上の情報を色々みていたとき、一般的に学習用のデータ数が 一定なとき、 学習可能なパラメータ数に上限があるようなことが書かれており、 その関係性を定量的に示す理論もあるようなことが書かれていました。 情報量基準とかいう学問分野なのかもしれませんが、 これもまた難しそうな数式が並び、まったく分かりませんでした。

    学習はプロの棋譜13,000局を使って行なっています。 1stepの更新が conro(2core)を使っても10時間以上かかっておりましたので 、このころ QX6800(4core)を買いました。6core であれば、3時間半くらいで 1step 進めることができます。(実際そこまで縮めることができた のはもっとずっとあとで、配列の初期化をループで行なうのをmemsetに 変えた、とか、そういう雑多な積み上げをした結果ですが)。 ちなみに、2008年の大会にはこの時期に買ったマシンで出場しました。

    GPW杯を学習バージョンで挑む(2007.11)

    例年どおりGPWに参加しました。このWorkShopはとてもお勧め。毎年なごやかな雰囲気で 発表やナイトイベント(大会)が行なわれます。この年はコンピュータ将棋 大会のほかに、5五将棋大会やコンピュータ囲碁(9路盤)の大会が同時に 行なわれ、ブレーカーが落ちるというハプニングもありました。

    初日、将棋に関する発表の中に、GPSチームの金子さんの発表 「兄弟節点の比較に基づく評価関数の調整」がありました (学習に関する鳥瞰図的な説明がとても参考になりました)。 その中で金子さんが「パラメータは100万個くらいほしい」 というようなことを話され、 私は「ほら、やっぱり!」と心の中で相槌を打っていま した(笑)。そのためには学習データも相当に 増やさなければならないことに気づいてませんでした。
    ちなみに保木さんの自動学習の方法が保木さんによって Bonanza method と 命名されたのは、この発表のときと認識しています。

    さて、ナイトイベントのGPW杯。私は学習バージョンで初参加、 Bonanza method による学習の成果が試されるときがきました。 ところが、、

    2回戦 奈良将棋 - マイムーブ

    13手目▲49玉!玉を2筋(8筋)に一目散にもっていこうとしています。 (最後はおそらくマイムーブのバグで、王手を無視して奈良将棋の 勝ちでした。ここから選手権まで、マイムーブも躍進したようです。)

    6回戦 奈良将棋 - 棚瀬さん(人間)

    13手目から連続玉の移動で、何と玉が6段目にあがる、奇怪な形に なってしまいました。これもひどい学習結果です。棚瀬さんは 対コンピュータ将棋に滅法強いですが、この将棋はそんなアンチ コンピュータ戦略も使う必要もなかったようです。 ただ、銀多伝を作れたのは「隣接する2駒」の学習の結果と思います。

    というようにこの頃はまったく学習の結果は悪いものでした。

    ところで、positional なパラメータの大きさに制約を与えるための ペナルティ w の値をどうするか保木さんに聞いてみたところ、 「本当はペナルティなんてものはないほうが良い」 「最初は小さく、じょじょに大きく」(すいません、逆だったかも) とのことでした。保木さんは酔ってましたけど、ペナルティがないほうが いいというのはきっとそうなんでしょう。

    Featureの見直し、追加(2007.11〜)

    GPW杯の頃の「玉と味方の駒」さらに敵玉の位置 (つまり3つの位置関係)をみるのは学習機会が少なくなって うまく学習できないのではと考え、今は敵玉は見ていません。 その後、今日に至るまで何度か feature を見直したり追加したりして います。

    (追加したもの)

  • 振り飛車において相手の飛車先を77(33角)と受ける形
  • 角交換将棋における5筋の歩
  • 手番(手番側の持ち駒の種類の数ごとに分けた)
  • 居飛車における飛車先の状態
  • 持ち駒の形
  • 後退できない銀
  • 歩で取られる可能性の桂馬
  • 飛車と飛車が向かいあっているときの間の駒
  • 壁形

    「玉と味方の駒」、「玉と敵の駒」、「隣接する味方の駒」、 「持ち駒の形」などが6次元や7次元の巨大な配列になっており、 これらが原因で現在でもパラメータ数が40万もあります。 学習の機会が足りないパラメータもあるはずなので、もっと 減らしたいところです。 そういえば、2008年大会でBonanza method に取り組んだ方々の パラメータの数を聞きそびれました(-_-)。今度聞きます。

    ちなみに、いくつかの値について、2008年大会版は以下のように なっていました。
    // int pieceValue[16] = {	// 駒の価値
        0,
        100,        //  歩
        304,        //  香
        350,        //  桂
        526,        //  銀
        642,        //  金
        756,        //  角
        912,        //  飛
        99999,      //  玉
        262,        //  と
        434,        //  杏
        457,        //  圭
        574,        //  全
        690,        //	<--- (YSS の金の価値から開始されたなごり)
        1020,       //  馬
        1210,       //  竜
    };
    
    // int furi33KakuValue = 13;	// 振り飛車で33角と受ける形
    
    // int kaku5SujiValue = -7;		// 角交換で5筋を突いているペナルティ
    
    // int tebanValue[8] = {
    1, 9, 15, 27, 33, 33, 23, 35, };	// 手番(インデックスは持ち駒の種類の数)
    
    // int hisakiValue =
    {
      12, // 素通し
       4, // 歩で受けている
      22, // 歩以外で受けている
      26, // 飛車先交換可能
    };
    
    飛車先を歩で受けさせている形がわずか4点しかなく、これでは玉の囲いを優先し 簡単に飛車先を交換されます。 大槻さんも飛車先を簡単に交換させてしまうと書かれています (第17回世界コンピュータ将棋選手権自戦記)。 また、ネットに公開されているBonanzaも比較的そんな傾向があるように見えます。 なぜこのようになってしまうのか、私はまだ分かっていません。 飛車先の評価に限らず、feature を追加しても予想する値に学習されない ことが時々あります、調べてみなくては。。 GPWや選手権で大槻さんと話をして、その他にも 「雁木が好き」「居飛車の49の金を動かさない」etc. 似たような 傾向があることがあることが分かりました、feature が少ないため?

    一致率などのデータはこんな感じでした。
    学習用棋譜における、指し手との一致率:37.05%
    学習用棋譜における、指し手よりも良いと判断した合法手の平均(J'):4.944
    評価用棋譜(500余)における、指し手との一致率:36.26%
    評価用棋譜(500余)における、上記 J' : 5.628

    また、進行度についてですが、 序盤で簡単に駒損する、または終盤で駒得に走るというような、 局面の進行度を見誤った手(特に後者)を指してしまうことについて、 今年は対策を入れることができませんでした。実際、選手権でも これが原因で敗着をいくつか指しているようです。 ただ「玉と味方の駒」「玉と敵の駒」において、極端に序盤の 局面とそうでない局面を2つのテーブルに分けました。 この項目に関するパラメータ数が2倍になるので嫌なのですが、 他には思いつきませんでした。進行度についてはこれからも 考えてみたいと思います。

    探索の改良(実現確率探索)

    私のプログラムは開発を始めたときから実現確率探索を使っています。 開発を始めたころが、ちょうど激指が大ブレークした年だったというのが 大きな理由です。 自動学習を走らせている間は、空いているマシンで探索の改良を行なって いました。といっても手の生成の種類や順序、カテゴリ見直しを行なって 、その時点の最新の学習結果を取り込んだうえで、連続対戦で評価する という方法です。 今、実現確率探索を使っている方の割合はどのくらいなんでしょう。。 全幅+各種pruning が全盛?

    手のカテゴリ見直し、といっても理論/方向性があるわけではないので チューニングのようなものになっていますが、勝率があがったのは 以下のようなものです。

  • 確率を考えるとき、序/中/終盤で分けることをやめた。
  • SEEで損する局面で、損のレベルを見るのではなく、 回避か放置どちらの手か「おおざっぱ」に2分することにした。
  • SEEで損する局面で、2番目のロスがあるかどうかもカテゴリに追加。
  • 当たりを避ける手でも、避けながら香車以上を取る手は、 当たりを避ける手に区分しない。
  • SEEで得するマスに、さらに当たりをかける手も当たりをかける手に 分類。
  • 駒打ち、を手のカテゴリからはずす。
  • SEE で銀得以上になる当たり、を手のカテゴリからはずす(単なる当たりと分類)。
  • 指し手の確率を 1/102 以下にはしない。 (これは、パス相当の手が消費する深さを1.0と数えたとき、 どんな悪そうな手も1.8倍よりは消費しないことに相当。 reduction しすぎはダメという棚瀬さんのお話より実験したもの。昔は 最大6.0倍も消費していた。)

    昔からSEEに基づくカテゴリが多く、しかも私の実装は 一度手を生成してから「手の性質を判定」「確率付与」とやっており、 手の性質を判定するときに必ず1手進める、1手戻す、ということを やっています。もちろんそのようにすれば手の性質がより正確に 求まりますが、1手進める、1手戻す、ことまでやって確率の精度を上げて 果たしてpayできているのか、疑わなければならないかもしれません。

    並列探索におけるバグ

    9月に行なわれたオープン戦に、4coreのマシンで初めて参加したのですが、 初戦のvs竜の卵戦で、Windows のエラーダイアログ発生。 また並列探索に関するバグが発生してしまいました。 スレッド間で変数を共有していますが、まだロックを開放してはいけない タイミングで早々と開放してしまうことによるバグ(複数変数の アトミックな更新が必要な箇所での考慮漏れ)でした。2core のときは 発生しなかったので、並列度があがるとこういうタイミングもあるのか、 と気付いたりしました。

    あと、並列探索のバグではないのですが、4月に入ってから メモリ破壊を起こしているようなバグに苦しみました。 苦しい解析の結果、最善手順列を格納するためのいわゆる三角配列に おいて、領域を超えて書き込んでいることによるものでした。 この配列の長さは昔から35としており、更新時の長さチェックは、 「まあ、これだけ長ければ大丈夫だろう」と思って行なっていなかったの ですが、マシンの高性能化と並列探索で、序盤のお互い手出しが難しい 手詰まり模様の局面では、探索の深さがまれに35を超えてしまい、 領域破壊を起こしていることが分かりました。 手抜きのコードはダメですね。

    メモリ破壊検出用のツールも購入しようかと思い、評価版を ダウンロードして検出できないか試してみたのですが、再現せず。 上記の理由であれば再現しないのも当たり前です。 (デバッグモジュールは処理が遅いので 何百倍も時間をかけない限り、そんなに深く読めない。) 結局、領域を超えて書き込みしそうな、ずぼらな実装はないか、 その観点で ASSERT を入れていったように思います。 原因が分かってからは急遽、Sankaku クラスを作成し、長さチェックは そこに追いやりました。 破壊しているエリアが変数宣言の位置関係上、 並列探索の制御用のテーブルだったので、並列探索のバグかどうか 切り分けにてこずり(並列探索をやめるとそこまで深く読めず 起きなくなったりした)、 大会も近づいていたので、一番嫌な時期でした。(-_-

    インターネットカフェでのコーディング

    (これはYSSの山下さんの影響です。) 私の場合、オープン席というのが重要なところで、 ある程度の空間(が見渡せる)、ある程度の騒音、ある程度の人の 視線(こちらから人影が見える)という環境が、コードを書くのに とてもいいように感じました。 逆にデバッグは狭く静かで一人きりでないと難しく、外でやったことは ありません。 使う頭が違うからでしょうか、不思議です。 Bonanza method の feature を追加するコードは、評価関数の差分計算でも しない限りは比較的手軽/気軽に追加できるものなので、 ネットカフェで feature 追加することも多かったです。

    選手権

    4/30頃、ドーピング

    負ける棋譜を見ると、敵陣の隅に金銀を打って桂馬/香車を取りに行く手が 時々でることが分かりました。強い相手にこの手が出てしまうと まったく戦いどころがなくなってしまいます。結局、これは 「敵陣1段目、2段目の金、銀、成銀を一律マイナス50」 することにしました。これでこの悪手はかなり抑止されました。

    また、飛車先の交換ですが、これもドーピングで対応することに。。

    // int hisakiValue =
    {
      12+30, // 素通し
       4+30, // 歩で受けている
      22+30, // 歩以外で受けている
      26,    // 飛車先交換可能
    };
    

    5/3, 2次予選前夜の定跡選択

    KFEndさんが出場を辞退されたことによって、初戦の相手がきのあ将棋 になることが分かりました。きのあ将棋には過去選手権で0勝3敗、 コンピュータ将棋なので苦手意識があるはずはないのですが、鬼門です。 (初戦だけそんなに力を入れてもしょうがないですが)

    先手番なら居飛車指向でいいや。 後手番になったときに振り飛車、ごきげん中飛車、も考えましたが、 桂馬を早く跳ねたがる棋風から想像すると、 どちらも指しこなすのが難しそう。 近年の棋譜の傾向から、後手番では1手損角換わりになります。 色々考えた挙句、特に策は凝らしませんでした。 ただ、先手番の相矢倉の出だしでは5手目、▲66歩ではなく、 ▲77銀とするようにしました(雁木に誘惑されないように)。

    2次予選

    2次予選 1回戦 きのあ将棋 - 奈良将棋(後手1手損角換わり)
    緊張の1戦目。きのあさんは昨日ホテルに泊まっているのに なかなか現れない。少し遅れて会場入り。現れたのはDELLの8coreのマシン でした。
    戦形は後手1手損角換わり。先手が銀冠に組もうとするのは良かった のですが、すぐに▲86歩と打たなかったため、▽86歩から▽87角と 打ち込まれ、後手が良くなり、そのまま押し切りました。鬼門クリア。
    なお、その後2次予選、決勝合わせて (先手番を持つのも含めると)16局中8局、なんと半分が 後手1手損角換わりになるのでした。これまで居飛車党のプログラムが 後手ではウソ矢倉を指すことが多かった気がしますが、 プロの後手1手損角換わりの流行によって、選手権での戦法選択の幅が 広がったと言えると思います。

    ×2次予選 2回戦 奈良将棋 - 備後将棋(相矢倉)
    備後将棋はBonanzaととに決勝進出の最有力候補。私の印象では腰の重い、 受けにまわって強い棋風、です。
    矢倉46銀37桂を組んだのに攻めていかず、6筋で戦うのはかなり損です。 80手目、▽86飛と飛車をスパッと捨てて決めにきました。 ただ先手も93手目▲53飛を詰めろで打って、後手に▽42金と使わせ、 そこで後手の角を取れたのでここからがねじり合い。 以下、緊迫した手順が続きましたが 133手目の▲52馬が敗着となりました。備後さんの予測読みにも出ていた ようですがここは▲32歩(詰めろ)が良かったようです。 ▲32歩に対して▽46と、の詰めろ逃れなら▲31馬、▽33玉、▲46角と 再び詰めろをかけ、これが自玉を安全にしつつ詰めろをかける一石二鳥の 手となります。

    2次予選 3回戦 大槻将棋 - 奈良将棋(後手1手損角換わり)
    GPWで全勝優勝し、この大会前には2chでも話題になっていた大槻将棋です。 昨年大会でもBonanza methodを使っておりましたので、今年はそれが 安定感を増していることが予想されます。
    後手1手損角換わり。大槻将棋は序盤17手目▲58金左と逆の金を あがってしまいます。このあたりで大槻さんの席にいってみると、 「相居飛車ならあまり影響ないですよ、(陣形全体が囲いなので) 最後には49あたりの駒も働きます。」というようなことを 言っておられました。確かに角換わりなら角の打ち込みを消している 働きがあります。 先手は4筋の位を生かし、快調に攻めていきました。83手目の▲22銀も ちょっと重いように見えますが、以下、92手目までほぼ必然のように 進み、ここでは先手の勝ちのようです。
    次、93手目の▲53香が香車を渡すと先手玉が詰めろになること を見落とした痛恨の1手。大槻将棋は同金の局面で自玉の頓死に 気付いたようですが、思わしい予定変更はできず、以下、奈良将棋の 勝ちとなりました。 戻って▲53香のところでは駒を渡さない▲64桂の詰めろなら後手の 勝ちだったようです。
    とはいえ▲53香、▽同金、▲同角成の局面も 先手玉の詰みは非常に難解で、東大将棋8の詰み問い合わせで39手詰め。 もしそのように進んでいたとしたら私の負けでした。 というのも私の詰将棋ルーチン(pnで実装)では、 詰ますために60万ノード必要であり、かつルートでは30万ノードしか 呼び出していないからです。 また、通常探索させると、王手ラッシュが67歩成から始まり、 「運良く67銀から進んで、その後、必要ノード数が減って 詰みを見つける」ということも起こりません。幸運な一勝でした。

    (追伸)詰めルーチンを持たないといわれるBonanza ver2.1 にかけて みると、なんと▲52香と打って、▽61玉には▲64桂で勝ちきるようです。 また、▽67銀は負けと評価しつつも指し、▽79銀〜▽78金〜▽46角から 勝ちきります。詰めルーチンはないほうがいい?

    ×2次予選 4回戦 奈良将棋 - K-Shogi(先手銀冠vs後手四間穴熊)
    昨年決勝に進んでいるK-Shogi。ネットに公開されている版もとても強く、 私の印象は軽快な攻め将棋。
    42手目▽74金はどうでしょう、この金はちょっと使いづらくみえ、 二枚の穴熊が薄いのでいつかチャンスがあると思っていました。 その後、華々しく駒交換が行なわれましたが、87手目▲22歩のあたりは 先手陣の角と銀が2枚の飛車の攻撃目標になりそうで、ここは 先手が悪そうです。 ただ、93手目あたりで、先手の角と後手の飛車を刺し違え、 穴熊が薄いのでこれは逆に先手が良くなったと思っていました。 問題の1手は101手目の▲33飛成。ここで香車を取りに行くのは飛車が 3段目で働かない形になることもあって大緩手になってしまいました。 ここは当然ながら▲71飛成(、▽同角、▲72銀)と飛車を切って行けば、 絶好の▲54馬引の応援もあるので、先手が良かったと思います。 ちなみに東大将棋8は▲41飛成。Bonanza ver2.1 も▲61飛成。 人間の感覚だと▲71飛成は第1感(切ってから考える!)ですが、 後手からの攻防手▽59飛、それが▽89飛打の 王手を可能にしますので、コンピュータ的には難しい手なのかも しれません。

    2次予選 5回戦 奈良将棋 - みさき(相横歩取り)
    いつも小宮日記を 楽しく読ませてもらっています。絵を使ったコメントが絶品です。
    山田さんの大盤解説にもあったように、相横歩取りは1手1手が 非常に難しい将棋。飛車角総交換しているので、神経を使います。 最初に悪手を指したのは奈良将棋、43手目の▲84飛。1歩をとるため だけに飛車を手放すのでは割りに合わない。しかしそれに対する ▽73金が悪手のお返しで、角切りから飛車成りが実現して先手が 良くなりました。

    みさきは、今年は並列探索が間に合わなかったとのことでした。 3年連続で順位を上げてきており、 大会後もブログをみると、さらなる情熱を蓄えられたようですので、 来年は決勝進出を狙ってくるのでしょう。

    2次予選 6回戦 SPEAR - 奈良将棋(先手中飛車vs後手居飛穴)
    昨年はBitboardによる高速化で順位を上げられてきたSPEAR。 過去の選手権では私の0勝2敗です。
    将棋は先手SPEARの中飛車。40手目▽64角が、先手玉のこびんが開いている のを狙った動きであり、美濃囲いの銀を37に上がらせて、少しポイントを あげました。 その後、あまり悪い手も指してないと思いますが、75手目▲61角、 ▽42金打あたりの局面はライエルさんの見解どおり、 先手が少し良いかもしれません。 ただし次の▲83角成が悪かったと思います。ここは後手の馬を 働かせないように▲88歩が良さそう。▲55桂も可能になってきます。 ▽66馬と引けてからは、と金も間に合わせ、穴熊の固さを生かして 寄せきることができました。

    パーティの席で、「すでにあるアイデアを 少し改良して強くしても研究としては意味がない。Bonanza method は 使わない」という、研究者の立場を貫くライエルさんのスピーチが 印象的でした。

    2次予選 7回戦 柿木将棋 - 奈良将棋(後手1手損角換わり)
    ここ数年は隔年で決勝に進まれている柿木将棋。 選手権も第1回目から連続18回目の出場で、コンピュータ将棋会への 貢献もとても大きい方です。 今年は学習バージョンで参加されてきました。
    勝又先生の大盤解説にもありましたが、55手目の▲36飛は、敵の金銀に 近づくので悪い形とのことでした。 その後、53の銀に狙いをつけて、先手は7筋から動き、それを受けたら 今度は65の桂を取りに来ます。 75手目の▲46同銀では、指しづらいですが、▲38銀でしょうか。 それであれば桂馬を取りきられ、圧敗だったかもしれません。 本譜は98手目で桂馬が57に成ることができましたので、 後手がよくなりました。先手66歩と突いてから30手以上経過して いました。 改めてみると、後手の14歩が突いてあるのがむちゃくちゃ大きかった ようです。

    柿木将棋に勝てたことで5勝2敗。ようやく決勝進出に絡んできました。

    ×2次予選 8回戦 竜の卵 - 奈良将棋(後手1手損角換わり)
    3年連続決勝に進出している強豪、竜の卵。 過去の対戦成績は0勝2敗です。 備後将棋と同じように(それ以上?)非常に腰の重い棋風と 思っています。
    まったくいいところなくコテンパンにやられました。 序盤で早々と跳ねた▽73桂が、受ける展開では飛車の横利きを消して 非常に悪い形になってしまいました。 63銀より73桂と先に跳ねてしまう、駒組みの手順の悪さが 今回、後手1手損角換わりに進んだ、私の将棋のほとんどすべてで 表れています。これを認識させるのはすぐにはアイデアが浮かびません。 人間同士の対局なら、「後手は一瞬悪形、機敏に仕掛ける」 という大局観で指すのでしょうか。。

    竜の卵は今回は引き分け2つが痛かったようです。

    2次予選 9回戦 奈良将棋 - 習甦(後手1手損角換わり、先手筋違い角)
    いよいよ最終戦、勝ったほうが決勝進出の大一番を迎えました。 とはいってもソルコフの計算を暗算でするのは無理で、多分勝ったほうが 上がるのだろう、くらいにしか分かりませんでした。 習甦は初参加で1次予選を全勝通過、2次予選もここまで残ってきました。 もし初出場で決勝に進むと、過去の備後将棋、Bonanzaに続く快挙と なります。
    将棋は、習甦の後手1手損角換わり。端歩を1回、2回と突いているのは プロの指し手なのでしょうか?それとも習甦さんの変化球でしょうか? 奈良将棋は11手目、▲45角と筋違い角を打ちました。 人間同士なら「大一番に決断の1手」ということになりますが、 コンピュータ将棋の場合は、大それた決断はなく、単に良い手と 思ったから打っています。 13手目、▲34角と取ったとき事件がおきました。1分、2分、何分待っても 習甦さんは手を返してきません。それどころか、作者が画面を見た感じでは 完全に思考が止まっているとのことでした。 それでも残り約20数分は習甦さんの持ち時間なので、私はひたすら 待っていました。PCがダウンしないことだけを祈って。 そう、ルールではサーバとの接続が切れるようなことがあると 即負けなのです。 ちなみに私のPCの画面には割りと早く、

    <<<<<<予測探索、終了
    
    と出ていました。相手の手が返ってくるまでずっと考えて良いわけですが、 思考が深くなりすぎて良からぬことが起きないよう、適当なところで 打ち切っています(小心者ですね)。

    これで、最後の1戦はツキにも恵まれましたが、 7年目にしてようやく決勝戦に進むことができました。 うさぴょんの池さんには「おめでとう、明日全敗しないように!」と ハッパをかけられました。 習甦は1年目でこんなに強いのですから、来年以降が楽しみ(私には脅威) です。

    5/4夜, 決勝戦に向けて

    何もしませんでした。 2次予選で対戦のあった柿木将棋、備後将棋、大槻将棋、との対戦では 序盤が同じ進行になってしまう可能性も考えられましたが、 先後が入れ替わるかもしれないし、相手が定跡を変えてくる可能性も ありましたので。

    決勝戦

    ×決勝 1回戦 奈良将棋 - 棚瀬将棋(先手居飛穴vs後手四間飛車)
    雲の上のような人たちとの対戦、1戦目は棚瀬将棋です。 棚瀬さんは昨年の大会でもすでに Bonanza method を取り入れて、 しかも準優勝という好成績を収めています。 コンピュータ将棋全般の理解はIS将棋時代から蓄積されたものが おそらく相当に活かされていると想像します。 今大会も初日から色々参考になる話(主に学習)を聞かせてもらいました。 feature が100〜200個もあるとのことで、驚きました。 矢倉のような、駒組が重要な戦形であれば確かにたくさんの feature が 必要そうな感じがします。

    将棋は先手居飛穴から、39手目、「狙い筋としてはあるがなかなか 実戦では実現しない」▲15角が実現しました。 もちろん後手も読みが入っているので、すぐ形勢がどうこうという ことではありません。
    先後とも動かす駒が難しい局面になりましたが、 ▲37桂は危険な手だったでしょうか、桂頭の弱点をつかれてしまいました。 ただ、その後、▲26角と打つところでは、▲23歩、▽同飛、▲41角、 とでも指せば、まだ難しいようです。以下は見所もなく 寄せられました。
    棚瀬将棋は昨年、今大会、エキシビジョンの将棋の内容から 最強ではないか、とのうわさがあります、私もそんな感じがしています。 以前、24でR3000を目指すと言っておられましたが、もう間近では ないでしょうか。

    ×決勝 2回戦 奈良将棋 - Bonanza(先手居飛穴vs後手四間飛車)
    Bonanza method の本家、Bonanza との対戦です。 保木さんは昨年からは feature を見直したと言っておりました。
    将棋は再び居飛穴 vs 四間飛車。 54手目、▽79角成、と角と金を刺し違えられましたが、先手も61手目▲77金 のところでは、▲77馬、または▲66馬と引ければ、すぐには寄らない形 です。 しかし実戦はそう指せず、63手目に▲21馬としてしまいました。 ▲55馬から▲74桂を狙って、気持ちは分からなくはありませんが、 そのように寄せ合いに行かず馬を引き付けて長い戦いにすれば チャンスはあったかもしれません。

    ×決勝 3回戦 激指 - 奈良将棋(後手1手損角換わり)
    「コンピュータ将棋は探索」という信念を持っているような激指との1戦。 感触的に悪そうなのは34手目の▽46角、38手目の▽44銀、ですが、 私の棋力ではどう指せば良いか分かりません。 終わったあと鶴岡さんに「序盤でもう少し時間を使われてはどうですか」 とアドバイスいただきました。 確かに。今調べてみると、決勝戦での奈良将棋の平均消費時間は11分31秒 でした。弱い上にCPUパワーも使わないようでは一方的になります。

    ×決勝 4回戦 YSS - 奈良将棋(後手1手損角換わり)
    「コンピュータ将棋の進歩」でたくさんの有用な情報を提供している YSS(山下さん)。ちなみに奈良将棋は今年、YSS をまねてパニックタイム の実装を行なってきました。
    これもまた後手1手損角換わり。28手目の▽44角がどうだったか。 大盤解説にもありましたが、こういう手はちょっと得(1歩得)は できても駒の後押しがないため、その後で押し込まれてしまうとのこと。 また観戦くださったTACOSの橋本さんも「後手から9筋が伸びていないので 手を作るのが難しい」とのことでした。 72手目、▽86歩と叩いたあたりはまだまだか?と思いましたが、 今見ると、やはり上が広いので全然ダメなようです。

    ×決勝 5回戦 奈良将棋 - 備後将棋(後手1手損角換わり)
    2次予選では相矢倉でしたが、決勝戦は、備後さんが角換わりを志向 するようにしたとのことで後手1手損角換わりとなりました。 43手目に55銀と打ったため、飛車と角の交換になりましたが、 その後の後手の▽51金が好手で後手陣には飛車の打ち込みがなく、 一方、先手陣は桂頭と、後手の角、銀、歩、という豊富な駒で 攻められ、どんどん差が開いてしまいました。

    決勝 6回戦 柿木将棋 - 奈良将棋(相矢倉)
    ここまで両者全敗、どちらが1勝できるか、の1戦となりました。 ただ決勝戦に常連の柿木さんのほうがプレッシャーは 大きかったのかも。
    54手目、角金交換となったあたりは、後手悪いのではと思います。 先手は単純に17香と桂馬を取らずに57銀だったため、55桂から 微妙に絡み始めました。68手目の47金が当然ながら金を働かせる いい手で、以下、後手の食いつきを振り切るのは容易ではなくなりました。
    以下、手数は長くなりましたが、決勝で貴重な一勝をあげることが できました。

    ×決勝 7回戦 奈良将棋 - 大槻将棋(先手四間穴熊vs後手左美濃)
    決勝戦の敗戦でもっとも悔しいのがこの大槻将棋戦です。 大槻将棋の振り穴に対して、天守閣美濃。 振り穴は3筋から攻めていったのですが、なぜか35の地点で駒交換せず、 歩もたくさん捨てたため、65桂を取れたとはいえ、 66手目あたりは桂馬と4歩の交換になっています。 これは後手が良いはずです。さらに73手目あたりを見ると、3,4筋の歩が 伸びて、と金の種になっており、「これは相当にいいだろう」と思って 見ておりました。しかし、74手目の▽56歩がTACOSの橋本さんいわく、 危険な手。変わる手が難しく、今、東大将棋8にかけてみると、 やはり56歩から82手目の47歩成まで進み、一瞬後手勝勢とでますが、 本譜同様▲35桂を見つけて徐々に評価が下がっていきます。
    ▽56歩に変わる手を見つけられる、あるいは▽56歩と指し手も 勝ち切れるようまた、改良を加えていきたいと思います。

    大会が終わって

    今年は学習(Bonanza method)がかなり広く浸透した年だったと思います。 決勝の8チーム中、5チームが学習を使っています。 来年はもっと学習を使う人が増えるのでしょう。しかも短期間に 強いプログラムを作ってくることも予想されます。

    私のプログラムは今年初めて私自身の棋力を超えたようで、 つまり自分でも鑑賞に耐える棋譜を残せるようになってきましたが、 こうして選手権の棋譜を並べてみるとまだまだ悪い手が 見つかりますので、それがまだ開発の動機になりそうです。