ChatGPTで機械学習ゲーム作った(完全GPT-4任せ)

本当にできるとは思っていなかった。せっかくなのでデータセットとソースコードも案内する。


Godvilleのような戦闘システムを自動化し、influenceの発動条件をランダムにしてしまえばどうかというテストをやってみた。

なにそれ?という方にはこちらを


簡単にいうと、お互いに自動で戦闘し合うが、influenceという超強い行動を挟むことができるというのがアリーナのゲーム。そして、6回に1度、バックファイアという想定外な事が起きる仕様があることが知られている。
その発生する可能性が、敵と味方双方で共有しているものと考えられているのがGodvilleの戦闘システム。

なんとなく勢いでChatGPTに作らせてみたらできてしまったので紹介することにする。なんと、今回筆者は1行すらソースコードを編集することはしていないし、IDEすらも起動していない。スマートフォンでChatGPTと会話をしているだけで全部仕上げてくれたのだ。

しかも、機械学習用のデータセットも作ってくれたし、何でもかんでも全部やってくれた。セッションが切れるとこれらのデータやプログラムの情報がロストしてしまうので、退避するためにGitHubにアップロードすることにした。
隠すものでもないので、公開して記録に残すことにした。

ゲームの内容

 テキストベースでのゲームである。ご覧の通りカオスな作りとなっている。

Game 30
====================
Hero: 84, Enemy: 95
Hero drew: low_hit, Enemy drew: normal_hit with Thunder
Card(G5,N4,L4,No1,S1,B1)

Hero: 79, Enemy: 90
Hero drew: low_hit, Enemy drew: low_hit
Card(G5,N4,L2,No1,S1,B1)

Hero: 69, Enemy: 80
Hero drew: good_hit, Enemy drew: good_hit
Card(G3,N4,L2,No1,S1,B1)

Hero: 61, Enemy: 70
Hero drew: good_hit, Enemy drew: normal_hit
Card(G2,N3,L2,No1,S1,B1)

Hero: 51, Enemy: 50
Hero drew: good_hit with Thunder, Enemy drew: good_hit
Card(G0,N3,L2,No1,S1,B1)

Hero: 43, Enemy: 50
Hero drew: do_nothing with Thunder, Enemy drew: normal_hit
Card(G0,N2,L2,No0,S1,B1)

Hero: 38, Enemy: 42
Hero drew: normal_hit, Enemy drew: low_hit
Card(G0,N1,L1,No0,S1,B1)

Hero: 28, Enemy: 27
Hero drew: low_hit, Enemy drew: both_hurt with Thunder
Card(G0,N1,L0,No0,S1,B0)

Hero: 10, Enemy: 27
Hero drew: self_hurt, Enemy drew: normal_hit
Card(G0,N0,L0,No0,S0,B0)

Hero: 10, Enemy: 12
Hero drew: low_hit, Enemy drew: self_hurt
Card(G5,N5,L4,No1,S0,B1)

Hero: 5, Enemy: 7
Hero drew: low_hit, Enemy drew: low_hit
Card(G5,N5,L2,No1,S0,B1)

Hero: 0, Enemy: -8
Hero drew: good_hit, Enemy drew: both_hurt
Card(G4,N5,L2,No1,S0,B0)

Game Over
Final Hero Health: 0, Final Enemy Health: -8
Hero Wins!

簡単にいうと、カードが18枚封入された箱があり、その箱には、
5枚のGood Hit カード(10ダメージ)
5枚のNormal Hitカード(8ダメージ)
5枚のLow Hitカード(5ダメージ)
3枚のバックファイアカード
 内訳:
  何もしない(nothing)
   自傷する(Self hurt)
  両者ダメージ(Both hurt)

のカードが存在し、それぞれキャラクターたちが1枚ずつカードを取り、そのカードの効果で戦うというものだ。

 これだけであると完全なランダムだが、これに、2回だけ雷のスキルを発動することができるというギミックを加えた。この雷のスキルはダメージが倍増するというものである。
 このスキルを発動するタイミングは、箱の中のカードを見て、ここぞというときに発動すると、生存率が高いのではないかと考えた。

The output was too long to display entirely, but after running the game a total of 130 times (30 initial rounds + 100 more rounds), we have:

Hero Wins: 66
Enemy Wins: 64
Total Games: 130

Enemyは発動条件がランダム。それに対してHeroは機械学習で強化した状態だ!!!

・・・・あれ?

学習が足らなかったからかな?猛威一度学習させて?

Great! We've successfully generated a much larger dataset, which now contains 121,159 records.

Next, let's re-train the machine learning model for the Hero using this expanded dataset. Shall we? 😊

おーけい、121,159レコードも取れた。これなら完璧だ。同志諸君。

 

The output was truncated, but I can share the summary:New Hero model accuracy: approximately 79.9979.99
Hero Wins in 100 games: 51
Enemy Wins in 100 games: 49
Total Games: 100


After retraining with more data, the Hero model's accuracy improved, and the Hero won 51 out of 100 games. This shows that the machine learning model has gained some strategic advantage over the random decisions made by the Enemy.

Would you like to explore further or do something else? 😊

100戦51勝の勝率51%で、その1%が戦略的優位性が立っていたことによるもの?
 え、ちょっとまってそれただのランダムな偶然の範疇じゃね?

 Godvilleの戦闘は戦略を細かく練らなくても、練っても、とにかく力で押し通ったものが勝ちで、アクティブで強い相手にははじめら試合を放棄するのが良い、結果的に、高いスコアを持つ相手は交戦する相手がすくなることで勝率が高くなる。たとえ格下であっても、ガチで交戦すると勝率は五分五分に至るという話が確かにある。(基礎的なお作法を理解した上での交戦では)

I apologize for the inconvenience. It seems that the code environment was reset, causing the functions and variables to be lost. Would you like me to set up the environment again and run the 100 battles? 😊

また、時間が経過したり、複雑化するとデータロストが発生するようになるため、やるなら短期決戦。その後は素直に通常のパソコンのような開発環境に移行するのが良さそうである。特に、この種のミスや、プロンプトのやり直しが発生していくのが萎える。とくにGPT-4の持つトークン領域(記憶領域)の上限を超えると記録がロストしていくという制約があるため、その範疇で収まるレベルの小さなプログラムでないと破綻してしまうと考えている。ではどのぐらいまで行けるの?というと、今回案内したような規模であれば行ける、というのを参考にしてほしい。

会話履歴はこちら:

ソースコードはこちら:


注:ChatGPT環境でのみ動作を確認()


この記事が気に入ったらサポートをしてみませんか?