以下解釋來自 百度百科:
細胞自動機模型的基本思想是:自然界裏許多複雜結構和過程,歸根到底只是由大量基本組成單元的簡單相互作用所引起。因此,利用各種細胞自動機有可能模擬任何複雜事物的演化過程。
分類:
1)最簡一維細胞自動機: 黑色爲1,白色爲0. 那麼任意一個方格和周圍兩個方格就有 111,110,101,100,011,010,001,000 8種狀態。
2)編碼規則: 當前細胞ci,在t時刻狀態爲 Si,t , 兩個鄰居狀態爲Si-1,t Si+1,t 則下一時刻狀態 Si,t+1 = F(si-1,t Si,t Si+1,t)
假設有如下規則:輸入的三個方格中有奇數個黑色,則下一個爲黑色,表示爲
si,t+1=1 ,如果si-1,t+si,t+si+1,t=1
si,t+1=0 ,如果si-1,t+si,t+si+1,t=2
si,t+1=1 ,如果si-1,t+si,t+si+1,t=3
si,t+1=0 ,如果si-1,t+si,t+si+1,t=0
其中,si,t∈{0,1},對於任意的i和t 。 則編碼爲0101.
3) 最簡一維細胞自動機的動態行爲:
I、 固定值型:細胞自動機經過若干步運算便停留在一個固定的狀態;
II、 週期型:細胞自動機在幾種狀態之間週期循環;
III、 混沌型:細胞自動機處於一種完全無序隨機的狀態,幾乎找不到任何規律;
IV、 複雜型:細胞自動機在運行的過程中可能產生複雜的結構,這種結構既不是完全的隨機混亂,又沒有固定的週期和狀態。
產生黑白的格子
void RandomFillMap() {
if (useRandomSeed) {
seed = Time.time.ToString();
}
System.Random pseudoRandom = new System.Random(seed.GetHashCode());
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y ++) {
if (x == 0 || x == width-1 || y == 0 || y == height -1) {
map[x,y] = 1;
}
else {
map[x,y] = (pseudoRandom.Next(0,100) < randomFillPercent)? 1: 0;
}
}
}
}
編寫規則
int GetSurroundingWallCount(int gridX, int gridY) {
int wallCount = 0;
for (int neighbourX = gridX - 1; neighbourX <= gridX + 1; neighbourX ++) {
for (int neighbourY = gridY - 1; neighbourY <= gridY + 1; neighbourY ++) {
if (neighbourX >= 0 && neighbourX < width && neighbourY >= 0 && neighbourY < height) {
if (neighbourX != gridX || neighbourY != gridY) {
wallCount += map[neighbourX,neighbourY];
}
}
else {
wallCount ++;
}
}
}
根據規則重新寫格子
void SmoothMap() {
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y ++) {
int neighbourWallTiles = GetSurroundingWallCount(x,y);
if (neighbourWallTiles > 4)
map[x,y] = 1;
else if (neighbourWallTiles < 4)
map[x,y] = 0;
}
}
}
return wallCount;
}
參考: