パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

日本一役に立たないAI作成手順の解説

2021-03-19 | プログラムをマスター計画2020

 

昨日こんなテーブルゲームのAIを作成していました。

(ただし開発中のものなので随時変更はありそうです)

 

その開発過程をざっくり解説してみます。

 

8x8マスの盤面にダイスが8個ずつ並んでいます。

プレイヤーは各ターン毎に各ダイスの所有者、位置、前後上下左右のダイスの目を情報として得られます。

ゲームの勝ちは相手のダイス(以下 駒)を全て取る。または200ターン時の優勢勝ちです。

各ターンプレイヤーは1つの駒を選んで上の数字の数だけ、転がって動かせます。

ただし転がし初めて同じ場所は通過できません。

 

動かし方の指示の方法は位置 UDRL(回す方向)です。

 

まずは、駒のデータから計算しやすい盤を作成します。

 

作成した関数

位置を内部数値に変換

内部数値を位置に変換

位置と位置の距離を測定

駒が距離のみで到達できるか判定(障害物は判定しない)

駒を転がして動かし、敵駒が取れればその動かすコマンドを返す

 

追加した関数

位置に敵駒が距離のみで到達できるか判定

駒を転がして動かし、敵駒の効きがなければそのコマンドを返す

 

最後に追加した関数

動かした後の上の数字の取得

駒を転がして動かし、敵駒の効きがなく、次に距離で取れる駒がある場合、そのコマンドを返す

駒をランダムに動かし、そのコマンドを返す

 

日本一役に立たない理由

プログラム参加者が日本でだいたい私1人だから。

そこそこ考えないといけないから会社勤めだとしんどいし、

暇人でかつ、そういうプログラムを作りたい人がいないということらしい。

 

どこが好きなのか

よくわからないルールを把握していく過程

データ設計をしたら作りやすくなるかボーッと考えてひらめいた時の感覚

作った後にちょこっと修正してグンッと強くなった瞬間

作った後に最初に動くまでの謎のワクワク感

 

現在の結果

昨日の時点ではtopを取ったけど、翌朝2位に転落。

参加者は少ないけど強い人は強い。

 

追記

翌日 なんでかわからないけど返り咲く。

たまたまガチャで世界一になったらしい。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。