Python(オセロ11_強めのロジックで対戦)
■生成AIの対戦相手として強めのロジックを使う。
前回オセロのロジックを検討した。今まではランダムロジックのみで試していたけど、次の3つのロジック(強めのロジック)で対戦させてみる。
・四隅優先
・盤上スコア
・複数組み合わせ(ChatGPTの提示コード)
結果が下。
四隅優先

複数組み合わせ

盤上スコア

結果を見ると、四隅優先では同程度の勝率、他2つでは、明らかに生成AIでの勝率が低かった。ランダムに対する生成AIの勝率は8割程度で四隅優先と同程度だったので、この結果は納得できる。
いずれも出力(思考)トークンを700までに設定している(ゲームが成り立つぎりぎりのあたり)。前に1000、5000までとしてランダムに対して対戦させたときに、1000と5000で勝率はあまり変わらなかった(生成AIが8割程度)ので、この部分はあまり影響しないかと思うけど、念のため5000でも検証。

何だかこちらの方が生成AIの成績が良さそう。単純に2倍にすると、700では2勝に対して、5000では6勝することになる。せいぜい20回なので、ただのばらつきかもしれない。いずれにしても、複数組み合わせのロジックよりは生成AIの対戦相手は弱いといえそう。
問い合わせは下の内容なので、ここを工夫すれば結果は変わるだろうけど、現状でもそこそこ時間も費用もかかるので、Geminiでオセロの対戦相手を作るのはこのくらいかと思う。
response = client.models.generate_content(
model=model_id,
contents=f"盤面: {formatted_board}, 候補手リスト:{tempList_tobeChanged}",
config=types.GenerateContentConfig(
system_instruction="あなたはオセロのプロプレイヤーです。指示された「候補手リスト」の中から、最も有利になる手を1つ選んでください。回答はJSON形式{move: [行, 列]}のみを出力し、他の文字列は一切含めないでください。",
temperature=0.1,
max_output_tokens=5000,
response_mime_type="application/json",
# レスポンスのスキーマを定義するとさらに安定します
response_schema={
"type": "object",
"properties": {
"move": {
"type": "array",
"items": {"type": "integer"},
"description": "[row,col]"
}
},
"required": ["move"]
}
)
)

