- 무작위로 생성된 두 바퀴 형태가 세대를 거치며 더 멀리 달리는 자동차로 선택·변이되는 과정을 브라우저에서 볼 수 있는 HTML5 시뮬레이션임
- BoxCar2D의 아이디어를 느슨하게 따르지만, 코드는 새로 작성됐고 물리 계산에는 box2d를 사용함
- 돌연변이율, 돌연변이 크기, 바닥 조건, 중력, 엘리트 클론 수를 조정해 진화 조건을 바꿀 수 있음
- 같은 seed로 같은 트랙을 만들 수 있어 결과를 비교하기 쉽지만, 시뮬레이션 자체는 완전히 결정적이지 않음
- 게놈은 차체와 바퀴의 형태·위치·밀도를 담으며, 멀리 갈수록 지형이 복잡해져 단순 최고 기록만으로 안정성을 보장하기 어려움
자동차가 진화하는 방식
- 프로그램은 무작위 두 바퀴 형태를 세대별로 진화시켜 자동차처럼 달리는 개체를 만들어내는 간단한 유전 알고리듬 시뮬레이션임
- BoxCar2D에서 느슨하게 아이디어를 얻었지만, 코드는 처음부터 작성됨
- 물리 엔진은 box2d를 사용함
- seedrandom.js는 David Bau가 작성함
조작과 진화 설정
- 저장과 복원 기능으로 실험 상태를 이어갈 수 있음
- Save Population은 현재 개체군을 로컬에 저장함
- Restore Saved Population은 이전에 저장한 개체군을 복원함
- 시뮬레이션 진행 방식도 직접 바꿀 수 있음
- Suprise는 그리기를 토글해 시뮬레이션을 더 빠르게 만듦
- New Population은 생성된 트랙은 유지한 채 자동차 개체군 전체를 다시 시작함
- View top replay는 현재 시뮬레이션을 일시정지하고 최고 성능 자동차를 보여주며, 다시 클릭하면 시뮬레이션을 재개함
- Create new world with seed는 같은 seed가 항상 같은 트랙을 만들기 때문에, 다른 사람과 같은 seed로 경쟁할 수 있음
- 진화 파라미터는 새 세대가 얼마나 크게 바뀌는지를 좌우함
- Mutation rate는 새 세대가 태어날 때 각 개체의 각 유전자가 무작위 값으로 변이할 확률임
- Mutation size는 각 유전자가 변이할 수 있는 범위이며, 낮은 값일수록 원래 값에 가까운 값을 가짐
- Elite clones는 다음 세대로 그대로 복사될 상위 n대의 자동차 수를 정함
그래프에서 보는 성능 변화
- 그래프 색상은 세대별 성능을 서로 다른 기준으로 보여줌
- 빨간색은 각 세대의 최고 점수를 나타냄
- 초록색은 각 세대 상위 10대 자동차의 평균을 나타냄
- 파란색은 전체 세대의 평균을 나타냄
게놈이 표현하는 자동차 구조
- 자동차의 게놈은 차체와 바퀴를 구성하는 여러 유전자로 나뉨
- Shape: 꼭짓점당 1개씩, 총 8개 유전자
- Wheel size: 바퀴당 1개씩, 총 2개 유전자
- Wheel position: 바퀴당 1개씩, 총 2개 유전자
- Wheel density: 바퀴당 1개씩, 총 2개 유전자이며, 더 어두운 바퀴는 더 높은 밀도를 뜻함
- Chassis density: 1개 유전자이며, 더 어두운 차체는 더 높은 밀도를 뜻함
한계와 코드 공개
- 시뮬레이션은 기대만큼 결정적이지 않아, 최고 자동차가 이전과 같은 성능을 내지 못할 수 있음
- 지형은 거리가 멀어질수록 더 복잡해짐
- 스크립트 로딩 확인을 별도로 처리하지 않으므로, 동작이 이상하면 페이지를 새로고침해야 함
- 코드는 GitHub repository에 공개되어 있으며 기여를 받을 수 있음
- 원래 rednuht.org에서 작성되었고, 이후 GitHub의 기여자들이 참여함