1P by neo 6달전 | favorite | 댓글 1개
  • 유전 알고리즘을 활용한 자동차 진화 시뮬레이션 프로그램

    • 유전 알고리즘을 사용하여 무작위 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 물리 기반 시뮬레이션 환경에서도 이와 같은 것이 가능할지 궁금함. 시뮬레이션에서 드론 등의 새로운 공기역학적 형상을 발견하는 데 유전 알고리즘이 사용될 수 있을지 흥미로움