1.セルオートマトンの定義と適用範囲
一般的な動的モデルとは異なり、セルオートマトンは厳密に定義された物理方程式や関数によって決定されるのではなく、一連のモデル構築ルールによって構成されます。これらのルールを満たすモデルは、セルオートマトンモデルと見なすことができます。したがって、セルオートマトンはモデルのクラスまたはメソッドフレームワークの総称です。その特徴は、時間、空間、および状態がすべて離散的であり、各変数が取る状態の数が有限であり、状態変更のルールが時間と空間でローカルであるということです。
セルオートマトン-山火事や感染症のシナリオに適用
最近、セルオートマトンモデルに触れて、データ検索をして調べてみました。オーストラリアが遼州になり、コアラが焼きになります!オーストラリアの山火事を制御するのが難しいのはなぜですか?
あなたが学んだことを以下に記録してください。
山火事のセルオートマトンの原理
セルオートマトンモデルでは、空間はグリッドに離散化され、各グリッドはセルと呼ばれます。森林火災セルには、ツリー、火災(燃えているツリー)、および空(オープンスペース)の3つの状態があります。次の瞬間にセルの状態を更新するためのルールは次のとおりです。
ツリーが火に変わります:ツリーが上、下、左、右の火の状態にある場合、次の瞬間に火になります。または、木が稲妻に出会うと、次の瞬間に火に変わります。雷のために窮状が発火する可能性は非常に低いです。
火が空になる:次の瞬間に火が空になります。
空いている木:オープンスペースの次の瞬間、新しい木はPgrowthの小さな確率で成長します。
改良されたモデルは、木の対角線上の位置が燃えているかどうかを考慮します。または、風向を考慮します(たとえば、風が西から西に吹く場合(東から西に吹く場合)、火の西側で発火する確率が高くなり(風下)、火の東側での発火は減少します(風上)。写真は次のとおりです。写真aは基本的なセルラーオートマトン、図bは対角線を考慮したセルラーオートマトン、図cは西風のセルラーオートマトンです。 。
ここでは、基本的なセルオートマトン、対角線の状況を考慮したセルオートマトン、西風を伴うセルオートマトンの3つのモデルをシミュレートします。シミュレーション結果は次のとおりです。
P=[];
for m=1:10
clear D T fire_time_lightning fire_time_itself aspect tdata Index;
%% Orginal
%the first 3 dimension is RGB,R is the fire,G is the tree.
%Black is the meaning of no tree.
global n D T Y fire_time_lightning fire_time_itself fire_time_demend pull aspect count_1 tdata Pull_times
n=500; % the length of the forest matrix
D=zeros(n);
T=zeros(n);
Y=zeros(n,n,3); % draw the picture by matrix Y(RGB)
fire_time_lightning=0;
fire_time_itself=0;
fire_time_demend=0;
times=1;
pull=1/times; % the rate of pull the fire out
aspect=ceil(rand(1)*4); % 1 is right,2 is up,3 is left and 4 is down.
count_1=0;
tdata=[]; % the day by each fire happened.
Pull_times=0;
f1=1/1000; % f1 is the probability in ceil when it being struck by lightning.
f2=1/500; % f2 is the probability in ceil when it being fired itself.
Z=Terrain();
[scale_b,S]=Forest(Z);
Tem=S;
Yi=imshow(Y);
set(gcf,'DoubleBuffer','on');
% set up the double cache to prevent the flash in palying animation constantly
t=0;
tp=title(['T = ',num2str(t)]);
%ap=title(['aspect = ',num2str(aspect)]);
%while 1
% t=t+1;
for t=1:2400
%% Fire in the early time
if rem(t,50)==0&&t<1000
Fire_Demand(S);
end
%% Lightning
if rand<f1 %Is there happen sth with lightning?
OriginFireLightning(S);
set(Yi,'CData',Y);
end
%% Fire itself
if t>10
OriginFireCritical(S,t,f2);
set(Yi,'CData',Y);
end
%% FireRule1
[a,b]=FireRule1(S);
%% FireRule2
S=FireRule2(S,a,b);
set(Yi,'CData',Y);
set(tp,'string',['T = ',num2str(fix(t/(24))),'D = ',num2str(t),'h '])
%set(ap,'string',['aspect = ',num2str(aspect)])
pause(2e-6)
end
scale_n=sum(sum(Y(:,:,2)));
fire_count=fire_time_itself+fire_time_lightning;
Lost_area=scale_b-scale_n;
Lost_rate_all=Lost_area/scale_b;
Lost_rate_average=Lost_rate_all/(fire_count);
Tem=Tem-S;
Tem=Tem.*Tem;
%Lost_Value=sum(sum(Tem));
%N=[pull Lost_rate_all Lost_rate_average fire_count]
P=[P;fire_time_demend Pull_times Lost_rate_all fire_time_itself fire_time_lightning]
%figure (2)
%plot(tdata(:,1),tdata(:,2));
end
QQ1575304183を追加するために、コードを完成させるか、記述してください