GN⁺: 유전 알고리즘을 활용한 자동차 진화 과정 관찰
(rednuht.org)-
유전 알고리즘을 활용한 자동차 진화 시뮬레이션 프로그램
- 유전 알고리즘을 사용하여 무작위 2륜 모양을 세대를 거쳐 자동차로 진화시키는 것이 목적임
- BoxCar2D를 기반으로 하되 처음부터 작성되었으며, 동일한 물리 엔진 (box2d) 만 사용함
- David Bau의 seedrandom.js 라이브러리 사용함
-
컨트롤과 설정
- 현재 모집단을 로컬에 저장하고 복원할 수 있는
Save/Restore Population
기능이 있음 -
Surprise
토글을 통해 드로잉을 껐다 켜서 시뮬레이션 속도를 높일 수 있음 -
New Population
은 트랙은 유지한 채 자동차 모집단만 재시작함 - 동일한 시드로 언제나 같은 트랙이 생성되어 친구들과 경쟁이 가능함
-
Mutation rate
는 새 세대가 태어날 때 각 개체의 각 유전자가 무작위 값으로 변이될 확률임 -
Mutation size
는 각 유전자가 변이될 수 있는 범위로, 숫자가 작을수록 원래 값에 가까움 -
Elite clones
은 다음 세대로 복사될 상위 n대의 자동차를 의미함 -
View top replay
는 현재 시뮬레이션을 일시 중지하고 최고 성능 자동차를 보여줌
- 현재 모집단을 로컬에 저장하고 복원할 수 있는
-
그래프
- 빨간색: 각 세대의 최고 점수
- 녹색: 각 세대의 상위 10대 자동차 평균
- 파란색: 전체 세대 평균
-
게놈 구성
- 모양 (꼭짓점 당 1개, 총 8개 유전자)
- 바퀴 크기 (바퀴 당 1개, 총 2개 유전자)
- 바퀴 위치 (바퀴 당 1개, 총 2개 유전자)
- 바퀴 밀도 (바퀴 당 1개, 총 2개 유전자) - 어두울수록 밀도 높음
- 섀시 밀도 (1개 유전자) - 어두울수록 밀도 높음
-
추가 사항
- 시뮬레이션이 결정론적이지 않아 최고의 자동차가 일관된 성능을 보이지 않을 수 있음
- 거리에 따라 지형 복잡도가 증가함
- 이제 코드가 GitHub에서 커뮤니티 기여와 함께 사용 가능함
Hacker News 의견
요약하면 다음과 같음:
- 이 프로젝트는 20년 전에 만들어졌으며, Ruffle 덕분에 여전히 브라우저에서 실행 가능함
- 유전 알고리즘의 특성상, 어느 시점에 우수한 디자인이 나타나면 이후 세대에서 계속 지배적인 경향을 보임. 돌연변이율과 돌연변이 크기 설정을 조정해 볼 필요가 있음
- 280m 이후로는 도로가 없어 차들이 끝없는 구덩이로 떨어지는 작은 버그가 있음
- "Surprise" 버튼을 눌러 빠르게 여러 세대를 거칠 수 있음. 돌연변이율과 돌연변이 크기를 조정하며 시간에 따른 진화 과정을 관찰하는 것이 흥미로움
- 차량에 "컴플라이언스"에 대한 유전자가 있어 서스펜션을 구현할 수 있다면 흥미로울 것임. 대부분의 실행에서 트론 바이크 모양으로 수렴하는 경향을 보임
- 세대가 바뀌어도 지형은 변하지 않음
- 이전 HN 토론에서도 여러 번 소개되었음 (
boxcar2d
와 유사하나 Flash 없이 구현) - 어릴 적 Boxcar 2D로 수 시간을 보냈던 추억이 떠오름
- 3D 물리 기반 시뮬레이션 환경에서도 이와 같은 것이 가능할지 궁금함. 시뮬레이션에서 드론 등의 새로운 공기역학적 형상을 발견하는 데 유전 알고리즘이 사용될 수 있을지 흥미로움