此文為準備2023年美賽期間所聽取的基於元胞自動機模擬新興肺炎病毒的傳播與控制課程筆記。
其中關於各組成成分的細節描述如下:
週期性邊界
固定邊界:所有邊界外元胞均取某一固定常量。
conway的生命遊戲機
規則:(1)對周圍的8個近鄰的元胞狀態求和
(2)如果總和為2的話,則下一時刻的狀態不改變
(3)如果總和為3,則下一時刻的狀態為1
(4)否則狀態為0
%% 核心**如下
%main event loop
stop= 0; %wait for a quit button push
run = 0; %wait for a draw
freeze = 0; %wait for a freeze
while (stop==0)
if (run==1)
%nearest neighbor sum 對相鄰8個元胞的總和
sum(x,y) = cells(x,y-1) + cells(x,y+1) + ...
cells(x-1, y) + cells(x+1,y) + ...
cells(x-1,y-1) + cells(x-1,y+1) + ...
cells(3:n,y-1) + cells(x+1,y+1);
% the ca rule
cells = (sum==3) | (sum==2 & cells);
%draw the new image
set(imh, 'cdata', cat(3,cells,z,z) )
%update the step number diaplay
stepnumber = 1 + str2num(get(number,'string'));
set(number,'string',num2str(stepnumber))
endif (freeze==1)
run = 0;
freeze = 0;
enddrawnow %need this in the loop for controls to work
end
%% 核心**如下
%main event loop
stop= 0; %wait for a quit button push
run = 0; %wait for a draw
freeze = 0; %wait for a freeze
while (stop==0)
if (run==1)
%nearest neighbor sum
sum(x,y) = cells(x,y-1) + cells(x,y+1) + ...
cells(x-1, y) + cells(x+1,y) + ...
cells(x-1,y-1) + cells(x-1,y+1) + ...
cells(3:n,y-1) + cells(x+1,y+1)+...
cells(x,y);
% the ca rule
cells = ~((sum<4) | (sum==5));
%draw the new image
set(imh, 'cdata', cat(3,cells,z,z) )
%update the step number diaplay
stepnumber = 1 + str2num(get(number,'string'));
set(number,'string',num2str(stepnumber))
endif (freeze==1)
run = 0;
freeze = 0;
enddrawnow %need this in the loop for controls to work
end
滲流集群
規則:(1)對周圍相鄰的8鄰居求和(元胞只有兩種狀態0和1)。元胞也有乙個單獨的狀態參量(所謂「記錄」)用於記錄它們之前是否有非零狀態的鄰居。
(2)在0與1之間產生乙個隨機數r。
(3)如果總和》0(至少乙個鄰居)並且r > 閾值,或者元胞從未有過乙個鄰居,則元胞=1.
(4)如果總和》0,則設定「記錄」的標誌,記錄這些元胞有乙個非零的鄰居。
其中閾值自己設定。
激發介質(bz振盪反應)
規則:(1)元胞有10個不同的狀態。狀態0是休眠,1-5位活躍狀態,6-9是極活躍狀態。
(2)計算每乙個處於活躍的元胞近鄰的8個元胞。
(3)如果和大於或等於3(至少有三個活躍的鄰居),則下一時刻該元胞=1.
(4)不需要其他輸入,1至9種狀態依次出現。如果該時刻狀態=1,那麼下一時刻狀態=2.如果該時刻狀態=2,然後下一時刻狀態=3,對於其他狀態,依次類推,直到第9種狀態。如果狀態=9,然後下一狀態=0並且元胞回到休息狀態。
深林火災
規則:(1)元胞有3個不同的狀態。狀態為0是空位,狀態為1是燃燒的樹木,狀態為2是樹木。如果4個鄰居中有乙個或乙個以上的是燃燒著的並且自身是樹木(狀態為2),那麼該元胞下一時刻的狀態是燃燒(狀態為1)。
(2)森林元胞(狀態為2)以乙個低概率(例如0.000005)開始燒(因為閃電)。
(3)乙個燃燒著的元胞(狀態為1)在下一時刻變成空位的(狀態為0)。
(4)空元胞以乙個低概率(例如0.01)變為森林以模擬生長。處於矩陣邊界連線的考慮,如果左邊界開始著火,火勢將向右蔓延,右邊界同理。同樣適用於頂部和底部。
重點**如下:
for i=1:3000
%nearby fires?
sum = (veg(1:n,[n 1:n-1])==1) + (veg(1:n,[2:n 1])==1) + ...
(veg([n 1:n-1], 1:n)==1) + (veg([2:n 1],1:n)==1) ;
veg = ...
2*(veg==2) - ((veg==2) & (sum>0 | (rand(n,n)總體而言使用元胞自動機進行建模求解,需要根據各自求解的問題預先定義好元胞的規則。
元胞自動機
即生命遊戲,今天下午迅雷的筆試程式設計題。簡單的版本,給定當前的狀態,給出下乙個時刻的狀態。status函式獲取某點當時周圍的活的細胞數量,寫的比較渣 include include include using namespace std define max 10010 int status ve...
元胞自動機
這 幾個關於元胞自動機的問題 元胞自動機 森林火災模型 規則 1 正在燃燒的樹變成空格位 2 如果綠樹格位的最近鄰居中有乙個樹在燃燒,則它變成正在燃燒的樹 3 在空格位,樹以概率p生長 4 在最近的鄰居中沒有正在燃燒的樹的情況下樹在每一時步以概率f 閃 電 變為正在燃燒的樹。參考文獻 祝玉學,趙學龍...
元胞自動機
元胞自動機 ca 是一種用來 區域性規則和區域性聯絡的方法。典型的元胞自動機是定義在網格上的,每乙個點上的網格代表乙個元胞與一種有限的狀態。變化規則適用於每乙個元胞並且同時進行。典型的變化規則,決定於元胞的狀態,以及其 4 或 8 鄰居的狀態。森林火災元胞自動機模型 一片森林由於自然或人為原因,有一...