1)二維陣列
想象乙個二維陣列。它的所有元素取值為1或者0。取值為1表示在該元素的位置有乙個生命,取值為0表示此位置沒有生命。
2)鄰居
3×3的二維陣列,與中心元素相鄰的有8個元素,設想為各元素有8個鄰居。
3)生存
生命代代相傳,生生不息。如果某個生命有2個,或者3個鄰居,則該生命能夠存活到下一代。
4)繁衍
如果某個空格有3個鄰居,則到下一代,該空格將誕生乙個新生命。
import numpy as np
import matplotlib.pyplot as plt
r =40
# 行數
c =90
# 列數
a = np.zeros(
(r+2
, c+2)
)# 記錄生命的二維陣列a[1
:r+1,1
:c+1
]= np.random.randint(0,
2,(r,c)
)b = a.copy(
)# 用b計算鄰居個數,以更新a
plt.ion(
)plt.xticks(
none
)for step in
range
(200):
for i in
range(1
, r+1)
:for j in
range(1
, c+1)
: x = b[i-
1:i+
2,j-
1:j+2]
.sum()
-b[i,j]
# 計算鄰居個數
if x ==3:
# 3個鄰居,生命延續或誕生新生命
a[i,j]=1
elif x !=2:
# 不是2個鄰居,生命終結
a[i,j]=0
plt.clf(
) plt.imshow(a)
plt.pause(
0.2)
# 慢慢來
b[:]
= a # 更新b,而不是引用
plt.ioff(
)
在命令列中執行效果更好,如文首的gif所示
c> python life.py
【上乙個謎題】**急轉彎——tupper(塔珀自指公式)
【下乙個謎題】**急轉彎——高維線性可分
元胞自動機
即生命遊戲,今天下午迅雷的筆試程式設計題。簡單的版本,給定當前的狀態,給出下乙個時刻的狀態。status函式獲取某點當時周圍的活的細胞數量,寫的比較渣 include include include using namespace std define max 10010 int status ve...
元胞自動機
這 幾個關於元胞自動機的問題 元胞自動機 森林火災模型 規則 1 正在燃燒的樹變成空格位 2 如果綠樹格位的最近鄰居中有乙個樹在燃燒,則它變成正在燃燒的樹 3 在空格位,樹以概率p生長 4 在最近的鄰居中沒有正在燃燒的樹的情況下樹在每一時步以概率f 閃 電 變為正在燃燒的樹。參考文獻 祝玉學,趙學龍...
元胞自動機
元胞自動機 ca 是一種用來 區域性規則和區域性聯絡的方法。典型的元胞自動機是定義在網格上的,每乙個點上的網格代表乙個元胞與一種有限的狀態。變化規則適用於每乙個元胞並且同時進行。典型的變化規則,決定於元胞的狀態,以及其 4 或 8 鄰居的狀態。森林火災元胞自動機模型 一片森林由於自然或人為原因,有一...