신경망과 간단한 유전 알고리즘을 사용하여 Chrome의 오프라인 공룡에게 선인장 점프를 가르치는 간단한 인공 지능입니다.
이 동영상을 시청하여 실제 작동 방식을 확인하고 작동 방법을 알아보세요. Google 공룡을 사용한 인공 지능
컴퓨터에 Node.js
설치하세요.
이 폴더를 컴퓨터에 복제/다운로드하세요.
이 폴더 내에서 npm install
실행하세요.
Chrome의 공룡 게임을 열고 터미널을 옆으로 치워두세요(동일한 화면에 있어야 합니다). (팁: 개발자 도구로 이동하여 네트워크에서 오프라인으로 설정하세요.)
이 폴더 내에서 node index
실행하십시오. 게임 위치가 지정되면 마우스 커서가 공룡 floor
의 원점으로 이동합니다. 학습을 시작하려면 터미널에서 s
키를 누르세요.
화면의 픽셀에서 읽은 3가지 다른 입력이 있습니다.
또한 3가지 가능한 상태를 가진 하나의 출력도 있습니다.
각 세대는 12개의 신경망(게놈)으로 구성됩니다.
각 게놈은 게임에서 읽은 입력을 신경망의 입력에 지속적으로 매핑하고, 네트워크에서 출력/활성화를 가져와 키보드 키에 적용하는 방식으로 게임을 통해 테스트됩니다.
각 게놈을 테스트하는 동안 게임에서 튀어나온 선인장 수를 세어 해당 게놈의 "적합성"을 추적합니다.
전체 세대가 완료되면 N
게놈이 달성될 때까지 최악의 게놈을 제거합니다. 그런 다음 N
게놈을 사용하여 두 개를 무작위로 선택하고 해당 값/구성을 교차합니다. 그 후, 신경망의 값/구성에 무작위 돌연변이를 적용하여 새로운 게놈을 생성합니다.
다시 12개의 게놈을 얻을 때까지 교차/돌연변이를 수행하고 이를 지속적으로 반복합니다.
모든 구현은 Synaptic(신경망 라이브러리) 및 RobotJs(픽셀을 읽고 키 누름을 시뮬레이션하는 라이브러리)와 함께 Node.js를 사용하여 수행되었습니다.
프로젝트에는 몇 가지 파일이 있습니다.
index.js
: 모든 것이 하나로 묶여 있습니다.
Scanner.js
: 레이 트레이싱처럼 화면을 읽는 RobotJs 라이브러리 위의 기본 추상화 레이어입니다. 또한 일부 유틸리티 기능도 있습니다.
UI.js
: UI 관리를 위한 전역 범위입니다. 변경 사항이 있을 경우 화면을 초기화하고 업데이트합니다.
GameManipulator.js
: 센서를 읽고 출력을 게임에 적용하는 데 필요한 모든 코드가 있습니다. 또한 포인트를 계산하고, 게임 상태를 가져오고, 콜백/리스너를 실제 구현으로 트리거하는 일도 담당합니다.
Learner.js
: Genetic Algorithm의 핵심 구현입니다. 세대를 이어가며 "자연" 선택, 교차, 돌연변이 등을 수행함으로써 "마법"이 일어나는 곳입니다.
.json
확장자를 가진 genomes
폴더 안에 있는지 확인하세요.enter
누르세요(그런 다음 시작하려면 s
누르세요).o
누르세요.Cc
누르세요.공룡 게임에는 성가신 버그가 있습니다. 시간이 지남에 따라 공룡이 게임의 원점에서 잘못된 오프셋을 갖도록 "표류"하기 시작합니다. 그러면 공룡이 같은 색이므로 프로그램이 선인장으로 읽도록 만듭니다.
페이지를 지속적으로 새로 고치거나 요소 검사기의 콘솔 내부에 다음 코드를 붙여넣어 문제를 해결할 수 있습니다.
// Make sure the dino does not drift to the right
setInterval(function (){Runner.instance_.tRex.xPos = 21}, 2000)
Felix의 Node.js 스타일 가이드를 따르세요. 그것은 복잡하지 않으며 사물에 대한 아주 단순한 패턴을 가지고 있습니다.