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回だけ雷のスキルを発動することができるというギミックを加えた。この雷のスキルはダメージが倍増するというものである。
このスキルを発動するタイミングは、箱の中のカードを見て、ここぞというときに発動すると、生存率が高いのではないかと考えた。
Enemyは発動条件がランダム。それに対してHeroは機械学習で強化した状態だ!!!
・・・・あれ?
学習が足らなかったからかな?猛威一度学習させて?
おーけい、121,159レコードも取れた。これなら完璧だ。同志諸君。
100戦51勝の勝率51%で、その1%が戦略的優位性が立っていたことによるもの?
え、ちょっとまってそれただのランダムな偶然の範疇じゃね?
Godvilleの戦闘は戦略を細かく練らなくても、練っても、とにかく力で押し通ったものが勝ちで、アクティブで強い相手にははじめら試合を放棄するのが良い、結果的に、高いスコアを持つ相手は交戦する相手がすくなることで勝率が高くなる。たとえ格下であっても、ガチで交戦すると勝率は五分五分に至るという話が確かにある。(基礎的なお作法を理解した上での交戦では)
また、時間が経過したり、複雑化するとデータロストが発生するようになるため、やるなら短期決戦。その後は素直に通常のパソコンのような開発環境に移行するのが良さそうである。特に、この種のミスや、プロンプトのやり直しが発生していくのが萎える。とくにGPT-4の持つトークン領域(記憶領域)の上限を超えると記録がロストしていくという制約があるため、その範疇で収まるレベルの小さなプログラムでないと破綻してしまうと考えている。ではどのぐらいまで行けるの?というと、今回案内したような規模であれば行ける、というのを参考にしてほしい。
会話履歴はこちら:
ソースコードはこちら:
注:ChatGPT環境でのみ動作を確認()
この記事が気に入ったらサポートをしてみませんか?