動態再結晶CA法模擬基礎之生命遊戲入門

2021-10-17 19:07:39 字數 2565 閱讀 9583

遊戲規則如下:

給定單元的鄰居是與它在垂直,水平或對角上的8個單元。

如果1個單元為活的,但沒有鄰居單元是活的,或者僅有乙個鄰居單元是活的,則在下一代,此單元

會因為孤獨而死亡。

如果1個單元周圍有2個或者3個鄰居單元為生,則該單元在下一代也是活的。

如果1個單元是死的,則在下一代,如果它剛好有3個鄰居單元是活的,則此單元變成活的。

所有其它死的單元在下一代仍然是死的。

如果1個單元為活的,且有4個或者4個以上鄰居單元是活的,則在下一代,此單元會因為擁塞而死亡。

所有出生和死亡都剛好在同一時間發生,則此單元的死亡有助於另乙個單元的出生,但它不能通過

減少擁塞而阻止其他單元的死亡;正在出生的單元也不能保護或者殺死上一代中活的單元。

規則簡述為:

- 當該元胞為存活狀態時,周圍有2-3個存活元胞,其狀態為活;否則為死。

- 當該元胞為死亡狀態時,周圍有3個存活元胞,該元胞則復活。12

3456

789

5表示中心元胞,1—9為其鄰居。在程式設計時為使用矩陣表示其狀態,以i表示行,j表示列,可寫成如下形式。

i-1,j-1

i-1,j

i-1,j+1

i,j-1i,ji,j+1

i+1,j-1i+1,ji+1,j+1

i,j表示中心元胞,其餘為其鄰居。

依此規則進行迭代變化,使單元生生死死,會得到一些有趣的結果。該遊戲之所以被稱為「生命遊戲」,是因為其簡單的遊戲規則,反映了自然界中的生存規律:如果乙個生命,其周圍的同類生命太少的話,會因為得不到幫助而死亡;如果太多,則會因為得不到足夠的資源而死亡。

s=50;      % 棋盤寬,棋盤是方的,即每行每列可以有100個元包自動機

w=8; % 每乙個元包的畫素寬度

board=zeros(w*s,s*w); %棋盤

state=zeros(s,s); %元包自動機的狀態

newstate=zeros(s,s);

%% 初始化

for i=1:s

for j=1:s

if rand<0.4 % 隨機在棋盤上以0.4的生存概率設定自動機狀態

state(i,j)=1; % 其實分的隨機設定狀態會導致非常離散的點,最後收斂時棋盤上剩下些孤立的點

endend

endfigure;

%% 更新狀態

for k=1:1000

for i=1:s

for j=1:s

% 計算鄰居著活著的個數

cnt=0;

%邊界上的元胞無法取其8鄰居

if i-1>0&&j-1>0%左上鄰居

cnt=cnt+state(i-1,j-1);

endif i-1>0&&j+1<=s%右上鄰居

cnt=cnt+state(i-1,j+1);

endif i+1<=s&&j+1<=s%右下鄰居

cnt=cnt+state(i+1,j+1);

endif i+1<=s&&j-1>0%左下鄰居

cnt=cnt+state(i+1,j-1);

endif j-1>0%左鄰居

cnt=cnt+state(i,j-1);

endif j+1<=s%右鄰居

cnt=cnt+state(i,j+1);

endif i-1>0%上鄰居

cnt=cnt+state(i-1,j);

endif i+1<=s%下鄰居

cnt=cnt+state(i+1,j);

end% 更新狀態、著色

newstate(i,j)=state(i,j);

if state(i,j)==0

if cnt==3

newstate(i,j)=1;

endelseif state(i,j)==1

if cnt<2||cnt>3%0,1,4,5,6,7,8

newstate(i,j)=0;

endend

if newstate(i,j)==0

board(((i-1)*w+1):i*w,((j-1)*w+1):j*w)=0;

else

board(((i-1)*w+1):i*w,((j-1)*w+1):j*w)=255;

endend

endstate=newstate;

imshow(board);

pause(0.3);

end

規則參考

「愛加密」 動態脫殼法

測試環境為 安卓2.3 ida6.6 下面看具體操作步驟 具體怎樣用ida動態除錯我就不多說了,網上己經有很多文章了,下面直接進入正題。1.準備好調式環境後 用ida附加程序。2.附加成功後按 g 鍵 跳到dvmdexfileopenpartial函式與fopen函式與fgets函式去下好斷點。3....

動態規劃 常見做法 填表法

填表法,是dp最常見的做法。以未知的量為基礎,通過已知的量來重新整理當前的未知量。這是dp最基礎的做法。通常,我們大多題目都可以用這種方法實現。楊輝三角 description 楊輝三角是二項式係數在三角形中的一種幾何排列。它的每個數等於它上方兩數之和,每行數字左右對稱,由 1 開始逐漸變大。1 1...

揹包問題 蠻力法,動態規劃

給定重量分別為,價值分別為的n件物品,和乙個承重為w的揹包。求這些物品中乙個最有價值的子集,並能裝到揹包中。揹包問題的蠻力解法是窮舉這些物品的所有子集,找出能夠裝到揹包中的所有子集,並在這些子集中找出價值最大的子集。揹包問題 蠻力法 include include define maxx 9999 ...