다음은 신경망과 유전자 알고리즘을 사용하여 Flappy Bird 비디오 게임에서 기계 학습 알고리즘을 구현하는 HTML5 프로젝트의 소스 코드입니다. 이 프로그램은 작은 새에게 가능한 한 장벽을 통해 안전하게 비행하기 위해 최적으로 플랩하는 방법을 가르칩니다.
자세한 내용과 데모가 포함 된 전체 튜토리얼은 여기에서 찾을 수 있습니다.
http://www.askforgametask.com/tutorial/machine-learning-algorithm-flappy-bird
여기에서는 알고리즘의 간단한 프레젠테이션으로 짧은 비디오를 볼 수 있습니다.
https://www.youtube.com/watch?v=aewmdojejf0
모든 코드는 신경망 구현을 위해 페이저 프레임 워크와 시냅스 신경망 라이브러리를 사용하여 HTML5로 작성됩니다.
게임을하기 위해 각 유닛 (새)에는 자체 신경망이 있습니다.
새가 보는 것을 나타내는 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 프레임 워크 및 시냅스 신경망 라이브러리를 사용하여 HTML5로 작성되었으므로 다음 파일이 필요합니다.
전체 게임 로직은 GamePlay.js 파일에서 구현됩니다. 다음 수업으로 구성됩니다.
App.Main
, 다음의 필수 기능을 갖춘 주요 루틴 :
TreeGroup Class
, 움직이는 장벽을 나타내는 확장 페이저 그룹 클래스. 이 그룹에는 상단과 하단 트리 스프라이트가 포함되어 있습니다.
Tree Class
, 트리 스프라이트를 나타내는 확장 페이저 스프라이트 클래스.
Bird Class
, 조류 스프라이트를 나타내는 확장 페이저 스프라이트 클래스.
Text Class
, 확장 페이저 비트 맵 텍스트 클래스는 텍스트를 그리는 데 사용됩니다.
유전자 알고리즘은 다음 클래스로 구성된 genetic.js 파일로 구현됩니다.
모든 유전자 알고리즘 작업을 처리하는 주요 클래스 인 GeneticAlgorithm Class
. 인구의 총 단위를 설정하려면 Max_Units 와 Top_Units가 진화하는 데 사용되는 여러 상위 유닛 (승자)을 설정하기 위해 두 가지 매개 변수가 필요합니다. 다음은 필수 기능입니다.