日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

元胞自动机-附代码注释

發(fā)布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 元胞自动机-附代码注释 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

元胞自動機(Cellular Automata CA)是一種時空離散的局部動力學(xué)模型,是研究復(fù)雜系統(tǒng)的一種典型方法,適用于空間復(fù)雜系統(tǒng)的時空動態(tài)模擬研究。
元胞自動機不是由嚴(yán)格定義的物理方程或函數(shù)確定,而是用一系列模型構(gòu)造的規(guī)則構(gòu)成。滿足這些規(guī)則的模型都可算作是元胞自動機模型。故元胞自動機是一類模型的總稱,或者說是一個方法框架。
在CA模型中,散布在規(guī)則格網(wǎng)(Lattice Grid)中的每一元胞(Cell)取有限的離散狀態(tài),遵循同樣的作用規(guī)則,依據(jù)確定的局部規(guī)則作同步更新。大量元胞通過簡單的相互作用而構(gòu)成動態(tài)系統(tǒng)的演化。

元胞自動機的組成部分有元胞、元胞空間、鄰居及規(guī)則四部分。
簡單講,元胞自動機可以視為由一個元胞空間和定義于該空間的變換函數(shù)所組成。

元胞自動機的元胞

元胞是元胞自動機的最基本組成部分。它分布在離散的一維、二維或多維歐幾里德空間的晶格點上。
狀態(tài),狀態(tài)可以是{0,1}的二進(jìn)制形式,或是整數(shù)形式的離散集。嚴(yán)格意義上,元胞只能有一個狀態(tài)變量,但在實際應(yīng)用中,往往將其進(jìn)行擴展。

元胞自動機的元胞空間

元胞空間元胞所分布在的空間網(wǎng)點集合就是元胞空間。
對于一維元胞自動機,元胞空間劃分只有一種。而高維的元胞自動機,元胞空間的劃分則可能有多種形式。對于常見的二維自動機,元胞空間通常可按三角形、四邊形或六邊形三種網(wǎng)格排列。

  • 三角網(wǎng)格:擁有較少的鄰居數(shù)目,這在某些時候很有用。缺點是計算機的表達(dá)與顯示不方便。
  • 四邊形網(wǎng)格 (最常用):直觀簡單,特別適合于計算機環(huán)境下進(jìn)行表達(dá)顯示。
  • 六邊形網(wǎng)格:能較好的模擬各向同性的現(xiàn)象,因此,模型能更加自然而真實。其缺點同正三角網(wǎng)格一樣,在表達(dá)顯示上較為困難和復(fù)雜。

在理論上,元胞空間的邊界條件在各個維向上是無限延展的,但實際應(yīng)用過程中,無法在計算機上實現(xiàn)這一理想條件。

元胞自動機的鄰居

在數(shù)學(xué)上,它通常可以表示為一個多維的整數(shù)矩陣。
鄰居、元胞和元胞空間只表示了系統(tǒng)的靜態(tài)成分,為了將動態(tài)引入系統(tǒng),必須加入演化(規(guī)則。這些規(guī)則是定義在局部空間范圍內(nèi)的,即一個元胞下一時刻的狀態(tài)決定于本身的狀態(tài)和它的鄰居無胞的狀態(tài)。因此,在指定規(guī)則之前,必須定義一定的鄰居規(guī)則,明確哪些元胞屬于該元胞的鄰居。
一維元胞自動機中,通常以半徑r來確定鄰居,距離一個元胞r內(nèi)的所有元胞都屬于該元胞的鄰居。
二維元胞自動機的鄰居定義較為復(fù)雜,但通常有以下幾種(以正方形網(wǎng)格為例)

元胞自動機的規(guī)則

規(guī)則根據(jù)元胞當(dāng)前狀態(tài)及其鄰居狀況確定下一時刻該元胞狀態(tài)的動力學(xué)函數(shù)。簡單講,就是狀態(tài)轉(zhuǎn)移函數(shù)。這個函數(shù)構(gòu)造了一種簡單的離散的時間和空間范圍的局部物理成分。狀態(tài)的變化可以由狀態(tài)轉(zhuǎn)移函數(shù)表示。t時刻的鄰居狀態(tài)組合時間元胞自動機是一個動態(tài)系統(tǒng),它在時間維上的變化是離散的,即時間t是一個整數(shù)值,而且連續(xù)且等間距。在轉(zhuǎn)換函數(shù)中,一個元胞在t+1時刻的狀態(tài)只直接決定于t時刻的該元胞及其鄰居的狀態(tài)。

元胞自動機的特性

把一個空間劃分成網(wǎng)絡(luò),每一個點表示一個元胞,它們的狀態(tài)賦值,在網(wǎng)格中用顏色的變化來表示,在事先設(shè)定的規(guī)則下,元胞的演化就用網(wǎng)格顏色的變化來描述,這樣的模型就是元胞自動機。
通過對元胞自動機這些網(wǎng)絡(luò)中的格點的不同定義,以及初始條件的不同,可以模擬出不同的現(xiàn)象和過程。
離散性:元胞自動機是高度離散的。它不僅僅空間離散時間離散,而且在函數(shù)值,即元胞的狀態(tài)值也是離散的。
動力學(xué)演化的同步性:元胞自動機具有利用簡單的,局部規(guī)則的和離散的方法,描述復(fù)雜的,全部的和連續(xù)系統(tǒng)的能力。
相互作用的局部性:元胞自動機的規(guī)則是局部的,而動力學(xué)行為規(guī)則是全局的,在模擬的過程中,具體的演化過程也是局部的,即僅同周圍的元胞有關(guān)系。
時間、空間、狀態(tài)都離散,每個變量只取有限多個狀態(tài),且其狀態(tài)改變的規(guī)則在時間和空間上都是局部的。

元胞自動機的應(yīng)用思想

復(fù)雜系統(tǒng)又稱為非線性系統(tǒng)。如城市的發(fā)展與演化、城市人流與交通流以及交通堵塞的形成、自然環(huán)境下的動物的空間分布、河網(wǎng)的形成、疾病的傳播等。
傳統(tǒng)的自頂向下的分析方法是把系統(tǒng)分割成幾個部分,對每一個部分逐個進(jìn)行研究。而目前提出來的分析復(fù)雜動態(tài)系統(tǒng)的思想:自底向上的研究方法。

元胞自動機的演化行為的統(tǒng)計特征

Wolfram將元胞自動機的演化行為歸納為四大類:
平穩(wěn)型(homogeneous) :自任何初始狀態(tài)開始經(jīng)過一定時間演化后,經(jīng)過若干步運算便停留在一個固定的狀態(tài)。
周期型(periodic):經(jīng)過一定時間演化后,在幾種狀態(tài)之間周期循環(huán)。
混沌型(chaos):自任何初始狀態(tài)開始,經(jīng)過一定時間演化后,處于一種完全無序隨機的狀態(tài),幾乎找不到任何規(guī)律。
復(fù)雜型(edge of chaos):在演化的過程中可能產(chǎn)生復(fù)雜的結(jié)構(gòu),這種結(jié)構(gòu)既不是完全的隨機混亂,又沒有固定的周期和狀態(tài)。
固定點->周期->復(fù)雜->混沌

其實元胞自動機更多的是相當(dāng)于一種思想、一種框架,通過設(shè)置一套規(guī)則,將時間離散化后,對元胞進(jìn)行規(guī)則下的隨時間的演化。

至今元胞自動機已經(jīng)有了非常廣泛的應(yīng)用,典型應(yīng)用如交通流模型、人員疏散模型、森林火災(zāi)模型、傳染病模型、土地利用演化模型、城市發(fā)展擴張、交通狀況模擬、博物館逃生模擬等等。

森林火災(zāi)模擬

%% 森林火災(zāi) m = 300; n = 300; % 表示森林的矩陣行列 m x nPlight = 5e-6; % 閃電概率 Pgrowth = 1e-2; % 生長概率% 鄰居方位 d 和點燃概率 p d = {[1,0], [0,1], [-1,0], [0,-1]}; p = [ 1, 1, 1, 1];% % 改進(jìn)元胞自動機 % d = {[1,0], [0,1], [-1,0], [0,-1], [1,1], [-1,1], [-1,-1], [1,-1]}; % p = [ones(1,4), ones(1,4)*(sqrt(1/2)-1/2)];% % 考慮風(fēng)的情況 % d = {[1,0], [0,1], [-1,0], [0,-1], [1,1], [-1,1], [-1,-1], [1,-1], [0,-2]}; % p = [ 0.80, 0.30, 0.80, 1.00, 0.12, 0.12, 0.30, 0.30, 0.8];% 空=0, 火=1, 樹=2 E = 0; F = 1; T = 2;S = T * (rand(m, n) < 0.5);imh = image(cat(3, S==F, S==T, zeros(m,n))); axis image;for t = 1:3000% 計算鄰居中能傳播著火的個數(shù)sum = zeros(size(S));for j = 1:length(d) % 計算四個方向的著火鄰居sum = sum + p(j) * (circshift(S,d{j}) == F);endisE = (S==E); isF = (S==F); isT = (S==T); % 找出三種不同的狀態(tài)ignite = rand(m,n) < sum | (rand(m,n) < Plight); % 著火條件% 規(guī)則 1: 著火Rule1 = T * (isT & ~ignite) + F * (isT & ignite);% 規(guī)則 2: 燒盡Rule2 = F*isF - F*isF;% 規(guī)則 3: 新生Rule3 = T * (isE & rand(m,n) < Pgrowth);S = Rule1 + Rule2 + Rule3;set(imh, 'cdata', cat(3, isF, isT, zeros(m,n)))drawnow end

生命游戲模擬

%% 生命游戲 %% 界面控制 startbutton = uicontrol('style','pushbutton','string','start','fontsize',12,'position',[100,400,50,20],'callback','start=1;'); freezebutton = uicontrol('style','pushbutton','string','freeze','fontsize',12,'position',[320,400,50,20],'callback','freeze=1;'); quitebutton = uicontrol('style','pushbutton','string','quit','fontsize',12,'position',[400,400,50,20],'callback','stop=1;close;'); number = uicontrol('style','text','string','1','fontsize',12,'position',[20,400,50,20]); freeze_at_text = uicontrol('style','text','string','freeze at:','fontsize',12,'position',[180,400,80,20],'callback','start=1;'); freeze_at = uicontrol('style','edit','string','1000','fontsize',12,'position',[250,400,50,20]); %% 初始化設(shè)置 n = 400; % 元胞數(shù)目 z = zeros(n, n); cells = (rand(n, n)) < 0.6; % 初始值隨機分布 big_matrix = zeros(n+2, n+2); % 增補矩陣 big_matrix(2:end-1, 2:end-1) = cells; imh = image(cat(3,z, z, cells)); % 建立圖像句柄 figure(gcf); set(gcf, 'doublebuffer', 'on'); % 開啟雙緩沖 %% 主循環(huán) start = 0; stop = 0; freeze = 0; while stop == 0if findobj == 0 % 用來監(jiān)視窗口是否已經(jīng)被關(guān)閉 防止報錯break;endif start == 1z = zeros(n, n);sum = sum_neighbour(big_matrix); % 計算鄰居狀態(tài)和z(cells == 1 & (sum == 2 | sum == 3)) = 1; % 按規(guī)則更新狀態(tài)z(cells == 0 & sum == 3) = 1;big_matrix(2:end-1,2:end-1) = z; % 將新狀態(tài)填充回增補矩陣cells = z; % 將狀態(tài)更新set(imh, 'cdata', cat(3, zeros(n,n), zeros(n,n), cells)); % 畫圖stepnumber = 1 + str2double(get(number, 'string')); % 更新計數(shù)set(number, 'string', num2str(stepnumber));endif (freeze == 1 || stepnumber == str2double(get(freeze_at, 'string'))) % 判斷是否暫停start = 0;freeze = 0;enddrawnow % 更新繪圖 end %% 計算鄰居和函數(shù) function [A] = sum_neighbour(B) % 元胞自動機 計算周圍鄰居的狀態(tài)和A = B(1:end-2,1:end-2)+B(1:end-2,2:end-1)+B(1:end-2,3:end)+B(2:end-1,1:end-2)+B(2:end-1,3:end)+B(3:end,1:end-2)+B(3:end,2:end-1)+B(3:end,3:end); end

總結(jié)

以上是生活随笔為你收集整理的元胞自动机-附代码注释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。