2048+tensorflow+kerasでパズルをAI攻略!!
半年ぶりのブログになります(*´艸`*)
ブログはやめたり仕事が休暇明けだったり、
LinkedInにポストしてもいいんですが、
備忘録がてらブログにもまとめておきます(*´艸`*)
題名はtwで言い散らかしてた2048+tensorflow+kerasです(*´艸`*)
tensorflowは昔のブログでも参照してください・・・
まずは2048の仕様からwww
・タイルがランダムに最初は二個、次手から一個出現する
・同じ数なら結合出来タイルがまとまりスコアも上がる
・縦横四方向にフリック出来るけど三方向くらいに絞らないと混乱しやすい
この辺りが仕様と攻略法です(*´艸`*)
では何故tensorflowではなくkerasを使ったかと言うと、
・タイルもランダム、フリックも適宜でデータを準備しにくい
・盤面上の状態を予測して手を打つのが強化学習(観測・報酬・行動)だった
・tensorflow2.0ではkerasもあらかじめパッケージの一部として含まれる
と、この辺りです(*´艸`*)
tensorflowのサンプルプログラムは前にポストしたこちらを御覧くださいwww
https://hinaser.github.io/Machine-Learning/sample-rock-scissors-paper.html
kerasの公式ドキュメントはこちらです^^
ざっくり見ただけでも学習モデルの構築が簡素化されてるのが分かると思います(*´艸`*)
(入出力階層やレイヤーは下記実際のGitコードをご参照に)
kerasの軽い参考サンプルはこちら↓
https://qiita.com/yukiB/items/0a3faa759ca5561e12f8
keras(DQN)の概念を分かりやすく解説
https://qiita.com/Ugo-Nama/items/08c6a5f6a571335972d5
そして最初は混乱しましたが、データはどちらも数値計算numpyとして扱います(;´∀`)
まぁ画像・テキストその他生データで扱ったら複雑になりすぎるからね・・・
制御系やる人ならビット演算的にイメージすると分かりやすいかもしれませんwww
そんな初歩がこちら↓
https://qiita.com/hiroeorz@github/items/33b85529be0829f34973
通常配列⇔numpy配列変換は適宜ググってくださいwww
それらから開発中の動画がこちらwww
AI動作がバグってるので途中で止まります(起動自体は出来た)
→入出力階層の単子と配列の型が合わなかったり、初期化失敗したりした
今は普通に動きますが、そもそも攻略ではなく高得点を目指し、
更にタイルの出現がランダムなので点数のばらつきも多いですwww
60秒動画なので途中までですが、ゲームオーバーになるまで動きますwww
実際のコードはGitに上げたのでそちらを御覧ください(*´艸`*)
https://github.com/infinitybaseshin001/2048_DQN
動作仕様とかはREADME.txtを、
実際のコード作業は作業.txtをご参照願います(*´艸`*)
実際に動かして見てみましょう!www
そしてまだちょいちょいイジってるって、実際に動かすと分かりますが、
動きに未成熟な部分があると言えばあります(;´∀`)
というか改善の余地の部分なのかもしれませんが、
・select_actionとかのgain計算の精度を上げる
・AIが一手先しか予測出来ない(例えば左の後下とか)
このgain計算はサンプルからそのままなのでイジってないし、
AIの予測もtensorflowの線形学習が含まれたらマシになるかもしれませんwww
こんなところですかね!(*´艸`*)
pythonを始めて半年でここまで!www
同じGitにpythonサンプルのSCMも作りましたwww
最近WEBもpythonで作ることがありますね・・・
フレームワークだけダウンロードして放置ですが!www
そして実アプリの設計準備を年内に始めて、
更に実際のAIはそろそろtensorflow2.0を試してみようと思います(*´艸`*)
tensorflow+kerasがあらかじめパッケージングされてると、
上記改善も少し楽かもしれませんwww
そろそろステイブル版も出そうだしwww
ということで久しぶりのお仕事ブログでしたwww
半年遊んでた訳じゃないっすよ(*´艸`*)
もう年末締めもこのブログだがな!www
それでは良いお年を、と言うには早すぎますが、
またごそごそtw/LinkeInで言い散らかすと思います(*´艸`*)
ってか大きい進捗があればこのブログに追記するかもwww
なんだかんだで趣味ブログも月イチで更新してるし、
アウトプットにインプットが追い付かない的な、
AIも魔法の杖ではないしきっちりロジック組まなければいけない、
そもそもAIとは何で何に使うかって、深淵編で書いた気がしますwww
チート技術ではなく進歩する技術の一環として、
例えばブロックチェーンと同じく技術記事の一つとして書いてもいいかもね、
ってお話でした(*´艸`*)