2011-08-12 4 views
3

테트리스와 비슷한 게임을 배우는 유전 알고리즘을 코딩하고 싶습니다. 게임 자체는 비교적 간단합니다. 나는 그것의 모든 행동을 아래에 적었다.이 유전 알고리즘을 코딩하는 방법은 무엇입니까?

게임 : 기반

  • 그리드, 12x16.
  • 그리드에서 블록을 지워야합니다.
  • 새로운 블록 행이 5 틱마다 하단에 추가되어 블록을 밀어 올립니다.
  • 동일한 유형 블록의 클러스터 만 지울 수 있습니다.
  • 게임이 진행됨에 따라 블록 유형의 수가 증가합니다.
  • 3 이상의 클러스터 만 지울 수 있습니다.
  • 모든 클러스터가 지워짐에 따라 (CLUSTER_SIZE - 3)^2이 BLOCK_SCORE에 추가됩니다.
  • 클러스터를 그리드에서 제거한 후 위의 블록이 틈을 메꾸기 위해 아래로 슬라이드하고이 다음에 수평 간격 (맨 아래 줄에)이 있으면 틈의 왼쪽이 이동하여 채 웁니다.
  • 이 게임의 목표는 가능한 오래 살아남는 것입니다. 시간은 진드기 또는 당신이 만든 움직임의 수로 측정됩니다.
  • 점수 (또는 피트니스)는 (TIME_ALIVE * BLOCK_SCORE)에 의해 결정됩니다.
  • 블록이 그리드 상단에 도달하면 게임이 끝납니다.

이 게임의 점수는 수명과 효율성 모두를 포함합니다. 선택을 취소 한 클러스터가 클수록 적합도가 높아집니다.

나는 지금 몇몇 GA를 코딩했지만 지역 경쟁, 수집 목표와 같은 것, 다른 VS 개인을 기반으로했습니다. 내 문제는이 문제에 접근하는 방법을 모른다는 것입니다. 이 새로운 GA의 각기 다른 개인은 입력으로 작업 할 현재 그리드 만 가져야합니다. (적어도 그것이 내가 필요하다고 생각하는 것입니다)

어떻게 이것을 위해 GA를 코딩 할 수 있습니까? 나는 내 인생이 그것을 해결할 수는 없다.

.

모두 감사합니다,

는 스테판 'Ruirize'제임스

+0

귀하의 행동에서 각 개인이 게임을하고 다른 개인과 비교할 수있는 점수를 얻습니다. 문제가 무엇인지 모르겠습니다. –

+0

문제는 코드에서이를 설정하는 것입니다. 어떤 종류의 특성이 필요할 지 등 –

+0

'이동'이란 무엇입니까? 어떤 종류의 블록이 추가되는지 또는 방금 추가 된 블록을 이동할 수 있는지, 또는 무엇을 선택할 수 있습니까? –

답변

2

게임을 대표 할 당신의 인구 각 개인은 완료했다. 각 개인의 속성은 블록 배치를위한 주어진 전략을 정의하는 데 필요한 매개 변수입니다. 블록을 배치하기위한 몇 가지 다른 방법이 있다고 가정합니다. 전략의 한 가지 예는 사용 가능한 전략에서 무작위로 휴리스틱을 선택하는 것입니다. 따라서 속성은 주어진 휴리스틱이 선택되는 확률의 집합이됩니다. 블록 k 배치 휴리스틱에 대해 더 많은 정보를 제공 할 수 있습니까? 유전자

for each possible move 
    set phenotypeBehavior to 0 
    calculate the post-move position 
    foreach block cleared add a perBlockClearedEmphasis value to phenotypeBehavior 
    foreach column add a perColumnHeightEmphasis value to your phenotypeBehavior 
    foreach cluster of size x, add a clusterSizeXEmphasis value to your phenotypeBehavior 
choose the move that produces the highest phenotypeBehavior 

인코딩에게 다양한 _foo_Emphasis 값을하고 진화 :

+0

블록이 배치되지 않고 지워집니다. 매 5 틱마다 새로운 임의의 행이 이미 존재하는 블록의 하단에 추가되어 그리드의 내용이 위로 올라갑니다. –

+0

블록을 지워야하는 휴리스틱에 대한 자세한 정보를 제공 할 수 있습니까? 아니면 GA가 경험적 방법을 설계 할 것으로 기대합니까? – cordialgerm

+0

나는 몇 가지 밖에 가지고 있지 않다. 높이가 나쁘다. 소규모 클러스터는 상당히 나쁩니다. 낮은 스택을 지우기 전에 높이 스택을 낮추는 데 집중하십시오. –

1

또 다른 인코딩을 포함 할 수도 있습니다.예를 들어, perBlockClearedEmphasis는 높은 값으로 이동하고 경험적 "높이가 나쁜"경우는 perColumnHeightEmphasis가 음수가되고 clusterSizeXEmphasis는 작은 X가 음수, 큰 X가 양수가됩니다.

가장 일반적인 의미에서 이것은 당신의 유전자 구조가 선언적이지만 고도로 매개 변수화 된 프로그램을 기술하고 있음을 암시합니다.

+0

나는 봅니다. 글쎄, 나는 이것을 밖으로 시도하고 다시, 고마워. :) –

관련 문제