マガジン

CPUは約450msで何を考えているのか:灯りのチェスの思考時間

遊びを見つける

執筆にClaudeを使用しています。

振り子と色の異なる円を並べ、ゲームのリズムや間を表す立体作品。
記事のテーマをもとに制作したAI生成イメージ。実際のゲーム画面ではありません。

「灯りのチェス」のCPUの思考時間は、約450msに制限されています。0.45秒は、瞬きを一度するより少し長い程度の時間です。この短さで、CPUはどこまでよい手を選べるのでしょうか。 この問いに答える前に、確かめられる範囲を分けておく必要があります。確認できているのは、思考時間に約450msの制限があること、相手が3段階あること、合法手の判定にchess.jsが同梱されていることです。探索の深さや評価の仕方といった中身は、案内からは分かりません。そこでこの記事では、外側から観察します。手が返ってくるまでの時間と、返ってきた手の質を、読者自身が記録して関係を読み取る方法を設計書として示します。結果の数字は書きません。

この記事の目次
  1. 確かめられることと、確かめられないこと
  2. 準備:記録シートと手の質の物差し
  3. 手順1:応答時間を測る
  4. 手順2:同じ局面を繰り返して再現性を見る
  5. 手順3:局面の種類を分けて比べる
  6. 結果の読み方
  7. 起こりやすい誤り
  8. 次の行動

確かめられることと、確かめられないこと

観察で扱える項目と、扱えない項目を先に整理します。

  • 確認済み:CPUの思考時間は約450msに制限されています。3段階の相手がいます。棋譜と取った駒が画面に出ます。一手戻す機能があります。
  • 観察で確かめられる:返ってくるまでの体感ではない実際の時間、同じ局面での手の再現性、局面の種類ごとの手の質、3段階の差の出方です。
  • 作品を開いて確かめる:3段階の違いが何で決まるのか(思考時間か、別の要素か)、強さの順に並んでいるかどうか、約450msに盤面表示の演出時間が含まれるかどうかです。

「制限」は上限を意味します。毎回きっかり450msかかるとは限りません。上限の範囲で早く終わる手があるのか、全部が上限近くに張り付くのかも、観察の対象になります。

準備:記録シートと手の質の物差し

必要なのは、スマートフォンの動画撮影、紙かスプレッドシート、そして「灯りのチェス」を開いたブラウザです。棋譜は画面に全手表示されるので、あとから書き写せます。

手の質は、チェスの強さを厳密に測る必要はありません。誰が見ても判定が割れにくい5項目に絞ります。

  1. 無償の損失:CPUが指した直後、相手(自分)が何の代償もなく駒を取れる手になっていないか。
  2. 取り逃し:相手が守りなしで駒を残しているのに、取れる局面で取らなかったか。
  3. 1手詰めの見逃し:1手で詰ませられる局面で、別の手を指したか。
  4. 王手への対処:王手をかけられたとき、合法手のうち王手を解消できる手を選べているか。ゲームの規則上これは必ず満たされるはずなので、満たされない場合は作品の不具合として扱います。
  5. 特殊手の扱い:キャスリングやアンパッサン、昇格が可能な局面で、CPUが実際に使うか。使わないこと自体は弱さの証拠になりません。観察記録として残すだけにします。

記録は次の形にします。

  • 例:A-01、段階:1段階目、局面の種類:駒の取り合い、CPUの手:(棋譜から転記)、応答時間(フレーム数):、項目1〜3の該当:

集計の単位は「一手ごと」と「一局ごと」の二つです。時間は一手ごとに、手の質は局面の種類ごとにまとめます。

手順1:応答時間を測る

画面上の体感では、450msを正確に測れません。そこで動画のフレーム数を使います。

  1. 端末の画面を録画します。フレームレートが分かる設定にします。60フレーム毎秒なら1フレームは約16.7msで、450msは約27フレームです。120フレーム毎秒なら約54フレームです。
  2. 自分の手を指した瞬間を決めます。駒を置くクリックやEnterの押下など、画面に反応が出た最初のフレームを「開始」とします。
  3. 相手の駒が動き始める最初のフレームを「終了」とします。
  4. 開始から終了までのフレーム数を数えます。数え方は全手で統一します。

ここで測れるのは、CPUが考えていた時間そのものではありません。表示の更新や駒の動かし方の演出を含んだ「手が現れるまでの時間」です。約450msが思考時間だけの制限なのか、演出込みなのかは、この方法では分離できません。記録するときは「応答時間」と呼び、「思考時間」とは区別します。

同じ条件で各段階につき最低でも20手以上を記録します。1手や2手では偶然を除けません。

手順2:同じ局面を繰り返して再現性を見る

CPUは同じ局面で同じ手を返すのでしょうか。これは「一手戻す」を使うと確かめられます。ひとり対局で、次の手順をとります。

  1. 局面を一つ決め、その手前の自分の手を戻します。
  2. 同じ手をもう一度指します。
  3. CPUの手を記録します。これを3回繰り返します。

たとえば、駒の取り合いが起きる局面で3回とも同じ手が返るなら、その局面では手が決まっている可能性があります。手がばらつくなら、選択に乱数が使われているか、時間切れの打ち切りで結果が変わっているかのどちらかが考えられます。どちらなのかは、この観察だけでは区別できません。

局面を再現するときは、棋譜に頼ります。たとえば最初の自分の手が1.e4なら、同じ序盤を毎回指して分岐点まで進めます。ただし、2回目以降の序盤でCPUが別の手を返した場合は、局面が変わってしまいます。分岐点までCPUの手も同じになるかを、先に確認してください。

手順3:局面の種類を分けて比べる

CPUの手の質は、局面の種類で変わる可能性があります。同じ時間でも、選択肢が多い局面と少ない局面では、内容が違うかもしれません。そこで、次の4種類に分けて記録します。

  • 静かな序盤:駒の取り合いがない局面。
  • 取り合いのある中盤:片方が駒を取れる局面。自分の側から、相手の駒が取れる位置に守りのない駒を置くことで作れます。ここでCPUが取るかどうかが、項目2の観察になります。
  • 駒が少ない終盤:キングとポーン、数枚の駒だけの局面。
  • 詰みに近い局面:自分が大きく不利で、相手が1手詰めを持ち得る局面。意図的に作るのは難しいので、実際の対局で自然に現れたものを棋譜から拾います。

具体的な盤面を再現して覚える必要はありません。重要なのは条件です。「守りなしの駒が取れる」「1手で詰ませられる」といった条件を満たした局面を、対局の中で見つけて記録します。数が足りなければ、局面の種類ごとに5局面以上を目安に、対局を重ねます。

3段階それぞれで同じ種類の局面を集めると、段階ごとの差が見えます。段階の順序が強さの順かどうかも、この比較で分かります。

結果の読み方

集計したら、次のように読みます。

時間について

  • どの段階でも、応答時間が約450msの上限に近く集まる:上限まで使って探している可能性があります。
  • 局面によって応答時間が大きくばらつく:早く終える局面があるか、演出などの別の時間が混ざっています。局面の種類ごとに分けて、ばらつきが種類と対応するかを見ます。
  • 3段階で応答時間がほとんど同じ:段階の違いは、思考時間以外の要素で決まっている可能性があります。

質について

  • 取り合いのある局面で、段階が上がるほど項目2(取り逃し)が減る:段階の差が手の質に出ています。
  • 段階間で項目1〜3の発生がほとんど変わらない:差が小さいか、記録した局面数では見えていません。局面数を増やしてから判断します。
  • 時間は同じなのに質が段階で違う:思考時間の長さではなく、別の要素が段階を分けていると考えられます。

再現性について

  • 3回とも同じ手:その局面では選択が安定しています。
  • 手が変わる:選択にばらつきがあります。変わった局面の種類をまとめると、傾向が見えるかもしれません。

大事なのは、時間と質の関係を一つの結論にまとめず、「この条件ではこう見えた」と局面の種類ごとに書き分けることです。

起こりやすい誤り

  • 端末の性能差を無視する:古い端末では、動画のフレーム数が増えても、それが画面描画の遅れによるものかもしれません。別の端末で同じ局面を測れば確かめられます。
  • 少ない局面で結論を出す:1局の印象では、運や自分の指し方の影響が大きくなります。段階ごとに同数の局面を集めます。
  • 自分の判定基準が日によって変わる:「悪い手」の線引きが緩んだり厳しくなったりします。項目1〜3の定義を記録シートの冒頭に書いておき、都度見直さないようにします。
  • ヒントとCPUの手を同じ基準と決めつける:ヒントはひとり対局で使える機能ですが、CPUの手と同じ基準で選ばれているかは、案内からは分かりません。比較は観察として行い、一致しなくても不具合と判断しません。
  • 「450ms=短いから弱い」と決める:強さは時間だけで決まりません。どの程度の質が返るかは、記録した結果だけが答えです。

次の行動

まず、1段階目の相手で10手分の応答時間を動画に撮り、フレーム数を数えてみてください。次に、守りなしの駒を取れる局面を一つ作り、「一手戻す」で3回繰り返して、CPUの手が同じかどうかを記録します。この2つの数字がそろえば、3段階を比べる準備が整います。