前些天發現一個通俗易懂,風趣幽默的人工智能學習網站:
傳送門
A 簡介
1 歷史
最初的元胞自動機是由馮 · 諾依曼在 1950 年代為模擬生物 細胞的自我復制而提出的. 但是并未受到學術界重視.
1970 年, 劍橋大學的約翰 · 何頓 · 康威設計了一個電腦游戲 “生命游戲” 后, 元胞自動機才吸引了科學家們的注意.
1983 年 S.Wolfram 發表了一系列論文. 對初等元胞機 256 種 規則所產生的模型進行了深入研究, 并用熵來描述其演化行 為, 將細胞自動機分為平穩型, 周期型, 混沌型和復雜型.
2 應用
- 社會學: 元胞自動機經常用于研究個人行為的社會性, 流行 現象. 例如人口遷移, 公共場所內人員的疏散, 流行病傳播.
- 圖形學: 元胞自動機以其特有的結構的簡單性, 內在的并行 性以及復雜計算的能力成為密碼學中研究的熱點方向之一
- 物理學: 在物理學中, 元胞自動機已成功的應用于流體, 磁 場, 電場, 熱傳導等的模擬. 例如格子氣自動機.
3 一維元胞自動機——交通規則
定義:
-
元胞分布于一維線性網格上.
-
元胞僅具有車和空兩種狀態.
-
元胞狀態由周圍兩鄰居決定.
規則:研究的變化對象只是中間的格子,后面的車子要比前面的車子起步延遲1格。
4 二維元胞自動機——生命游戲
定義:
-
元胞分布于二維方型網格上.
-
元胞僅具有生和死兩種狀態.
-
元胞狀態由周圍八鄰居決定.
規則:
骷髏:死亡;笑臉:生存
周圍有三個笑臉,則中間變為笑臉
少于兩個笑臉或者多于三個,中間則變死亡。
5 什么是元胞自動機
離散的系統: 元胞是定義在有限的時間和空間上的, 并且元 胞的狀態是有限.
動力學系統: 元胞自動機的舉止行為具有動力學特征.
簡單與復雜: 元胞自動機用簡單規則控制相互作用的元胞 模擬復雜世界.
6 構成要素
(1)元胞 (Cell)
元胞是元胞自動機基本單元:
- 狀態: 每一個元胞都有記憶貯存狀態的功能.
- 離散: 簡單情況下, 元胞只有兩種可能狀態; 較復雜情況下, 元胞具有多種狀態.
- 更新: 元胞的狀態都安照動力規則不斷更新.
(2)網格 (Lattice)
不同維網格
常用二維網格
(3)鄰居 (Neighborhood)
(4)邊界 (Boundary)
反射型:以自己作為邊界的狀態
吸收型:不管邊界(車開到邊界就消失)
(5)規則(狀態轉移函數)
定義:根據元胞當前狀態及其鄰居狀況確定下一時刻該元胞狀態的動力學函數, 簡單講, 就是一個狀態轉移函數.
分類 :
- 總和型: 某元胞下時刻的狀態取決于且僅取決于它所有鄰居 的當前狀態以及自身的當前狀態.
- 合法型: 總和型規則屬于合法型規則. 但如果把元胞自動機 的規則限制為總和型, 會使元胞自動機具有局限性.
(6)森林火災
綠色:樹木;紅色:火;黑色:空地。
三種狀態循環轉化:
樹:周圍有火或者被閃電擊中就變成火。
空地:以概率p變為樹木
理性分析:紅為火;灰為空地;綠是樹
元胞三種狀態的密度和為1
火轉化為空地的密度等于空地轉換為樹的密度(新長出來的樹等于燒沒的樹)
fff是閃電的概率:遠遠小于樹生成的概率;TsmaxT_{smax}Tsmax?是一大群樹被火燒的時間尺度
程序實現
周期性邊界條件
購進啊
其中的數字為編號
構建鄰居矩陣
上面矩陣中的數字編號,對應原矩陣相同位置編號的上鄰居編號,一 一對應
同樣道理:
% simulate forest fire with cellular automata
% zhou lvwen: zhou.lv.wen@gmail.com
% August 15 2010
n = 300; % 定義表示森林的矩陣大小
Plight = 5e-6; Pgrowth = 1e-2; % 定義閃電和生長的概率
UL = [n 1:n-1]; DR = [2:n 1]; % 定義上左,下右鄰居
veg=zeros(n,n); % 初始化表示森林的矩陣
imh = image(cat(3,veg,veg,veg)); % 可視化表示森林的矩陣
% veg = 空地為0 著火為1 樹木為2
for i=1:3000 sum = (veg(UL,:)==1) + ...(veg(:,UL)==1) + (veg(:,DR)==1) + ...(veg(DR,:)==1); % 計算出所有格子有幾個鄰居是著火的
% 根據規則更新森林矩陣:是否樹=是否樹-是否著火的樹+是否新生的樹(0-1運算)veg = 2*(veg==2) - ...( (veg==2) & (sum>0 | (rand(n,n)<Plight)) ) + ... 2*((veg==0) & rand(n,n)<Pgrowth) ; set(imh, 'cdata', cat(3,(veg==1),(veg==2),zeros(n)) )drawnow % 可視化表示森林的矩陣
end
(7)交通概念
車距和密度
流量方程
守恒方程
時空軌跡(橫軸是空間縱軸為時間)
紅線橫線與藍色交點表示每個時間車的位置。
如果是豎線則表示車子在該位置對應的時間
宏觀連續模型:
最常用的規則:
紅色條表示速度是滿的。
1 加速規則:不能超過vmax(2格/s)v_{max}(2格/s)vmax?(2格/s)
2 防止碰撞:不能超過車距
理論分析:
結果分析: 密度與流量
第一個圖:橫坐標是歸一化后的密度,縱坐標是車流量。第二個圖:理論值與CA的結果
結果分析: 時空軌跡
中間的深色區域是交通堵塞的區域。
ns.m
function [rho, flux, vmean] = ns(rho, p, L, tmax, animation, spacetime)
vmax = 5; %最大速度
% place a distribution with density
ncar = round(L*rho); % 車數量=L*rho
rho = ncar/L;
x = sort(randsample(1:L, ncar)); % 從1到L中隨機采ncar格樣并排序
v = vmax * ones(1,ncar); % 初始化所有車子su'du1為vmax
flux = 0; % number of cars that pass through the end
vmean = 0;
road = zeros(tmax, L);
for t = 1:tmax% 加速規則v = min(v+1, vmax);%防止碰撞gaps = gaplength(x,L); % 獲得每一輛車到前面一輛車的距離v = min(v, gaps-1);% 隨機減速vdrops = ( rand(1,ncar)<p );v = max(v-vdrops,0);% 更新位置x = x + v;passed = x>L; % 車走過整個路段x(passed) = x(passed) - L;% 回到起點if t>tmax/2flux = flux + sum(v/L); %平均流量vmean = vmean + mean(v);endroad(t,x) = 1;
end
flux = flux/(tmax/2);
vmean = vmean/(tmax/2);
if spacetime; figure;imagesc(road);colormap([1,1,1;0,0,0]);axis image; end% -------------------------------------------------------------------------
function gaps = gaplength(x,L)
% 計算車距
ncar = length(x);
gaps=zeros(1, ncar);
if ncar>0gaps = x([2:end 1]) -x; % d(i)=x(i+1)-x(i)gaps(gaps<=0) = gaps(gaps<=0)+L; %d(i)=d(i)+L,if d(i)<0
end
nsity = 0:0.02:1;
roadlength = 100;
vmax = 5;
tmax = 200;
pbrak = 0;
flux = [];
vmean = [];
for rho = density[R, J, V] = ns(rho, pbrak, roadlength, tmax, 0, 0);flux = [flux; J];vmean = [vmean; V];
end
% ------------------------- density vs. volecity --------------------------
figure
plot(density, vmean,'k.','markersize',15);
hold on
plot(density,min(vmax, 1./density-1),'-r','linewidth',2)
ylim([0,5.55])
legend({'Cellular automata aproach', ...'$v(\rho) = \min\{v_{\max}, 1/\rho-1\}$'}, ...'interpreter','latex')
xlabel('density in vehicles/cell')
ylabel('velocity in cell/time')
% --------------------------- density vs. flux ----------------------------
figure
plot(density, flux,'k.','markersize',15);
hold on;
plot(density,min(density*vmax, 1-density),'-r','linewidth',2)
legend({'Cellular automata aproach', ...'$J(\rho) = \min\{\rho\cdot v_{\max}, 1-\rho\}$'}, ...'interpreter','latex')
xlabel('density in vehicles/cell')
ylabel('flux in vehicles/time')
density = 0:0.02:1;
roadlength = 100;
vmax = 5;
tmax = 200;
pbrak = 0;
flux = [];
vmean = [];
for rho = density[R, J, V] = ns(rho, pbrak, roadlength, tmax, 0, 0);flux = [flux; J];vmean = [vmean; V];
end
% ------------------------- density vs. volecity --------------------------
figure
plot(density, vmean,'k.','markersize',15);
hold on
plot(density,min(vmax, 1./density-1),'-r','linewidth',2)
ylim([0,5.55])
legend({'Cellular automata aproach', ...'$v(\rho) = \min\{v_{\max}, 1/\rho-1\}$'}, ...'interpreter','latex')
xlabel('density in vehicles/cell')
ylabel('velocity in cell/time')
% --------------------------- density vs. flux ----------------------------
figure
plot(density, flux,'k.','markersize',15);
hold on;
plot(density,min(density*vmax, 1-density),'-r','linewidth',2)
legend({'Cellular automata aproach', ...'$J(\rho) = \min\{\rho\cdot v_{\max}, 1-\rho\}$'}, ...'interpreter','latex')
xlabel('density in vehicles/cell')
ylabel('flux in vehicles/time')
周呂文 中國科學院力學研究所
總結
以上是生活随笔為你收集整理的【数学建模】元胞自动机的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。