Netlogo仿真初步學習總結

一 Netlogo理解及獲得渠道

1.是什麼:Net logo是一個系統仿真軟件,利用該軟件,可以對自然中或者社會中的現象進行仿真,仿真通過控件配合代碼進行實現。
2.軟件下載渠道: Netlogo軟件是免費開源的,可以自行到下載網址下載,具體網址爲:http://ccl.northwestern.edu/netlogo/
軟件的下載可以通過個人電腦系統針對性選擇Widows和Mac os的不同版本,不過網站是英文的,如下圖1爲官網首頁及下載鏈接。
3.軟件的其他輔助材料 :有對應的中文手冊,鏈接爲:
https://wenku.baidu.com/view/7e2e3b48e97101f69e3143323968011ca300f7ea.html
在這裏插入圖片描述
圖1 Netlogo 官網

二 軟件的初步瞭解

1.初始界面

Mac os 版本和widows版本界面差不多,這裏使用的Windows 64位 Netlogo 6.1.1版本,版本的初始界面爲如下圖2:
在這裏插入圖片描述
圖2 初始界面

2.界面頻繁使用的區域

1. 文件->模型庫
點擊最上面的菜單欄裏文件,然後從下拉菜單欄裏面選擇模型庫,會彈出一個模型庫窗口,如圖3所示,左邊的樹形菜單裏面會有很多經典的仿真案例,包括藝術類和生物類、化學類等等。有興趣可以選擇一個然後點擊打開即可。如下圖4所示,爲fair circle仿真的案例主界面,點擊setup,然後點擊go即可運行。
在這裏插入圖片描述
圖3 模型庫界面
在這裏插入圖片描述
圖4 Fairy circles仿真界面
2. 文件->新建
這個不必說,是新建自己的仿真項目,不過在運行其他的項目時,一定要保存,這裏不支持兩個項目同時運行。但是可以同時打開兩個Netlogo程序,再進行運行
3. 兩個常用的切換面板的按鈕:界面 + 代碼
界面:顯示仿真界面的主要展示窗口以及控件放置的窗口
代碼:進行編寫程序的窗口(如圖5所示)
在這裏插入圖片描述
圖5 界面有代碼面板
4. 常用的控件
Netlogo中有很多控件,可以選擇後在下方界面點擊顯示出來,如圖6所示
(1)函數相關:
按鈕:一般用來和編程中函數結合,常用的按鈕有兩個:setup和go按鈕,setup用來重置爲初始狀態,go按鈕一般用來進行控制運行和停止
(2)參數控制相關:
滑塊與輸入框: 兩個一般都是用來輸入參數的數值的,滑塊就是一個滾動條,來回拉滾動條可以控制數值,輸入框可以輸入具體的數字或者其他文本來傳遞參數,如果需要具體的數值可以使用輸入框。
開關與選擇器: 開關一般選擇開或者時關,通過不同狀態進行變量控制或者狀態顯示的選擇。選擇器裏面是個下拉列表,在研究中可以用來做控制變量,選擇不同的參數這樣

(3)輸出相關:
監視器: 一般和具體的參數變量綁定,隨着參數的實際數值變化進行動態變化
圖: 進行圖的繪製,一般有點狀圖、折線圖
註釋: 可以理解爲純文本,就是註釋功能
在這裏插入圖片描述
圖6 控件欄

三 一個仿真如何進行(前情概要)

1. 仿真世界的構成

仿真的世界由主體構成,主體能夠接受命令,進行活動,所有主體的行爲並行發生。
NetLogo中共有三類主體,turtles(海龜)patches(瓦片)observer(觀察者),具體關係可以借用一張圖瞭解,如圖7所示

在這裏插入圖片描述
圖 7 主體之間的理解
Turtles: 是能夠在世界中移動的主體,可以理解爲觀察的對象,可以在仿真中有動作和個人的屬性
Patches: 是組成的網格,每個patch佔據一個矩形小塊,它不能移動,但是有自己的屬性和行爲
Observer: 是一個全局主體,它觀察着由turtles和patches構成的世界,能夠執行指令獲取世界全部或部分的狀態,或實現對世界的控制,可以認爲操作這個仿真的人

2. 仿真如何推進

NetLogo模型包括可 視化部件編程 兩部分,二者具有緊密聯繫。
一般通過控件綁定函數進行實現仿真的推進。必有的函數有兩個:setup和go。
setup用來設定初始狀態,go用來控制實際的運行,go函數類似於JAVA語言中的main函數,它是運行的入口。

四 實戰學習—牛吃草的仿真

1.項目描述

簡介: 許多牛在草地上吃草,草地的初始能量以及牛的數量是初始設定的,牛在草地上移動會消耗一定的能量,牛吃草會增加自身的能量生長,當移動消耗能量很大,牛會死亡,當牛的能量很高時就是生出來小牛,草也會跟着生長
輸出: 牛在不同時刻的數量,不同牛的能量,草和牛不同時刻的能量,隨着時間牛的數量和草的數量之間的變化趨勢
控制的參數: 初始牛的數量,初始草的能量,草長的速度,出生的小牛能量

2.主要代碼

(1)setup函數,設定初始狀態

to setup ;;定義setup函數
  clear-all ;;清除運行結果
  setup-patches ;;自定義函數:設置草地的初始狀態
  setup-turtles;;;自定義函數,設置牛的初始狀態
  reset-ticks;;時間重置
end

(2)go函數:控制程序的運行

to go
  if ticks >= 500 [ stop ] ;; stop after 500 ticks ;;程序終止條件
  move-turtles ;;自定義:牛移動的函數
  eat-grass   ;;自定義:牛吃草的函數
  check-death ;;自定義:牛是否死亡的函數
  reproduce  ;;自定義:牛生小牛的函數
  regrow-grass ;;自定義:草生長的函數
  tick                      ;;自動計時,類似i = i+1
end

(3)其他代碼

turtles-own [energy] ;;設置牛的屬性energy,牛吃草能量的變化

;;setup中的初始函數
to setup-patches
  ask patches [ set pcolor green ] ;;對草進行顏色設置
end

to setup-turtles
  create-turtles number    ;; 設置初始的牛的數目爲number個,number因爲可調,會和控件關聯 
  ask turtles [ setxy random-xcor random-ycor ] ;;設置牛的初始位置隨機
end


;;go中的運行函數
to move-turtles
  ask turtles [
    right random 360
    forward 1
    set energy energy - 1  ;;  牛移動會消耗能量
  ]
end

to eat-grass
  ask turtles [
    if pcolor = green [
      set pcolor black ;; 牛吃完草後草的顏色成爲黑色
      set energy (energy + energy-from-grass)  ;;牛吃完草後的能量增長爲energy-from-grass
    ]
  ifelse show-energy?
    [ set label energy ] ;; 與控件結合,當show-energy控件參數爲ture,顯示牛的energy數值
    [ set label "" ]     ;; 當show-energy控件參數爲false,不顯示每個牛的能量值
  ]
end

to reproduce
  ask turtles [
    if energy > birth-energy [ 
    set energy energy - birth-energy  ;; 牛生下小牛,自身能量減少
    hatch 1 [ set energy birth-energy ] ;; 新牛出生並且有初始能量
    ]
  ]
end

to check-death
  ask turtles [
    if energy <= 0 [ die ] ;; 當牛的能量低於0,牛死亡
  ]
end

to regrow-grass
  ask patches [  ;;當0-100內產生的隨機值小於3,草變綠,也就是3%的概率
    if random 100 < 3 [ set pcolor green ] 
  ]
end

3.界面

如下圖8所示,主要有的控件如下圖所示

其中設置的初始參數爲:
初始牛的數量number:38
出生牛的能量birth-energy:51
牛吃草獲得的能量energy-from-grass:11

在這裏插入圖片描述
圖8 仿真界面
右擊Totals圖然後點擊Edit可以進行畫筆的設置:
圖的名稱爲Totals
在圖中進行了兩個畫筆的設置,一個爲turtles,設置爲黑色,另外一個叫做grass,設置爲綠色,繪製的結果分別爲:

plot count turtles;;turtles畫筆繪製牛的數目
plot count patches with [pcolor = green];;grass畫筆:繪製綠色的草的數目

具體的設置如圖9所示
在這裏插入圖片描述

圖9 圖中畫筆的設置以及命令

詳情源代碼可以在Netlogo模型庫中找到,源代碼搜索Tutorial 3即可

五 我遇到的問題

1 符號的問題

在書寫的時候,字母與符號要區分開,否則計算機無法識別,例如如下兩個語句,運算符號“>“以及”-“和前後要有空格隔開,負責會把”>birth-energy"與"energy-1"看成一個整體

if energy > birth-energy
set energy energy - 1 

2.go按鈕的執行與tick

(1)tick起到時鐘的作用,在go函數中不僅要寫tick,也要在setup函數寫上一句reset-ticks語句,否則在運行的時候會有錯誤提示框彈出

to setup ;;定義setup函數
  clear-all ;;清除運行結果
  setup-patches ;;自定義函數:設置草地的初始狀態
  setup-turtles;;;自定義函數,設置牛的初始狀態
  reset-ticks;;時間重置
end

(2)在go函數中以及setup函數中對應都寫了正確的有關tick的函數,但是這時候點擊go按鈕,程序不一定會按條件執行,而是按了一下執行一下,這是因爲go按鈕沒有設置,可以右擊go按鈕,點擊Edit,在彈出的對話框中勾選”持續執行“即可,如圖10-1所示。如果不確定可以看一下go按鈕右下角有沒有一個類似刷新的圖標,如果有,則說明設置正確了。
在這裏插入圖片描述
圖10-1 go按鈕的設置
在這裏插入圖片描述
圖10-2 go按鈕
如下圖11爲運行一段時間後的牛吃草狀態圖:

在這裏插入圖片描述
圖11 牛吃草的仿真結果

發佈了28 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章