1. 세포 자동 장치의 정의 및 적용 범위
일반적인 동적 모델과 달리 셀룰러 오토마타는 엄격하게 정의 된 물리 방정식이나 함수에 의해 결정되지 않고 일련의 모델 구성 규칙으로 구성됩니다. 이러한 규칙을 충족하는 모든 모델은 셀룰러 오토마타 모델로 간주 할 수 있습니다. 따라서 셀룰러 오토마타는 모델 클래스 또는 메서드 프레임 워크에 대한 일반적인 용어입니다. 그 특징은 시간, 공간 및 상태가 모두 이산 적이며 각 변수는 한정된 수의 상태 만 취하며 상태 변경 규칙은 시간과 공간에서 로컬이라는 것입니다.
산불 및 전염병 시나리오에 적용되는 세포 자동화 장치
최근에 나는 셀룰러 오토마타 모델과 접촉하여 데이터를 검색하고 연구했습니다.이 기사는 호주가 랴오 저우가되고 코알라가 구워지는 것을 추천합니다 ! 호주 산불이 통제하기 어려운 이유는 무엇입니까?
배운 내용을 아래에 기록하십시오.
산불의 Cellular Automata의 원리
셀룰러 오토마타 모델에서 공간은 그리드로 이산화되고 각 그리드를 셀이라고합니다. 산불 셀에는 나무, 불 (타는 나무) 및 빈 (열린 공간) 상태의 세 가지 상태가 있습니다. 다음 순간에 세포의 상태를 업데이트하는 규칙은 다음과 같습니다.
나무가 불로 변 합니다 : 나무가 불의 상태가 위, 아래, 왼쪽, 오른쪽이면 다음 순간에 불이됩니다. 또는 나무가 번개를 만나면 다음 순간에 불이됩니다. 곤경은 번개로 인해 불이 붙을 가능성이 거의 없습니다.
불이 비게 됨 : 다음 순간에 불이 비게됩니다.
빈 나무 : 다음 순간에 열린 공간에서 작은 확률로 Pgrowth의 새로운 나무가 자랄 것입니다.
개선 된 모델은 나무의 대각선 위치가 불타고 있는지 여부를 고려합니다. 또는 풍향을 고려하십시오 (예를 들어, 바람이 서쪽에서 서쪽으로 불면 (동에서 서쪽으로 불이 불), 불의 서쪽에서 불이 붙을 확률이 증가하고 (바람) 불의 동쪽에서 불이 붙는 것은 감소 할 것입니다 (상향 바람). 여기 사진이 있습니다 : 그림 a 이것은 기본적인 셀룰러 오토 마톤, 그림 b는 대각선을 고려한 셀룰러 오토 마톤, 그림 c는 서풍이있는 셀룰러 오토 마톤입니다. .
여기서는 기본 셀룰러 오토마타, 대각선 상황을 고려한 셀룰러 오토마타, 서풍이있는 셀룰러 오토마타의 세 가지 모델을 시뮬레이션합니다. 시뮬레이션 결과는 다음과 같습니다.
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을 추가하는 대신 코드를 작성하거나 작성하십시오.