こんにちは。株式会社ACCESS Webプラットフォーム事業本部開発部5課の竹内です。普段はNFBE標準版の開発を担当していますが、趣味で将棋AIの開発にも取り組んでいます。2026年5月3日から5日に開催された第36回世界コンピュータ将棋選手権(WCSC36)では、自作将棋AI「ponkotsu」が初めて決勝に進出し、最終的に5位に入賞することができました。

The 36th World Computer Shogi Championship
画像出典:https://drhoshiken.com/wcsc/36/

今回の結果を支えた要素はいくつかありますが、本記事ではそのうち、コンピュータ将棋における定跡生成に焦点を当て、ponkotsuで試した手法と、大会でどのように活用したかを紹介します。将棋AIに詳しくない方にも読んでいただけるよう、まずはコンピュータ将棋における定跡の役割から説明し、その後に今回の提案手法、実験結果、大会での運用について紹介します。

コンピュータ将棋における定跡とは

コンピュータ将棋における定跡とは、序盤から中盤にかけての局面について、事前に計算した指し手や評価値を蓄積したものです。対局中はその蓄積結果を参照し、登録済みの局面であれば探索を行わずに、あらかじめ用意した手を指します。

なぜ定跡が重要なのか

人間の将棋でも、序盤の定跡を知っているかどうかは非常に重要です。コンピュータ将棋でも同様で、事前に深く読んでおいた局面に相手を誘導できれば、対局中の探索時間を大きく節約できます。特に、世界コンピュータ将棋選手権で使われているフィッシャールールでは、1手指すごとに一定秒数が加算されます。そのため、定跡によって序盤はほとんど時間を使わずに進めることができると、持ち時間を減らさないどころか、むしろ増やしながら中盤以降に入ることができます。

また、相手が定跡に乗っていない局面で考え続けている一方、自分は定跡で即指しする展開にできれば、相手の持ち時間だけを一方的に削ることもできます。将棋AIの対局では、十分な思考時間を確保できるかどうかが終盤までの安定性に大きく影響するため、定跡は単なる序盤対策ではなく、対局全体の時間配分を左右する重要な要素になります。

そのような事情もあり、現在のコンピュータ将棋では高品質な定跡はほぼ必須といえます。実際、近年の大会では、定跡だけでほとんど勝負が決まってしまう例も見られます。第35回世界コンピュータ将棋選手権では、dlshogi with HEROZ 対 nshogiの一局において、定跡の範囲内で詰みまで到達し、消費時間0秒で勝利するという事例がありました。これは極端な例ですが、定跡の品質と網羅性が勝敗に直結することを示しています。

dlshogi with HEROZが定跡の範囲内で詰みまで到達し、消費時間0秒で勝利するという事例の棋譜
第35回世界コンピュータ将棋選手権の2025/5/4のdlshogi with HEROZ 対 nshogiの対局の棋譜

一方で、定跡の作成は簡単ではありません。将棋の合法手は局面によって多数存在し、候補手を広げすぎると局面数が爆発的に増えます。限られた計算資源の中で、どの局面を優先して深掘りするかを決める必要があります。

一般的な定跡生成の流れ

コンピュータ将棋における定跡生成は、おおまかには次のような流れで行われます。

  1. 既存の棋譜や探索結果から定跡ツリーを作成する

  2. 定跡ツリー上でMini-Max探索を行い、各局面の評価値を末端局面の評価値で置き換える

  3. 更新された評価値をもとに、末端局面の中から次に探索する局面を選び、定跡ツリーに反映する

  4. 2〜3を繰り返す

Mini-Max探索を行い各局面の評価値を更新
2. 定跡ツリー上でMini-Max探索を行い、各局面の評価値を末端局面の評価値で置き換える
候補手数4~8で末端局面を選択
3. 更新された評価値をもとに、末端局面の中から次に探索する局面を候補手数4~8で選択

定跡ツリーは、局面をノード、指し手をエッジとする木構造として考えることができます。末端局面には、将棋AIによる探索結果にもとづく評価値が付与されます。Mini-Max探索では、この末端局面の評価値をツリー全体に伝播させ、途中の局面についても「その先を最善に進めた場合にどの程度有利か」を評価します。

定跡生成では、この評価値をもとに深掘りすべき末端局面を選びます。選ばれた局面を将棋AIで探索し、得られた候補手や評価値を定跡ツリーに反映したうえで、再びMini-Max探索を行います。この処理を繰り返すことで、定跡を少しずつ拡張していきます。

定跡生成における難しさ

定跡生成には大きく2つの難しさがあります。

1つ目は、探索局面の選び方です。どの局面を深く調べるべきかについて、明確なベストプラクティスは確立されていません。定跡としてよく出現しそうな局面、評価値が不安定な局面、相手に誘導されやすい局面など、優先すべき観点は複数あります。

2つ目は、候補手数の設定です。候補手数が少なすぎると、実戦で定跡がヒットしにくくなります。一方で、候補手数を増やしすぎると局面数が急増し、生成に必要な計算時間が大きくなります。

たとえば候補手数を4にしただけでも、10手目で100万局面、20手目で1兆局面規模まで増えてしまいます。定跡を広くすればヒット率は上がりますが、計算時間と必要ストレージが増えます。逆に、深く絞り込みすぎると、実戦ではすぐに定跡から外れてしまいます。つまり、定跡生成では「どの局面を優先して探索するか」と「候補手数をどの程度にするか」のバランスが非常に重要になります。

「ponkotsu」の課題と新手法の提案

ponkotsuにおける課題

ponkotsuは、もともとモデルの改良を中心に開発していたため、定跡作成は十分に取り組めていませんでした。WCSC35に向けて2か月ほど定跡作成を試みましたが、品質は十分とはいえず、実戦では2回戦以降、定跡を使わずに戦うことを余儀なくされました。

その結果、相手の定跡に乗せられて不利な局面へ誘導されるケースがありました。たとえばphonanzaとの対局では、ponkotsu側は定跡を持っておらず、相手の準備した進行に入ってしまい、そこから逆転するのが非常に難しい局面になりました。この経験から、単に強い評価関数を作るだけでは不十分で、評価関数の強さを活かすためにも、実戦で機能する定跡を整備する必要があると考えました。

ponkotsuで取り入れた定跡探索の新手法

ここからは、ponkotsuに取り入れ、将棋AI世界5位達成の要因の一つとなった定跡生成の新手法について紹介します。

提案手法の考え方はシンプルです。定跡ツリーの中には、すでに十分に候補手が登録されている局面もあれば、候補手が少なく、実戦ではすぐに定跡を外れてしまいそうな局面もあります。そこで、候補手数が少ない局面を起点に、次にどの局面を深掘りすべきかをPV-MCTSで選定します。

具体的には、候補手数が4未満の局面に到達するまで、先手・後手ともにbestmove(最善手)をたどります。bestmoveをたどることで、現時点の定跡ツリーが「最善」と考えている本線を進みます。その途中で、候補手が十分に広がっていない局面に到達したら、そこを起点としてPolicy Value Monte Carlo Tree Search(PV-MCTS)を実行します。

PV-MCTSの実行
到達した局面からプレイアウト数20万でPV-MCTSを実行

PV-MCTSでは、DL系モデルが出力するPolicyとValueを利用します。Policyは「次にどの手が有力そうか」、Valueは「その局面がどの程度よさそうか」を表します。これにより、単にランダムに末端局面を選ぶのではなく、モデルが有望と見ている進行を確率的にたどりながら、重要そうな未探索局面を見つけることができます。

今回の手法では、候補手数が4未満の局面を起点に、20万プレイアウトのPV-MCTSを実行します。ここでいうプレイアウトとは、ある局面から先の展開を仮に進めてみる処理です。

PV-MCTSの中で、定跡未登録の局面、または末端局面に到達した場合、その局面を「次に探索すべき局面の候補」として記録します。このとき、その局面に何回到達したかもあわせて数えます。

到達回数を記録
定跡未登録or末端局面に到達したら探索局面の候補とし、到達回数を記録

20万プレイアウトが終わったら、到達回数の多い上位1000局面を選びます。そして、それらの局面を次の探索対象として扱い、候補手数1で探索して定跡ツリーに追加します。この処理を繰り返すことで、定跡ツリーを少しずつ拡張していきます。

到達回数上位を探索局面として追加
20万プレイアウト終了後到達回数上位1000局面を探索局面として追加

なお、PV-MCTSの起点となる局面は、bestmoveをたどって到達した局面だけでなく、既存の定跡生成手法で得られた局面も一部利用しました。これにより、本線に近い進行だけでなく、相手の応手によって生じる別の有力な進行も探索対象に含めています。

この方法の狙いは、すべての末端局面を均等に調べるのではなく、実戦で到達しやすそうな局面や、DL系モデルが重要と判断しやすい局面を優先して掘ることです。局面によっては候補手を4手程度見れば十分な場合もありますが、別の局面ではもっと広く候補手を調べないと、実戦ですぐに定跡を外れてしまうかもしれません。

PV-MCTSを使うことで、こうした局面ごとの重要度の違いを、DL系モデルのPolicyとValueを通じてある程度反映できます。モデルが何度も訪問する局面は、それだけ実戦上重要である可能性が高いと考え、そこを優先的に探索するわけです。

なお、ベースとなる定跡はfloodgateの棋譜から作成しました。まず今回の手法で約200万局面を生成し、その後、やねうら王fanboxで配布されている新ペタショック定跡、約1027万局面とマージしました。マージ後の定跡は約1200万局面となり、そこからさらに生成を進め、最終的に約1230万局面の定跡を構築しました。

このように今回の定跡は、完全に一から作ったものではありません。自作の生成手法で得た定跡と、既存の大規模定跡を組み合わせることで、ponkotsuとして必要な局面を深掘りしつつ、全体としての網羅性も確保する方針を取りました。

手法の有効性の検証

手法の有効性を確認するため、コンピュータ将棋ソフト同士を自動で対局させるための公開対局サーバであるfloodgateで対局させて定跡の効果を検証しました。使用したAIはponkotsu WCSC35版で、主な環境は以下です。

  • GPU:NVIDIA GeForce GTX 1660 Ti

  • CPU:AMD Ryzen 7 2700X

ponkotsu WCSC35版の定跡未搭載時のレーティングは3931です。定跡は生成結果が更新されるたびにアップデートし、実戦でどのような効果が出るかを確認しました。なお、この検証の段階ではやねうら王の新ペタショック定跡とのマージは行わず、上述した方法で生成した定跡のみを用いています。

格上相手を有利な局面へ誘導できた例

レーティング4200程度の格上相手に対し、定跡によって有利な局面まで誘導できた対局がありました。

この対局では、50手目で相手の定跡を抜けた時点で相手側の評価値が-17、85手目でponkotsuの定跡を抜けた時点でponkotsu側の評価値が+165でした。定跡を抜けた後はponderが効き、相手の時間だけを大きく削る展開になりました。

最終的な消費時間は、先手が3分7秒、後手が12分37秒でした。定跡によって有利な局面に誘導しつつ、時間面でも優位を作るという、DL系将棋AIにとって理想的な展開になりました。

評価値の誤りが見つかった例

一方で、定跡上の評価値が誤っていた例もありました。

ある対局では、36手目で相手の定跡を抜け、65手目でponkotsuの定跡を抜けました。定跡上はponkotsu有利と判断していましたが、実際には後手に負けてしまいました。後から探索し直したところ、その局面はponkotsu不利に修正されました。

これは、定跡生成において評価値の信頼性が重要であることを示しています。到達しやすい局面を選べても、そこに付与された評価値が間違っていれば、実戦では逆に不利な進行へ誘導してしまう可能性があります。

未整備の戦型で課題が出た例

対振り飛車定跡が十分に整備されていないことによる課題も見られました。

ある対局では、11手目でponkotsuの定跡を抜け、38手目で相手の定跡を抜けました。定跡を抜けた後はponkotsuが一方的に時間を使わされる展開になり、評価値も徐々に互角へ戻り、最終的には逆転されてしまいました。

定跡は深さだけでなく、戦型ごとの網羅性も重要です。特定の戦型だけを深く掘っても、実戦で別の戦型に誘導された場合には効果を発揮できません。

レーティングへの影響

最終的に、定跡を搭載したponkotsuのレーティングは4008になりました。定跡なしのバージョンが3931だったため、単純比較では+77の向上です。

ただし、定跡なしのバージョンをfloodgateに流した時期と、定跡搭載版を流した時期には約4か月のブランクがあります。そのため、環境差や対局相手の変化を考えると、この数値だけで定跡の効果を厳密に評価することはできません。それでも、実戦で有利な局面に誘導できた例が複数確認できたことから、一定の効果はあったと考えています。

世界コンピュータ将棋選手権での実践

今年の世界コンピュータ将棋選手権には、過去最多タイとなる55チームが参加しました。大会は一次予選、二次予選、決勝の3段階で行われます。ponkotsuは二次予選から参加し、上位8チームが進める決勝への進出を目指しました。

二次予選までに行ったこと

大会に向けて、今回の提案手法で約200万局面を生成しました。さらに、新ペタショック定跡1000万局面超とマージし、より広く、より深く局面を網羅できるようにしました。マージ後も定跡生成を続け、最終的には約1230万局面規模の定跡を構築しました。

また、一次予選の前日にはvast.aiでRTX 5090を16台確保し、CPU 384スレッドを使ってひたすら定跡生成を行いました。一次予選を勝ち上がったソフト同士の棋譜も取り込み、二次予選に向けた対策として活用しました。

対戦相手の負け棋譜を取り込む

二次予選では、対戦相手が過去に負けた棋譜を定跡に取り込む運用も行いました。

具体的には、対戦相手が以前負けた進行に入った場合、そのとき勝った側と同じ手を返すように定跡を書き換えます。実際に、前日の氷彗 対 芽生将棋の棋譜をそのまま取り込んだところ、ponkotsu 対 芽生将棋の対局で詰みまで全く同じ進行になり、消費時間2秒で勝利することができました。

ponkotsu 対 芽生将棋の棋譜
第36回世界コンピュータ将棋選手権の2026/5/4のponkotsu 対 芽生将棋の対局の棋譜

このような運用は、定跡が単なる事前計算結果ではなく、大会中に更新し続ける実戦的な対策データでもあることを示しています。

決勝での運用

決勝では、決勝に進んだソフト同士の棋譜から定跡生成を行いました。また、自分が負けた対局については、終了後すぐに対策を取り込みました。次に当たる相手が負けた棋譜も定跡に取り込み、少しでも有利な進行に入れるよう調整しました。一方で、後手番対策は非常に難しく、十分な改善には至りませんでした。今回の結果も、先手番では強く戦えた一方、後手番では苦しい結果になっています。

選手権の結果

最終結果は以下の通りです。

二次予選

6勝3敗、7位

  • 先手:4戦全勝

  • 後手:2勝3敗(時間切れ勝ちを含む)

決勝

3勝4敗、5位

  • 先手:3戦全勝

  • 後手:4戦全敗

大会を通じて、昨年・一昨年の優勝ソフト相手に勝利することができました。特に先手番では、二次予選と決勝を合わせて7戦全勝でした。一方で、後手番は合計9局で2勝7敗でした。定跡生成によって先手番の強さを大きく引き出せた一方、後手番の対策にはまだ大きな課題が残りました。

まとめ

本記事では、自作将棋AI「ponkotsu」で取り組んだ定跡生成手法について紹介しました。

今回のポイントは、DL系モデルを活用して、定跡ツリーの中で次に探索すべき局面を選定したことです。候補手数が少ない局面を起点にPV-MCTSを行い、定跡未登録または末端局面への到達回数を記録することで、実戦で重要になりそうな局面を優先的に探索できるようにしました。

また、生成した定跡を単独で使うのではなく、新ペタショック定跡とマージし、最終的に約1230万局面の定跡を構築しました。さらに、大会中にも対戦相手の棋譜を取り込み、実戦的な対策データとして定跡を更新し続けました。その結果、ponkotsuは第36回世界コンピュータ将棋選手権で初の決勝進出を果たし、最終5位に入賞しました。特に先手番では、二次予選と決勝を合わせて7戦全勝という結果を残すことができました。

一方で、後手番では苦しい結果となり、後手番の定跡整備や、評価値の信頼性向上にはまだ課題が残っています。今回の取り組みを通じて、将棋AIにおける定跡は、単なる序盤の手順集ではなく、評価関数、探索、時間管理、大会中の運用を含めた総合的なシステムであることを改めて実感しました。