機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

ポケモンバトルAI

【ポケモンバトルAI本】技術書典13 頒布予定【オンラインのみ・第4巻に追加コンテンツ】

技術書典13は2022年9月10日から9月25日まで開催される技術系同人誌の頒布イベントです。当サークル「ヤマブキ計算所」はオンラインマーケットのみ参加です。 新刊はありませんが、2020年9月に発行したポケモンバトルAI本第4巻に、約30ページの加筆を行いまし…

ゲーム木探索入門 part05 交互手番MCTSの実装【PokéAI】

前回は原始モンテカルロ法というもっとも単純な探索手法を試しました。原始モンテカルロ法では、ルート局面(行動を決定したい局面)でとれる行動それぞれについて、その行動をとった直後の局面からランダムにゲームを進めた際の勝率を比較して行動を決定し…

ゲーム木探索入門 part04 原始モンテカルロ法【PokéAI】

ゲーム木探索を用いたポケモンバトルAIの最も単純なアルゴリズムとして、原始モンテカルロ法を試します。 前回から長らく期間が空いてしまいましたが、再開していきます。 アルゴリズム ここでは原始モンテカルロ法(pure Monte Carlo search)を試します。 原…

汎用行動選択モデルの3vs3対応 part11 行動の強化学習とパーティ生成の交互実行(結果の評価)【PokéAI】

前回、パーティ生成と学習の反復により、各反復で生成されるパーティが定性的に改善されていることを確認しました。 今回は、各反復での学習結果で上位100パーティを抽出し、反復10回分のパーティを混合した1,000パーティでレーティングバトルさせます。反復…

汎用行動選択モデルの3vs3対応 part10 行動の強化学習とパーティ生成の交互実行(学習経過の評価)【PokéAI】

3vs3バトルでの強化学習とパーティ生成の実装が完成したので、1vs1バトルの時と同様、これらを交互に動作させて強いパーティとその適切な運用法を学習します。 実験条件 アルゴリズム自体は1vs1の時と変わりません。 select766.hatenablog.com 反復回数 10 …

汎用行動選択モデルの3vs3対応 part09 Q関数を用いたパーティ生成【PokéAI】

1vs1バトルの時と同様に、強化学習の結果得られる、行動ごとの価値の期待値を表すQ関数を用いて強力なパーティを生成することを試みます。 手法 手法は1vs1バトルの時のものを応用し、3vs3対応のための変更を行います。 select766.hatenablog.com 3vs3対応の…

汎用行動選択モデルの3vs3対応 part08 学習率の調整【PokéAI】

強化学習はアルゴリズムが正しくてもハイパーパラメータ設定により性能が大幅に変わってきます。1vs1バトル環境において、optunaによる調整を行ったところ学習率が最も大きな要素であることがわかりました。 しかしこのパラメータのまま3vs3バトル環境へ適用…

汎用行動選択モデルの3vs3対応 part07 強化学習中の対戦相手【PokéAI】

今回も強化学習の改善を目指します。ポケモンバトルの強化学習の特徴的な要素として、バトル開始時にエージェントに操作すべきパーティが割り当てられるという点があります。バトルごとに異なるパーティが割り当てられ、相手のパーティとの関係性により有利…

汎用行動選択モデルの3vs3対応 part06 学習バトル数と強さ【PokéAI】

モデルの強化学習におけるバトル数は、1vs1の時のパラメータを引き継いで10万に設定していました。3vs3ではそもそもバトル1回あたりのターン数が違うこと、学習すべき行動がより複雑であることから、この値が適切なのかどうか検証しました。 バトル数を10万…

汎用行動選択モデルの3vs3対応 part05 補助報酬の調整【PokéAI】

前回エージェントの強化学習に対して、バトル途中でのHPの増減などに応じた補助報酬を導入し、定量的には強さが向上することを確認しました。 今回は、補助報酬の大きさなどを調整してさらに強くできないか実験します。あらかじめ結果を述べると、前回のパラ…

汎用行動選択モデルの3vs3対応 part04 補助報酬【PokéAI】

前回バトルログを可視化してわかったのは、学習したエージェントの行動でタイプ相性などがある程度考慮されているものの、まだまだ改善の余地が大きいということでした。 この記事から、強化学習手法の改善を試みていきます。 今回は、初代ルールの3vs3のと…

汎用行動選択モデルの3vs3対応 part03 バトルログ可視化ツールの作成【PokéAI】

従来、AIによるバトル中の行動を定性的に確認するには、シミュレータの出力する機械向けのログを目視で必死に解読していました。例えば1ターンの進行を表すログはこんな感じです。 | |split|p2 |switch|p2a: Azumarill|Azumarill, L50, M|206/206 |switch|p2…

汎用行動選択モデルの3vs3対応 part02 単純な学習【PokéAI】

前回提案した、3vs3対応の特徴量を用いて行動選択の強化学習を行っていきます。 パーティ 実験に用いる、3体からなるパーティはランダムに1000個生成しました。各ポケモンの種族・覚える技については過去記事に準拠しています。持ち物なしです。 select766.h…

汎用行動選択モデルの3vs3対応 part01 入出力の拡張【PokéAI】

前回まで、汎用行動選択モデルは1vs1バトルの環境で学習をしていました。今回から3vs3バトルに拡張していきます。 select766.hatenablog.com 9月から着手していたのですが、2020年12月時点では、動作しなくはないが定性的にいまひとつの結果という状況です。…

【ポケモンバトルAI本】技術書典10/エアコミケ2 頒布予定【第3巻無料/物理本あり】

技術書典10は2020年12月26日から2021年1月6日まで開催される技術系同人誌の頒布イベントです。新型コロナウイルスの影響によりオンライン開催ですので、お祭り感のある通販のようなものとお考え下さい。 同時に、エアコミケ2にも出展します。こちらはWebカタ…

ゲーム木探索入門 part03 実験用パーティの選定【PokéAI】

前回に続き、ゲーム木探索の下準備をします。 従来行っていたような、ランダムに生成したパーティ1000個を戦わせるような実験が計算コスト上できない見通しです。ランダムなパーティ同士の対戦だと、ポケモンや技自体の強さが大きく離れている場合が多く、パ…

ゲーム木探索入門 part02 シミュレータのパフォーマンス測定【PokéAI】

今回は、ゲーム木探索の下準備をします。実務上の泥臭い話で、AI的な話は出てこないので適当に読み飛ばしてください。 現在ゲーム木探索のもっとも単純な手法として、原始モンテカルロ法(次回以降に説明)の実装を進めています。処理が非常に重いため実験コ…

ゲーム木探索入門 part01 構想と予備実験【PokéAI】

今まで私が開発してきたポケモンバトルAIは、モデルフリー強化学習に基づいてバトル中の行動を選択するものでした。 先日まで1vs1バトルでうまくいった強化学習手法を3vs3に拡張する実験をしていたのですが、学習結果がいまいちという問題に苦労しており(忘…

【ポケモンバトルAI本】技術書典9 頒布予定

技術書典9は2020年9月12日から22日まで開催される技術系同人誌の頒布イベントです。新型コロナウイルスの影響によりオンライン開催ですので、お祭り感のある通販のようなものとお考え下さい。 当サークル「ヤマブキ計算所」は技術書典9へ出展いたします。新…

汎用行動選択モデルの学習 part13 行動の強化学習とパーティ生成の交互実行(結果)【PokéAI】

前回、バトル中の行動の強化学習と、そこで得られたモデルのQ関数を用いて強いパーティを生成するステップを交互に反復する手法を提案しました。 今回はそれを実際に動作させた結果を示します。 実験条件 反復回数 10 パーティ数 Q関数を用いて生成するパー…

汎用行動選択モデルの学習 part12 行動の強化学習とパーティ生成の交互実行(手法)【PokéAI】

前回、強化学習のハイパーパラメータを調整し、疑似教師データを使った教師あり学習よりも強い汎用行動選択モデルを学習させることに成功しました。 これと、汎用行動選択モデルを用いたパーティ生成手法を組み合わせて強いパーティとその適切な運用法を学習…

汎用行動選択モデルの学習 part11 Optunaを用いた強化学習のハイパーパラメータチューニング【PokéAI】

過去数回の記事で使用した汎用行動選択モデルは強化学習で学習したものでしたが、教師あり学習のものより若干弱いものになっていました。 複雑なステップを経る教師あり学習を不要とし、強化学習だけで同等以上のモデルを学習できるようにするため、強化学習…

汎用行動選択モデルの学習 part10 Q関数を用いたパーティ生成【PokéAI】

前回、強化学習によって得たQ関数を用いてパーティの強さを定量化する指標(パーティ評価関数)を定義しました。 今回はこれを用いて強力なパーティを生成する手法を説明します。 ここでの目的は、パーティ評価関数R(X)の値が比較的大きいパーティXを多数求…

汎用行動選択モデルの学習 part09 Q関数を用いたパーティ評価【PokéAI】

前回、バトル中の行動選択を行うQ関数について、バトル開始直後のQ値は0ではなく、自分のパーティ構成および相手に応じて変動することがわかりました。 今回から、この性質を用いて強いパーティを生成することを試みます。 Q関数を用いたパーティの強さの定…

汎用行動選択モデルの学習 part08 Q関数の観察【PokéAI】

前回、強化学習で汎用行動選択モデルの学習が可能だということを確認しました。今回はパラメータチューニングは置いておいて、学習結果のモデルの出力を観察してみたいと思います。DQNで学習されるQ関数Q(s, a)は、状態sのときに行動aをとったときの割引報酬…

汎用行動選択モデルの学習 part07 DQNの学習結果【PokéAI】

前回、汎用行動選択モデルを強化学習させるシステムを実装しました。今回はその結果を評価します。 学習条件 強化学習関係のデフォルトの学習条件は以下のように設定しました。 アルゴリズム: DQN (double DQN) 探索: epsilon-greedy ランダム行動する確率ep…

汎用行動選択モデルの学習 part06 DQNの自前実装【PokéAI】

前回まで、教師あり学習であらゆるパーティの行動選択を行えるモデルを学習させ、3層16チャンネル程度の全結合DNNである程度適切な行動がとれることがわかりました。 今回からはバトルの勝敗を報酬とした強化学習に取り組みます。 select766.hatenablog.com …

【ジュウオウ】ポケモン名っぽい駅名 part03終 Character-level Recurrent Neural Networkによるポケモン名らしさの定量化【一発ネタ】

前回学習させた、ポケモン名を表現するCharacter-level RNNを用いて、ポケモン名っぽい駅名を探します。 select766.hatenablog.com 前回の実験ではCharacter-level RNNを用いてポケモン名っぽい文字列を生成しました。このモデルは、与えられた文字列の自然…

【ガメハチ】ポケモン名っぽい駅名 part02 Character-level Recurrent Neural Networkの学習【一発ネタ】

前回はポケモン名を一部に含む駅名を抽出する単純な実験を行いました。今回は、自然言語処理技術を導入してポケモン名をモデル化します。 select766.hatenablog.com モデルの構造として、Character-level Recurrent Neural Network (Character-level RNN)と…

【ハッサム】ポケモン名っぽい駅名 part01 文字列一致【一発ネタ】

とあるゲーム実況放送にて、「ハッサムというポケモンがいるが、北海道には発寒(はっさむと発音)駅がある」という話題がありました。 ポケモンの名前っぽさとは何か、駅名の中でほかにポケモン名っぽいものがないかが気になったので、自然言語処理の側面か…