以下は、ニューラルネットワークと遺伝的アルゴリズムを使用して、Flappy Birdビデオゲームの機械学習アルゴリズムを実装するHTML5プロジェクトのソースコードです。このプログラムは、できるだけ長く障壁を通して安全に飛ぶために、最適に羽ばたく方法を小さな鳥に教えています。
詳細とデモを備えた完全なチュートリアルは、ここで見つけることができます:
http://www.askforgametask.com/tutorial/machine-learning-algorithm-flappy-bird
ここでは、アルゴリズムの簡単なプレゼンテーションで短いビデオを見ることもできます。
https://www.youtube.com/watch?v=aewmdojejf0
すべてのコードは、ニューラルネットワークの実装のために、フェイザーフレームワークとシナプスニューラルネットワークライブラリを使用してHTML5で記述されています。
ゲームをプレイするために、各ユニット(鳥)には、次の3つのレイヤーで構成される独自のニューラルネットワークがあります。
2つのニューロンが鳥が見ているものを提示する入力層:
1) horizontal distance between the bird and the closest gap
2) height difference between the bird and the closest gap
6個のニューロンを備えた隠れ層
次のようにアクションを提供するために使用される1ニューロンの出力層:
if output > 0.5 then flap else do nothing
シナプスニューラルネットワークライブラリは、ゼロから新しいものを作成する代わりに、人工ニューラルネットワーク全体を実装するために使用されています。
このプログラムで実装されている機械学習の主な概念は、神経進化形式に基づいています。遺伝的アルゴリズムなどの進化アルゴリズムを使用して、人工ニューラルネットワークを訓練します。主な手順は次のとおりです。
ランダムなニューラルネットワークで10ユニット(鳥)の新しい人口を作成する
独自のニューラルネットワークを使用して、すべてのユニットが同時にゲームをプレイしてみましょう
各ユニットについて、そのフィットネス関数を計算して、その品質を次のように測定します。
fitness = total travelled distance - distance to the closest gap
すべてのユニットが殺害されたら、次のように遺伝的アルゴリズム演算子(選択、クロスオーバー、および突然変異)を使用して、現在の集団を次の集団に評価します。
1. sort the units of the current population in decreasing order by their fitness ranking
2. select the top 4 units and mark them as the winners of the current population
3. the 4 winners are directly passed on to the next population
4. to fill the rest of the next population, create 6 offsprings as follows:
- 1 offspring is made by a crossover of two best winners
- 3 offsprings are made by a crossover of two random winners
- 2 offsprings are direct copy of two random winners
5. to add some variations, apply random mutations on each offspring.
ステップ2に戻ります
このプログラムは、Phaser FrameworkとSynaptic Neural Network Libraryを使用してHTML5で記述されているため、これらのファイルが必要です。
ゲームロジック全体がGamePlay.jsファイルに実装されています。次のクラスで構成されています。
App.Main 、次の重要な機能を備えた主なルーチン:
TreeGroup Class 、移動障壁を表すためにPhaser Groupクラスを拡張しました。このグループには、上部と底の木のスプライトが含まれています。
Tree Class 、ツリースプライトを表すための拡張フェイザースプライトクラス。
Bird Class 、鳥のスプライトを表すための拡張フェイザースプライトクラス。
Text Class 、テキストの描画に使用される拡張フェイザービットマップテキストクラス。
遺伝的アルゴリズムは、次のクラスで構成されるgenetic.jsファイルに実装されています。
すべての遺伝的アルゴリズム操作を処理するメインクラスであるGeneticAlgorithm Class 。 2つのパラメーターが必要です。MAX_UNITSは、人口の合計ユニットを設定し、 TOP_UNITSを設定して、進化する人口に使用される多くのトップユニット(勝者)を設定します。ここにその重要な機能があります: