[Unity] 유전 알고리즘으로 축구를 했어요.

이것은 Unity 부드러운 여름advent 달력 2018의 8/25 문장이다
유전 알고리즘으로 얼마나 멀리 축구를 했는지

결실


제1세대


유전 알고리즘 1세대pic.twitter.com/Idat2iMmIz - 후낫가(@hitsumasf)2018년 8월 25일

마지막 세대




全過程




ざっくりとした方法説明


遺伝的アルゴリズムとは




유전자를 많이 준비했어요.
저한테 맡겨주세요.
가장 적합한 유전자를 찾다
어쨌든 최적화


이번에 발 모형을 많이 준비했어요.
시뮬레이션을 진행하다
최대한 멀리 공을 차는 20명의 발에만 교배하는 것을 허락했다
또 100위 이내로 진입하지 못한 발은 자손을 남길 기회를 잃었다...


サッカーボールを蹴る方法


足のモデル


발 모델은 이런 느낌

빨간색 부분은 관절의 가동 구역(평면 운동을 제한함)



무릎 아래 부분(두 번째 다리)에만 힘을 주어 다리를 움직인다


遺伝子には何の情報を入れるか


유전자에 발에 가해진 힘(정확히 모멘트)의 값(범위는 -60~100)이 들어있습니다



위의 그림처럼 시간이 지나면 왼쪽 값부터 순서대로 비틀림의 구조

그러니까 정확히 말하면 이 문제는
시간 안에 축구를 최대한 멀리 날리게 하는 유전자가 무엇인지.
즉,


遺伝的アルゴリズムの設定


상세 설정은 아래


인코딩: 실제 수치(인코딩하지 않음)

평가:공의 도착 거리

선택: 엘리트주의 (공의 최장거리 형태를 알기 위해)교차: SPX(변수 간에 의존 관계가 있을 수 있기 때문)

돌연변이: 필요없다(SPX, BLX에서 부개체의 분포보다 자개체의 분포가 더 넓은 경향이 있기 때문이다)


SPXについての参考リンク


まとめ


이렇게 간단한 문제라면 곧 최적화되겠죠

10대 정도는 변화가 없습니다

확장률 설정이 너무 커서 SPX가 제대로 작동하지 않는 것 같아...


GitHub에서 공개: SocckerGA


좋은 웹페이지 즐겨찾기