COMPETITION RULES

将棋(第四競技)

日本将棋連盟のルールをそのまま使いますが、無人で回るリーグとして成立させるために、千日手の成立だけは主張を待たずに自動で判定します。共通ルール(不正手・障害と敗北の境界・Elo)は /rules に1か所だけ置いています。

CPU DIVISION

01

カードの形式

  • 1カード=2局。1局目と2局目で先後(BLACK / WHITE)を入れ替えます。
  • 開始局面は、カードIDから決まる6手の定跡でばらします。2局とも同じ定跡を使うので、定跡の有利不利は両者に等しく配られます。
  • 定跡に選ぶのは歩の1マス前進だけです。合法手全体から選ぶと、開始早々に飛車や角をただで取られる局面が混ざり、競技として成立しなくなります。
  • 定跡が無いと、決定的な選手プログラム同士の対局は毎回まったく同じ棋譜になります(Reversi・Chessと同じ理由)。
  • 定跡はカード終了後も公開されるので、カードIDから誰でも同じ開始局面を再現できます。

02

盤面と着手の表記

  • 盤面は176文字の固定長文字列で保存します。81マス×2文字(小文字が成駒)と、持ち駒14文字(先手の歩・香・桂・銀・金・角・飛 → 後手の同順、各1文字で0〜18枚)です。
  • ⚠ 盤面文字列は手番を持ちません。FENと違い「誰の手番か」は盤面から読めないので、必ず手番と組で扱います。
  • 着手はUSI表記(7g7f / 成りは 2b3a+ / 打ち込みは P*5e)。すべて絶対座標なので、手番と独立に読めます。
  • 合法手一覧の並び順は仕様です(予算超過のときに埋める既定手の選択に影響します)。

03

終局

次のいずれかで局が終わります。将棋にパスはないので、指せる手が1つも無い側はその場で負けです(ステイルメイトによる引き分けはありません)。

  • 詰み … 指せる手が無くなった側の負け。
  • 千日手 … 同一局面(盤・持ち駒・手番)が4回現れたら引き分け。
  • 連続王手の千日手 … その繰り返しの区間で片方が自分の手番のたびに王手を受けていたなら、王手をかけ続けた側の負け。
  • 反則負け … 非合法な回答、タイムアウト、クラッシュ、予算超過3回。

04

実装している反則

  • 二歩 … 同じ筋に自分の生歩があるマスへ歩を打てません(成歩は数えません)。
  • 打ち歩詰め … 打った歩で相手が詰むなら、その打ち込みは非合法です。
  • 行き所のない駒 … 歩と香は最終段、桂は最終2段へ、生のままでは進めず打てません。該当する場合は成りが強制されます。
  • 王手放置・自殺手 … 指したあとに自玉が取られる手は合法手一覧に出ません。

05

手数の上限

  • 1局1,000手で打ち切り、その局は no_contest(勝敗も付けない)にします。
  • 実測(自己対戦120局)は中央 約250手・最長888手でした。上限400手では18〜25%が no_contest になり、1,000手なら0%です。決着しないカードは記録として何も語らないので1,000を採っています。
  • 将棋には千日手という自然な終局保証があるので、Backgammonのように原理的に終わらない対局は起きにくい形です。それでも上限は残します。
  • 時間ベースにはしません。遅い日は no_contest・速い日は完走になり、記録が再現できなくなるためです。

06

ノード予算

  • 公平性はノード予算だけで担保します。ctx.engine の呼び出し1回=1ノードとして数え、1手あたりの上限を課します。
  • 時間では測りません。実行機の速さで勝敗が変わると、同じ棋譜を再現できなくなるためです。
  • 将棋は30,000ノードです。合法手の列挙1回が中盤(合法手291の局面)で460マイクロ秒かかり、Backgammonの約3.2倍重いため、実時間の上限を揃えるとこの値になります。
  • ⚠ 序盤の局面だけで測ると3倍近く過小評価します。予算を見直すときは必ず中盤の最悪局面で測り直してください。
AI CUP 競技ルールと透明性