認識 NetLogo:學習資料、圖形用戶界面、兼容性


最近由於科研需要,筆者接觸了 NetLogo,一種用於多智能體建模的編程語言。NetLogo 的定位是一門領域特定語言(domain-specific programming language),而不是一門通用編程語言(general purpose programming language),這是筆者作為初學者不幸的源泉。在此之前筆者的主要編程語言是 Python,筆者主要從 Python 使用者這個立場來敘述對 NetLogo 由抓狂到親切的踩坑過程。筆者參考了以下資料

總體而言,NetLogo 文檔較為齊全,但是社區比較小,遇到問題不容易查找。在中文社區中,以集智俱樂部出品的視頻、圖文資料最為突出。此外,定量群學(微信號 sociologynju)是一個由定量社會學研究者運營的活躍的公眾號,提供了入門介紹,並結合社會學研究提供了 NetLogo 的使用案例,也有很大的參考價值。

NetLogo 語法古怪,屬於 Lisp 家族,基於 Java 和 Scala 實現,運行在 Java 虛擬機上。實際上,點開 NetLogo 的安裝目錄你會發現,它的入口是個平平無奇 jar 包,即 netlogo.jarnetlogo-version.jar。NetLogo 的源代碼通常被稱為一個 Model,放在一個 .nlogo 文件里面,通過文本編輯器打開就會發現它還包含了圖形界面的參數(留作彩蛋 😄)。迄今為止,NetLogo 只有官方提供的 GUI,長這個樣子

netlogo-gui

界面上方的 InferaceInfoCode 三個選項卡分別對應 .nlogo Model 的 3 個組成部分,即交互界面(包含控件和可視化)、說明文檔和反映后台邏輯的代碼。這是一個將界面、實現邏輯和文檔分離的設計,看起來很棒!

界面最下方的白框相當於控制台(console),可以輸入簡單的交互式命令。其上方的 Command Center 則負責打印控制台或 Model 運行的日志。

不足的是,NetLogo GUI 沒有提供調試工具,只能通過打印中間結果來調試;文本編輯器(Code 選項卡)僅有基本的語法高亮和自動縮進功能,可以通過 Check 檢查語法錯誤,但沒有自動補全、定義跳轉等功能,如下圖所示

Check

其中 Procedures 是一個下拉菜單,可以顯示代碼中定義的全部的 procedure(例程),相當於函數。

版本兼容性問題

依賴的 Java 版本

筆者在 Linux 系統下安裝使用 NetLogo,僅以 Linux 系統為例總結 NetLogo 與 Java 間的版本依賴。在官方下載頁可以選擇不同版本,版本詳情頁會介紹對 Java 的依賴。以 NetLogo 5.x.x 和 6.x.x 為例

NetLogo 版本 Java 版本 是否內置 Java 運行環境
5.3.1-6.2.2 Java 8
5.0.5-5.2.1 Java 6

如果 NetLogo 發行版本自帶 Java 運行環境,那就無需額外安裝,如果沒有,則需要安裝。值得一提的是,有些 Model 依賴特定的 Java 擴展(jar 包),為了正常運行 Model,需要根據 jar 包依賴的 Java 版本進行安裝。

.nlogo 文件的版本

不同大版本 NetLogo 編寫的 .nlogo 文件是不兼容的。實際上,通過文本編輯器打開 .nlogo 文件會發現,問件中標明了 NetLogo 版本。下面為版本 5.1.06.2.1 的截圖

5.1.0

6.2.1

當我們試圖用 NetLogo 打開不同大版本的 .nlogo 文件時,GUI 就會彈框提示。經測試筆者猜測 NetLogo 是向下兼容的,即低版本 NetLogo 無法打開高版本 .nlogo 文件,但高版本 NetLogo 通過轉換可以打開低版本的 .nlogo 文件,如下圖所示

low2high

fail_low2high

high2low

綜合對 Java 的版本依賴問題,筆者建議,

根據 .nlogo 文件的版本選擇 NetLogo 版本。

以上總結了初學者安裝和使用 NetLogo 可能遇到的問題。NetLogo 的語法和使用案例在官方文檔和社區中均有充分的介紹,本系列博客就不再重復。由於筆者項目項目需要,還額外嘗試了使用 NetLogo 的一些偏工程的技巧,總結為本系列的第二篇博客

NetLogo 進階:導入 nls 文件、Headless 模式、傳遞 Java 虛擬機參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM