【netlogo教學】第9章:細胞自動機模擬都市土地使用變化

一、土地使用變遷規則設定

這邊參考細胞自動機(CA)的規則,土地會受周圍的土地使用狀態,導致土地使用變遷。在第7章有關於使用netlogo實作細胞自動機的說明。簡述一下這個範例的規則:

海拔超過1500公尺則不能開發,住宅或商業都不會出現。

對所有海拔低於1500公尺的網格:如果周圍的商業數量或住宅數量適當,則會轉為商業或住宅,反之,也可能會轉為空地。

netlogo-CA都市模擬-介面
netlogo-CA都市模擬-介面

二、netlogo完整程式碼

patches-own [ ele landuse sumres sumcom ]
 to setup
   ca
   ask patches
   [ set ele random max-ele ]
   ask patches with [ele > 1500 ]
   [set landuse 3
     set pcolor brown ]
   ask patches with [ele <= 1500 ]   [     ifelse random 100.0 < initial     [resident]     [vacancy]   ] end to go   ask patches with [ ele <= 1500 ]   [     set sumres count neighbors with [ landuse = 1 ]     set sumcom count neighbors with [ landuse = 2 ]   ]   ask patches with [ ele <= 1500 ]   [     ifelse sumcom > 4
     [vacancy]
     [
       ifelse (landuse = 0 ) and ((sumres >= 2 ) and  ( sumres <= 5 ))         [resident]         [          if ( landuse = 1 ) and ( sumres >= threshold )
            [ commercial ]
         ]
     ]
   ]
 end
 to commercial
   set landuse 2
   set pcolor red
 end
 to resident
   set landuse 1
   set pcolor yellow
 end
 to vacancy
   set landuse 0
   set pcolor green
 end

三、netlogo程式碼分段說明

(一)patches-own網格變數說明

ele:海拔高度,最大值為介面的max-ele滑桿減 1。

sumres:周圍鄰居是住宅的數量

sumcom:周圍鄰居是商業的數量

landuse:該網格的土地使用類型,分為以下幾種:

  1. landuse = 3:海拔超過1500公尺,不可開發地區。以咖啡色呈現。
  2. landuse = 2:住宅區。以黃色呈現。
  3. landuse = 1:商業區。以紅色呈現。
  4. landuse = 0:空地,以綠色呈現。
patches-own [ ele landuse sumres sumcom ]

(二)setup初始化

  1. 先用ca清空所有設定
  2. 隨機指定每個網格的海拔高度(ele),最大值為介面的max-ele滑桿減 1
  3. 設定海拔高度(ele)大於1500的網格為不可開發地區,landuse = 3。以咖啡色呈現。
  4. 若隨機亂數的值小於initial,便設定網格為住宅區,landuse = 1。以黃色呈現。否則設定為空地,landuse = 0,以綠色呈現。
ca
   ask patches
   [ set ele random max-ele ]
   ask patches with [ele > 1500 ]
   [set landuse 3
     set pcolor brown ]
   ask patches with [ele <= 1500 ]
   [
     ifelse random 100.0 < initial 
    [ resident ]
    [ vacancy ]
   ]
 end 

設定為住宅區

to resident
   set landuse 1
   set pcolor yellow
 end

設定為空地

to vacancy
   set landuse 0
   set pcolor green
 end

(三)go主程式

  1. 對所有海拔低於1500公尺的網格:如果周圍網格商業數量超過4個,則會因為太過擁擠而變為空地。
  2. 如果目前狀態為空地:若周圍網格的住宅數量介於2到5之間,則會因為有發展而轉為住宅區。
  3. 如果目前狀態為住宅:若周圍網格的商業數量大於門檻值,則會因為有發展而轉為商業區。門檻值為介面上的threshold滑桿
to go
   ask patches with [ ele <= 1500 ]   [  set sumres count neighbors with [ landuse = 1 ]     set sumcom count neighbors with [ landuse = 2 ]   ]   ask patches with [ ele <= 1500 ]   [     ifelse sumcom > 4
     [vacancy]
     [
       ifelse (landuse = 0 ) and ((sumres >= 2 ) and  ( sumres <= 5 ))         [resident]         [          if ( landuse = 1 ) and ( sumres >= threshold )
            [ commercial ]
         ]
     ]
   ]
 end

四、土地使用變遷模擬成果

(一)情境一

最高海拔高度設為497,低於程式碼中不可開發區定義的1500公尺,所以不會有任何咖啡色區塊。而產生商業的門檻是4,相對低,所以也會產生很多紅色的商業區。

netlogo-CA都市模擬-情境一
netlogo-CA都市模擬-情境一

(二)情境二

延續前述例子,但是把產生商業的門檻調高到8,就會發現黃色的住宅區茂密,但是商業區相對少。

netlogo-CA都市模擬-情境二
netlogo-CA都市模擬-情境二

(三)情境三

延續情境二,但是把最高海拔高度調高到2962,咖啡色的不可開發區變很多,商業區更少。

netlogo-CA都市模擬-情境三
netlogo-CA都市模擬-情境三

更多netlogo教學系列
上一篇:【netlogo教學】第8章:用random產生隨機亂數

下一篇:【netlogo教學】第10章:if和ifelse條件句語法與範例


若有教學或其他合作需求,歡迎來信 nbablissfully@hotmail.com 詳談


小額支持鍾肯尼

如果我的文章有幫助到你,歡迎你點這裡開啟只要40元的小額贊助連結,可以贊助我一杯咖啡錢;我會更有動力繼續寫作,幫助大家解決更多問題。

發佈留言