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"]
            }
        )
    )


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です