Skip to content

mikanakim/score4_AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

最強の立体四目並べAIを作ろう

はじめに

現状、世の中で最も強い立体四目並べAIを作ることができました。詳しい解説は以下のnoteに掲載します。
https://note.com/qweral/m/mabfb360417ab

なお、本AIで使用した評価関数は一部retsu27様のコードを参考にしました(以下リンク)。
https://retu27.com/scorefour_cpu_nosupport.html

展望

これでも十分強いですが、まだ改善の余地はあるため、今後は機械学習などを利用してさらなる強化を目指します。
コードにいくつかバグを発見しました。
近々定石を使用したコードを公開する予定なので、そのとき一緒にバグ修正版のコードも公開します。

動作環境

以下のとおりです。

>> cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"

>> g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

遊び方

score4ディレクトリに移動し、makeで実行ファイルを生成する。

>> cd /file/path/score4
>> make
>> ./main

対戦モードなどを選択。

  • AI vs AIは0、AI vs Humanは1、研究したいときは2を入力。
  • depthは探索の深さ(7がおすすめ)
    ※偶数を入力するとうまく動かないので非推奨
  • 続きからやりたい棋譜があれば入力可能。
    入力形式は、「0 15 3 12・・・」のように座標番号の半角スペース区切り。

※researchは、気になる展開などを制限時間フリーで好きな深さで解析するためのものです。対戦するときには使用しなくていいでしょう。

AI vs AI: 0, AI vs Human: 1, research: 2
>> 1
AI先手: 0, Human先手: 1
>> 0
depthを入力defaultは7
>> 7
棋譜を入力してください(しない場合はreturn): 
>> 0 15 3 12 1 2 13

盤面の見方

盤面の表示の仕方ですが、直感的な操作感を目指して、下から上に球を積み上げるように面を配置しています。以下を参考にしてください。
座標は0-15までの番号を入力してください。guideをつけてあるのでそれに従ってください。

. . . . z=4
. . . . 
. . . . 
. . . . 

. O . . z=3
. . . . 
. . . . 
. . . . 

. X . . z=2
. . . . 
. X . . 
. X . . 

O O X O z=1
. O . . 
. O . . 
X O . X 

-- guide --
 0  1  2  3
 4  5  6  7
 8  9 10 11
12 13 14 15

その他の機能

  • 互いに最善手を打った場合のn手先までの着手予測
    探索中に評価値の入れ替わったすべての手に対して、AIの想定する互いの最善手経路が自動で出力されます。
    例えば下図では、9手目として深さ9の探索で手「1」がalpha=14.6で最善とされます。このとき、10手目、11手目・・・と後に続く手に関しては「1 9 1 9 8 10 13 10」を想定しているということです。

      棋譜: 0 15 3 12 1 2 13 9
      9: 5.95 >> 9 9 1 2 2 13 13 14 3 
      2: 5.95
      3: 5.95
      13: 7.55 >> 13 13 1 2 1 1 2 9 9 
      12: 7.55
      15: 7.55
      4: 7.55
      6: 7.55
      7: 7.55
      8: 7.55
      10: 7.55
      11: 7.55
      14: 7.55
      5: 7.55
      1: 14.6 >> 1 1 9 1 9 8 10 13 10 
      0: 14.6
      Alpha = 14.6 
      Depth 9: Best action = 1
  • 棋譜自動保存機能
    勝敗のついた対局(引き分け含む)は試合終了後に自動でcsvファイルに保存されます。

  • 棋譜解析コード
    kifuディレクトリ下にkifu.pyが入っています。自動保存した棋譜はもちろん、自分で棋譜を入力し、棋譜同士の関係を樹形図で見たりできます。以下簡単な手引です。

    • 「数字」: 棋譜を入力
      座標を3桁の数字で表した、「xyz」という3桁の整数を入れてください。 座標はpythonコードで使用される盤面のとおりです。
    • 「list」: リストを入力
      入力形式は、「0 15 3 12 1 2 13」のように2桁の座標と半角スペース
    • 「cpp」: c++用出力 当該の棋譜をC++のAIに入力できるような形式に変換して出力するためのものです。