マガジン

CPUの3段階は何が違うのか:同じ局面で3回指させる

遊びを見つける

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

オセロ盤の角にある黒い石と、盤の外に添えた赤い目印を近くから見た情景。
記事のテーマをもとに制作したAI生成の写真風イメージ。

「潮目のオセロ」のひとり対局には3段階の相手がいます。確認できているのは「3段階ある」ことまでで、何がどう違うのかは作品を開いて確かめるしかありません。そこでこの記事では、「同じ局面で3段階に指させ、返ってきた手を並べる」手順を設計します。 場面を一つ考えてみます。自分の手を何手か打ち終えた盤面で、弱い段階、中間の段階、強い段階のCPUに白番を任せます。3つの手が同じなら、その局面では段階の差が出ていません。違う手が返ってきたら、その手がどんな種類の手なのかが手がかりになります。「強い」という印象を、座標と枚数の記録に置き換えるのが狙いです。 ここに書くのは測り方だけです。段階ごとの傾向は書きません。結果は、読者の手元の記録から出てきます。

この記事の目次
  1. 「同じ局面」を作る難しさ
  2. 準備:記録シートと座標の決め方
  3. 手順:局面を固定して3段階に指させる
  4. 集計の単位と読み方
  5. 起こりやすい誤り
  6. 次の行動

「同じ局面」を作る難しさ

最初に壁があります。ひとり対局では、相手側の手を自分で打てません。自分が同じ手を打っても、CPUの応手が段階によって違えば、盤面はそこから別の道に分かれます。

また、潮目のオセロに局面を保存する機能は確認されていません。保存があるのは余白の庭、WAVE / WAVE、かたちのあいだの3作品で、他の作品の記録は画面を開いている間だけです。そのため局面は、自分の手順を紙やメモに書いて残すことで再現します。

「同じ局面」を作る方法は次の3つです。

  • 初手の応手を比べる。 自分の初手を固定し、白の応手を段階ごとに記録します。必ず同じ局面から始まります。
  • 分岐するまでを同一とみなす。 自分の手順を固定して各段階で打ち、CPUの応手が一致している間は同じ局面です。最初に手が割れた地点が、そのまま記録になります。
  • 「一手戻す」で同じ局面に戻る。 一手戻したあとに同じ手を打ち直せば、同じ局面でCPUにもう一度指させられます。同じ段階でも手が揺れるかどうかが分かります。

「一手戻す」は、ひとり対局でだけ使えます。戻す範囲が自分の一手だけか、CPUの手も含むかは細部が確認できていません。この部分は作品を開いて確かめてください。また、対局の途中で段階を切り替えられるかどうかも、同じく作品を開いて確かめます。切り替えられるなら、同じ盤面のまま3段階を比べるのがいちばん簡単です。

準備:記録シートと座標の決め方

用意するものは、紙かメモ、鉛筆、そして画面の拡大表示です。盤面が見やすいと、座標の数え間違いが減ります。矢印キーとEnterでも操作できるので、マウスが使いにくい環境でも同じ記録がとれます。

座標は、列を左から a〜h、行を上から1〜8とします。左上が a1、右下が h8です。画面の向きが違っていても、この基準は記録の側で固定してください。標準の初期配置は、d4とe5が白、d5とe4が黒です。この配置と、自分が黒か白かは、作品を開いて確認します。

記録シートの列は次のとおりです。

  1. 局面ID(P1、P2…)
  2. 自分の手順(例:d3、c3…)
  3. 段階(1〜3。弱い順かどうかは作品で確認)
  4. 試行の番号(同じ局面を何回目に指させたか)
  5. CPUの手(座標)
  6. 返った石の数
  7. 手の種類(角/X/C/辺/内側)

手の種類は、次のように決めておきます。

  • 角、該当するマス:a1, h1, a8, h8
  • X、該当するマス:b2, g2, b7, g7(角の斜め隣)
  • C、該当するマス:角の隣の辺上のマス(b1, a2 など8マス)
  • 辺、該当するマス:上記以外の外周のマス
  • 内側、該当するマス:それ以外

手順:局面を固定して3段階に指させる

ステップ1:初手の応手で形をつかむ

標準配置で黒が先手なら、黒が d3 を打つと d4 の石が返ります。そのときの白の合法手は c3、e3、c5 の3つです。候補が3つしかないので、段階の差が出にくい局面でしょう。ただし、一手目で何が見えるかを確認する練習には向いています。

  1. 段階を一つ選び、新しい対局を始めます。
  2. 初手 d3 を打ち、CPUの手を記録します。
  3. 一手戻せるなら戻し、d3 を打ち直して、もう一度CPUの手を記録します。
  4. 3段階それぞれで同じ操作をします。

ステップ2:中盤の局面を固定する

本命は中盤です。候補手が多く、角や辺が絡む局面なら、手の選び方の癖が出やすくなります。

  1. 一つの段階で、自分の手を記録しながら10手前後まで進めます。
  2. 自分の手順を書き写し、他の段階で同じ順に打ちます。
  3. CPUの応手が変わった時点で、「分岐」と書いて記録します。
  4. 分岐前までは同じ局面なので、その局面ごとにIDを振ります。

ここでは、ヒントを使わない約束にしてください。ヒントは理由付きで手を示してくれますが、自分の手の選び方まで変えてしまい、記録を汚します。自分が打つ手は、対局を始める前に紙に書いておくのが確実です。

ステップ3:角が取れる局面を探す

角を取るかどうかは、強さの違いが出そうな基準です。ただ、この局面は自分で作る必要があります。次の条件を目安にしてください。

  • a1が空いていること。
  • a1から斜めに、黒の石が1つ以上連続していること。
  • その連続の先に、白の石があること。

この条件のとき、白は a1 に打てます。逆に言えば、白に角を打たせたい局面は、この並びを作れた局面です。b2に自分の石を置く手は、この並びを作りやすい代わりに、角を与えるリスクを自分で背負うことになります。実戦で自然に出た局面を拾うほうが、記録としてはきれいです。

集計の単位と読み方

集計は、「局面ごと」と「段階ごと」の2つの単位で行います。

  • 局面ごと:3段階の手が一致したか。
  • 段階ごと:手の種類の内訳と、返した石の平均。

各段階につき10局面を3回ずつ指させると、全部で90回になります。ここで最頻の手を使うので、揺れも見えてきます。次のコードは、記録を貼ると集計してくれます。

html
<textarea id="t" rows="8" cols="36" placeholder="局面ID,段階,手&#10;1行に1回分"></textarea>
<button onclick="run()">集計</button>
<pre id="o"></pre>
<script>
function mode(a){const c={};a.forEach(x=>c[x]=(c[x]||0)+1);
  return Object.keys(c).sort((x,y)=>c[y]-c[x])[0];}
function run(){
  const rows=document.getElementById('t').value.trim().split('\n')
    .map(l=>l.split(',').map(s=>s.trim())).filter(r=>r.length===3);
  const by={};
  rows.forEach(([p,s,m])=>{by[p]=by[p]||{};(by[p][s]=by[p][s]||[]).push(m);});
  let out='',agree=0,total=0;
  for(const p in by){
    const lv=Object.keys(by[p]).sort();
    const modes=lv.map(s=>mode(by[p][s]));
    const wob=lv.map(s=>s+'段階:'+new Set(by[p][s]).size+'種/'+by[p][s].length+'回').join(' ');
    const same=new Set(modes).size===1;
    total++; if(same) agree++;
    out+=p+' 最頻手 '+modes.join('/')+(same?'(一致)':'(相違)')+' 揺れ '+wob+'\n';
  }
  out+='一致した局面: '+agree+'/'+total;
  document.getElementById('o').textContent=out;
}
</script>

記録の書式は「局面ID,段階,手」を1行に1回分です。たとえば、局面P1で段階1がc3を返したなら、「P1,1,c3」と書きます。

数字が出たら、次のように読みます。

  • 一致率が高い、読み方の目安:その局面群では段階の差が出ていません。局面の選び方を変えてみます
  • 同じ段階の揺れが大きい、読み方の目安:手に乱数が入っている可能性があります。繰り返しの回数を増やします
  • 角が取れる局面で取る段階と取らない段階がある、読み方の目安:角の価値の扱いが段階で違うと考えられます
  • 返した枚数が多い手ばかり選ぶ段階がある、読み方の目安:目先の枚数に寄った選び方かもしれません
  • X打ちの手が特定の段階に偏る、読み方の目安:角を与える手への警戒が段階で違うかもしれません

表の右側は仮説です。最終的に結論とするには、別の局面でも同じ傾向が出るかを確かめてください。

起こりやすい誤り

  • 局面が実は違う。 自分が打った順は同じでも、途中でCPUの応手が違えば盤面は別です。石の数と配置を毎回見比べてください。
  • 座標の数え違い。 行や列を逆に数えると、手の種類の分類が全部ずれます。最初に基準を決め、毎回同じ向きで数えます。
  • 段階の取り違え。 新しい対局を始めるたびに、段階の選択を記録に書き留めてください。
  • 標本が少ない。 3局面だけで「この段階は角を取らない」と言い切るのは早すぎます。10局面を目安に、同じ傾向が繰り返されるかを見ます。
  • 一手の好みと勝敗を混同する。 角を取る回数と勝てる確率は別の話です。この分析で分かるのは、手の選び方の傾向までです。
  • 自分の手の癖が混ざる。 毎回同じ序盤だけを使うと、特定の形の傾向しか見えません。局面の種類を意識して散らします。

次の行動

まず作品を開き、段階の名前、対局中の切り替えの可否、「一手戻す」の範囲の3点を確かめてください。そのうえで、初手 d3 の応手を3段階で記録するところから始めます。慣れたら、中盤の局面を10個作り、上のコードで集計します。