【完成】Pythonでオセロのスクリプトを作成

概要

オセロをプレイするAIを開発するために、まずはオセロを動かせるPythonスクリプトを構築しました。ざっくりと以下のような仕様です。

  1. 対戦形式は人間VS人間、人間VSCPU、CPUVSCPUが可能
  2. 人間とのIFはターミナル(GUIを作る予定はいまのところなし)
  3. CPUのアルゴリズムはランダム選択を実装(今後適宜追加予定)
  4. CPUVSCPUの場合、対戦回数を任意に指定可能(これを使って、例えば指定したアルゴリズムで10000回対戦させて傾向を見る、とかをする)
  5. 1局ごとに棋譜のログを出力可能(これを使って後で解析する)

使い方

まずスクリプトは以下で公開しています。(GitHub)
https://github.com/Rosyuku/othello.git
これをGit等でダウンロードしてきたら、以下のコマンドでオセロゲームを開始できます。

from Othello import Othello
Othello().start()

ターミナルで対局条件を設定するとゲームが始まります。

手の入力は「d6」や「e3」等の打ちたい場所(座標)を入力することで行います。

打てない手を拒否する機能はちゃんとつけています。

現状のCPUはランダムに打ってくるだけなので弱いです。

終わると結果が表示されます。

ログは以下のような感じで、1手ごとの盤面の状態が確認できるようにしています。

2018_02_13_23_58_22_965559.csv (15 ダウンロード)
CPU同士で対戦させる場合は回数を指定して実行することができます。

以下のようにコマンドで始めることもできます。

Othello(False, 2, 2, Algorithm.random_choice(), Algorithm.random_choice(), 10000, 4).start()

引数は順に、以下を指定しています。

  1. ターミナルで条件を設定するか
  2. 先攻は人間かCPUか
  3. 後攻は人間かCPUか
  4. 先手がCPUの場合のアルゴリズムは
  5. 後手がCPUの場合のアルゴリズムは
  6. 対戦回数
  7. 並列コア数

CPUアルゴリズムについて

アルゴリズムはクラスで作るようにしていて、Othelloプログラムからはget_next_choiceで呼ばれるようになっています。
引数には、ここまでの棋譜と、打てる場所の情報、手番が与えられます。

class random_choice:
    
    def __init__(self):
        pass
    
    def get_next_choice(self, diagrams, next_dia_all, turn):
        next_posi_enable = []
        for i in range(0,8):
            for j in range(0,8):
                if next_dia_all[i,j] == turn + 4:
                    next_posi_enable.append(str(Inv_columnList[j])+str(Inv_rowList[i]))
    
        return random.choice(next_posi_enable)

まとめ

ようやくオセロAI開発のスタート地点に立てました。ここからじゃんじゃん分析・強化していきたいと思います。
↓ランダム選択する条件で10000回対局した結果を分析しました。(2018/04/30)

オセロで打ち手をランダム選択する条件で10000回対局させてみた


コメントを残す

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

CAPTCHA