2012-01-12 24 views
2

我正在Python中編寫一個關於虛擬生物體的最優系列移動的遺傳算法,這個虛擬生物體將在2D網格中獲得最隨機放置的食物。它沒有智慧;它只是在一個模式,即圓形或方形移動。我的用於創建2D陣列的環境,生物體駐留在代碼是這樣的:如何爲我的遺傳算法創建環境?

grid = ([]) 
for i in range(5): 
    grid[i]=0 
    for j in range(5): 
     grid[i][j]=0 

(板[4] [5]是指在X 4,5,Y;和電路板的值[4] [5]爲0或1,具體取決於 是否佔用空間,現在程序實際上只給每個空間分配一個零值,表示沒有個人存在)

它只是說「列表分配索引超出範圍「。我怎樣才能解決這個問題?順便說一下,有沒有人知道更好的方式來創建有機體的2D環境?

+1

你的問題類似於遺傳編程中的[人工螞蟻問題](http://www.cs.ucl.ac.uk/staff/ucacbbl/bloat_csrp-97-29/node2.html)。如果你有興趣,這個問題已經在Python中用[DEAP](http://deap.googlecode.com)實現。以下是示例[link](http://code.google.com/p/deap/source/browse/examples/gp_ant.py)。 – CmdNtrf 2012-01-12 21:58:21

回答

3

現在你的數組只有一個元素,並且你正在索引數組之外。試試這個

grid = [[[] for x in xrange(5)] for y in xrange(5)] 

代替你的網格。這會給你一個5乘5的網格,現在你可以對網格進行索引[3] [4]。

+0

謝謝!工作正常。 – OverflowedStack 2012-01-12 08:13:21

2

這很可能需要對您的健身功能進行大量評估,因此有效的實施可能會對您非常有益。 Numpy提供了開箱即用的多維數組。

numpy.zeros((5, 5)) 

它會給你一個填充零的5x5陣列。 Numpy還提供了很好的功能,例如統計值的出現次數,這將比純Python實現快得多。

+0

謝謝;我會嘗試一下numpy。 – OverflowedStack 2012-01-12 08:13:06