8000 GitHub - mikanakim/score4_AI: 最強の立体四目並べAIを作ろう
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

mikanakim/score4_AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 

Repository files navigation

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

はじめに

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

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

主なアップデート内容

2025/5/4 定石打ちを実装しました。
立体四目並べの理論をもとに、盤面のパターン認識を実装するなど、評価関数の改善をしました。
詰み手順を正確にするためにダブルリーチの得点を10,000から5,000に変更しました。
詰み検出がうまく動作しないバグを修正しました。
researchモードで探索がうまくいかないバグを修正しました。

展望

これでも十分強いですが、まだ改善の余地はあるため、今後は機械学習などを利用してさらなる強化を目指します。
現在公開していてるMCTSを利用したAIの改善も含めて強化していきたいです。

動作環境

以下のとおりです。

>> 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

その他の機能

  • 定石打ち
    詳細は、/score4/kifu/README.mdを参照ください。
    特に序盤における定石打ちができるようにしました。
    定石には2種類あります。
    1つ目は過去の対戦結果を記録したものを参考に、自動で生成される定石です。
    ゲーム終了時に毎回、棋譜を保存しますか?ときかれます。これに対して、yesと答えると棋譜が保存されると同時に解析が行われ、条件を満たしたものについてはcreate_kifu.pyによって定石が生成されます。
    条件は、create_kifu.pyで変更できます。
    現在は、定石として認めるための最低対局数を5回と設定しており、対局終了時の残りの空きマスの数を棋譜のスコアとして採用し、スコアの高いものを定石としています。

    2つ目は人間が作った定石です。
    こちらは、human_made_book.csvで定義されており、自由に追加・変更することができます。
    今回は最もよく使われる定石の1つだけ格納してあります。

  • 互いに最善手を打った場合の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に入力できるような形式に変換して出力するためのものです。
0