유전 알고리즘(Python)으로 마리오를 제거하려고 했는데

개시하다


(자작) 나는 유전 알고리즘으로 게임을 통관했다.
  • pygame로 제작된 마리오: Mario-Level-1
  • 어떤 의미에서 마리오의 유전 알고리즘과 신경 네트워크로만 학습하면 완전히 자동으로 통과되는'MarI/O'
  • 게임 상세 정보


    규칙은 간단하다. 조작은 점프를 통해 다가오는 장애물을 교환할 뿐이다.
    qita자료81GApic.twitter.com/RqHsxoe2AC-평야북두(@Default 8058)2018년 7월 30일

    장애물의 위치는 고정되어 있으며, 아래 그림과 같다.



    유전 알고리즘


    유전 알고리즘은 랜덤으로 초기값(유전자)을 주고 선택, 교차, 갑작스런 변이를 반복하는 조작을 통해 자신도 모르게 가장 좋은 결과를 얻는 것을 말한다(이렇지 않을 수도 있다)p>
    쉽게 말하면 강자 우 선생은 강자와 약자가 있는 집단에 존재한다p>

    가 바로 생명을 모방하는 알고리즘 아닙니까?


    더 자세한 내용은 다른 사람에게 맡기고, 간략화된 책 링크를 소개하겠습니다.



    검증 방법


    유전 알고리즘을 처음 사용할 때 데이터는 유전인자(코드)로 표시됩니다.


    이번 상황은 한 개체가 결승점에 도착하기 전에 10번의 행동을 하는 것이다.


    에 따라 다음과 같은 조건에 따라 길이가 10인 유전자(=[①, ②, ③, ④, ⑤, ⑥, ⑥, ⑥, ⑥,],]) 제작p>

    • ジャンプする: 1
    • ジャンプしない: 0


    하나의 예로 만약에 어떤 개체가 위의 그림에서 보듯이 운동을 결정한다면 유전인자는


    개체의 유전자=[0,0,1,0,1,0,1,1,0,1]


    .


    그리고 집단에서 어떻게 우수(적응도가 높은) 개체를 선택하는지 결정합니다.


    선택 방법은 여러 가지가 있는데, 이번에는 토너먼트 선택법을 채택하였다.


    이것은 현 세대에서 랜덤으로 n개의 개체를 추출하여 적응도가 가장 높은 개체를 선택하여 다음 세대의 그룹으로 복제하는 것이다


    다음 세대의 개수가 현 세대와 같은 N개가 될 때까지 이 동작을 반복합니다.


    마지막으로 개체의 적응도를 확인하는 평가 함수를 설정합니다.


    (실제로 이 평가 함수의 정의는 매우 어렵다.)


    이번엔 전진거리를 점수로 사용합니다.


    즉, 종점에 가장 가까운 개체를 우수하다고 정의합니다.


    하나의 실험으로 장애물이 없는 곳(②,⑤,⑤)에서 쓸모없는 점프를 하지 않기 위해 점프 횟수에 비례한 벌칙을 부여합니다


    ,


    適応度 = スコア ー (ペナルティ × ジャンプ回数)


    .


    이렇게 하면 같은 거리까지 전진할 수 있는 단체 중 쓸모없는 점프를 하지 않은 개체의 적응도가 높아진다p>

    그리고 개체수, 세대수와 기타 매개 변수를 적당히 확정하여 계산합니다.


    결실


    유전 알고리즘의 프로그램 참조여기.p>

    검증 조건은 다음과 같습니다:


    • 유전자 길이: 10
    • 세대당 개체수: 4
    • 교차율: 0.5
    • 개체 돌연변이율: 0.2
    • 유전자 돌연변이율(한 유전자에 대한 돌연변이율):0.3
    • 세대수: 100

    다음은 내가 환경에서 보여준 예이다.


    먼저 0세대(랜덤 초기치)의 4개 개체로 모두 ①개 장애물로 끝납니다.






    다음 세대에는 ①개의 장애물을 초과한 개체가 일찍부터 있다(교차 돌연변이로)p>





    3세대 중 개체 적응도가 높지만 선택에서 랜덤 토너먼트법을 사용했기 때문에 다음 세대에 계승되지 않았습니다.p>





    나이가 들면서 유전자도 진화하여 70대가 도달할 수 있는 개체를 형성하였다p>
    하지만 ②에서 쓸모없는 점프를 하고 있습니다.






    드디어 81대에게 쓸모없는 도약을 해주지 않는 완벽한 개체를 완성했다p>


    실행 프로그램과 실행 사례에서 진화 과정의 로그 파일이 Github로 상승p>

    まとめ


    유전 알고리즘은 상대적으로 간단한 알고리즘으로 시도하기 쉬우나 수학적으로 수렴 조건이 없는 인도주의적 방법이라는 것을 이해해야 한다p>

    또한, 초기값에 의존하기 쉬우므로 국부 최적해로 빨리 수렴할 수 있음을 주의해야 합니다.


    이를 바탕으로 다양한 대응 방법을 제시했는데, 유명한 점은 선택한 토너먼트법이 룰렛으로 변경되는 등이다.p>

    윤판법은 적응도의 확률에 따라 개체를 선택한다.


    最後に


    파이톤으로 게임을 만드는 건 처음이지만,'pygame'라는 프로그램 라이브러리를 사용해 쉽게 만들 수 있다.p>

    다음, 나는 스스로 미로를 모색하고'Q학습'을 시도하고 싶다.


    좋은 웹페이지 즐겨찾기