텐서플로우나 다른 라이브러리는 사용하지 않았고
오직 유니티(C샵) 으로만 비교적 쉽고 간단하게 구현했습니다.
한 번의 세대에 130개의 자동차 개체를 동시에 플레이 시키고
1프레임 진행당 1점의 점수를 주어 한 판이 끝났을때
가장 높은 점수를 얻은 개체에 높은 가중치를 주어
비교적 간단한 교배, 변이 등의 유전 알고리즘을 사용하여 인공신경망을 최적화 했습니다.
인공신경망의 입력값은
자동차의 노말라이즈된 Forward 벡터값 x,y,z 와
6방향의 라인센서의 충돌 거리값
이렇게 총 9개의 데이터 입력을 사용했고
출력값은 좌측 회전, 우측 회전 2개의 값을 받아
이 둘 중 큰값이 0.5 이상이면 해당 방향을 선택하게 했습니다.
자동차의 속도는 일정하고 가속이나 감속 또는 후진은 불가능하게 했습니다.
유니티엔진으로 많은 수의 개체를 동시에 테스트하고
또한 플레이 속도를 최대 100배속까지(CPU만 빠르다면) 올릴 수 있는
테스트 환경을 만들었기 때문에 더욱 빠른 최적화가 가능합니다.
동영상 마지막 부분에서 한자리에서 계속 회전하는 이유는 개체의 점수 책정을
오로지 오래 살아남으면 높게 나오게 처리했기때문인데
어쩌면 저런 방식이 오래 살아남을 수 있는 최적의 해를 찾았다고 볼 수도 있습니다.
의도하지 않았는데 이 부분이 정말 재밌네요.
실제로는 한 곳의 자리에서 계속 돌면 감점 처리를 해줘야 하는데 하지 않았습니다.
시청해주셔서 감사합니다.
혹시 궁금한 점 댓글 남겨주시면 답변드리겠습니다~!