2011-08-12 64 views
3

我想編碼一個遺傳算法,學習玩類似於俄羅斯方塊的遊戲。遊戲本身相對簡單;我已經寫下了它的完整行爲。我將如何去編碼這個遺傳算法?

遊戲:

  • 基於柵格,12x16。
  • 您必須清除網格中的塊。
  • 每5個刻度線添加一排新塊,向下推動塊。
  • 您只能清除相同類型塊的簇。
  • 隨着遊戲的進行,塊的類型數量會增加。
  • 您只能清除3或以上的簇。
  • 對於每個羣集清除,(CLUSTER_SIZE - 3)^2被添加到BLOCK_SCORE。
  • 將簇從網格中移除後,上面的塊將向下滑動以填充間隙,並且如果在此之後存在任何水平間隙(在底行),則間隙的左側移動以填充它。
  • 這個遊戲的目標是儘可能長存。時間以蜱或者你所做的動作數來衡量。
  • 您的得分(或健身)取決於(TIME_ALIVE * BLOCK_SCORE)
  • 一旦一塊到達網格頂部,遊戲結束。

這個遊戲的分數合併長壽和效率。您清除的羣集越大,適應度就越高。

我已經編寫了幾個GAs,但他們一直基於本地競爭,像收集目標之類的東西,VS其他個人。 我的問題是我不知道如何解決這個問題。這個新的GA的每個不同的個人應該只有當前的網格作爲輸入。 (至少,這是我認爲會需要的)

我該如何開始爲此編碼GA?我不能爲了我的生活而努力。

感謝所有,

STEFFAN 'Ruirize' 詹姆斯

+0

從你的行爲中,每個人都會玩遊戲並獲得可以與其他人比較的分數 - 我不確定問題出在哪裏? –

+0

問題是在代碼中設置它;我需要什麼樣的特質等等。 –

+0

什麼是'移動'?你有選擇添加什麼類型的塊,或者你可以移動一個剛添加的塊,或者是什麼? –

回答

2

在你的人口將是一個遊戲中的每個個體播完。每個人的屬性將成爲定義給定策略的必要參數。我假設你有幾個不同的啓發式設置塊。策略的一個例子是從可用的策略中隨機選擇一個啓發式,這樣你的屬性就是一組選擇給定啓發式的概率。你能提供更多關於你擁有的k地點啓發式的信息嗎?

+0

塊沒有放置,它們被清除。每5個滴答,一個新的隨機行被添加到已經存在的塊的底部,將網格的內容向上推。 –

+0

好的,你能提供更多關於啓發式方法的信息嗎?或者你期待GA來設計啓發式方法嗎? – cordialgerm

+0

我只有幾個:身高不好。小羣集非常糟糕。在清除較低的堆棧之前,請着重放下較高的堆棧。 –

1

另一種編碼可能涉及:

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值遺傳和進化它們。假設,例如,perBlockClearedEmphasis將朝高數值發展,而您的啓發式「高度差」將驅使perColumnHeightEmphasis爲負數,並且clusterSizeXEmphasis對於小X將爲負數,對於較大X將爲負數。

從最普遍的意義上,這表明你的遺傳結構描述了一個陳述性的,但是高度參數化的程序。

+0

我明白了。那麼,我會試試這個,回到你身邊,謝謝:) –