Skip to content

αβ法を使用したスタンダードなオセロAI

License

Notifications You must be signed in to change notification settings

Nyanyan/Nats-reversi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nats

ENGLISH FOLLOWS JAPANESE TBD

Natsとは

オセロAIの強さ・速さの一定指標となることを念頭に作られたオセロAIです。

原始的なマスの重みによる評価関数を使って、原始的なαβ法による探索を行っています。

ある程度基本的なことを押さえると、このオセロAIには強さ・速さの両面で勝利できると想います。

使い方

コンパイル

コンパイルは一度行うだけで良いです。

レポジトリをクローンし、srcディレクトリに入ります

$ git clone git@github.com:Nyanyan/Nats-reversi.git
$ cd Nats-reversi/src

コンパイルします。このとき、-oで設定した出力ファイル名は任意に変更して構いません。

$ g++ main.cpp -o nats.out

実行

実行します。

$ nats.out

このとき、コマンドライン引数で読みの深さ(手数)を設定できます。終盤読み深さについては、終盤の空きマスがその値以下となった場合に完全読みに入ります。

$ nats.out [中盤読み深さ] [終盤読み深さ]

なお、終盤読み深さを省略すると、中盤読み深さの2倍が終盤読み深さになります。

読み深さを設定しないとデフォルト値(中盤4手、終盤8手完全読み)となります。

読み深さに0以下の値を入れるとエラーとなります。

例として、中盤7手、終盤14手読みで実行すると以下のような表示になります。参考情報の出力、および入力受付の"> "は全て標準エラー出力です

$ nats.out 7 14
[I] Nats Othello AI
[I] (c) 2022-2024 Takuto Yamana
[I] depth mid:7 end:14
[I] initialized
[I] input [board as 64 characters][side to move]
[I] example: ---------------------------OX------XO---------------------------X
> 

入力

Natsの入力形式の概要は以下です。入力は任意の場所にスペース・改行を入れて構いません。

[盤面を表す64文字の文字列][手番]

盤面の文字列の座標は、左からa1b1c1、…、a2b2、…h8の順番で並べます。

各文字について、黒石は0XxBb*のいずれも使用可能、白石は1OoWwのいずれも使用可能です。空きマスは-=.の使用を想定していますが、黒石、白石に使用されていない任意の1バイト文字が使用可能です。

手番は黒なら黒石を表す文字のいずれかを、白なら白石を表す文字のいずれかを入力してください。

入力例として、初期局面からf5d6と着手した様子を以下に示します。

...........................OX......OXX.....O....................X

出力

探索結果は以下の形式で標準出力に出力されます。

[選んだ手] [評価値]

選んだ手はf5d6など(英字は小文字)の形式です。評価値は整数値です。例として初期局面からf5d6と進んだ後の局面を7手読みで探索した結果の出力を示します。

$ nats.out 7 14
[I] Nats Othello AI
[I] (c) 2022-2024 Takuto Yamana
[I] depth mid:7 end:14
[I] initialized
[I] input [board as 64 characters][side to move]
[I] example: ---------------------------OX------XO---------------------------X
> ...........................OX......OXX.....O....................X
[I] . . . . . . . .
[I] . . . . . . . .
[I] . . . . . . . .
[I] . . . O X . . .
[I] . . . O X X . .
[I] . . . O . . . .
[I] . . . . . . . .
[I] . . . . . . . .
[I] midgame depth 7
[I] time elapsed 1 ms
c5 0

評価関数の詳細

マスによる重みを使った評価関数を作りました。評価値は最終石差の予想値です。重みは以下の図の通りです。作者による独自の重みで、Siv3DサンプルのオセロAI(Natsと作者が同じ)と同じ評価関数です。

evaluate.hppに記述してあります。

cell_weight

探索の詳細

探索はαβ法を用いています。

高速化に大きく寄与するmove ordering(着手順序付け)や並列化は行っていません。

探索の詳細はsearch.hppおよびai.hppに記述してあります。

ライセンス

このオセロAIはMITライセンスで公開します。自由に改造・流用して自分のオセロAIに組み込んで構いません。

About

αβ法を使用したスタンダードなオセロAI

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages