2014-08-27 148 views
5

NetLogo非常適合基於代理的建模...除了語言。我總是發現自己扭曲了我的大腦,試圖弄清楚如何在NetLogo的Logo實現中做些簡單的代碼(比如實現一個簡單的case語句)。 Logo不僅僅是程序員的語言(對於那些被這種斷言激怒的人的道歉)。NetLogo的Python腳本?

我看到了Abe Gong的Tengolo項目,意在做這件事(http://compsocsci.blogspot.com/2012/02/announcing-tengolo-python-alternative.html),但該項目似乎已被放棄。堆棧溢出中的另一個問題(agent-based simulation: performance issue: Python vs NetLogo & Repast)似乎表明Python會變慢。

似乎很有可能使用Jython編譯成NetLogo可以使用的模塊,但我想知道是否有人知道某件事情會讓我以Python這種合理的語言來做NetLogo模擬。思考?

+0

相關:https://simulatingcomplexity.wordpress.com/2014/05/26/how-the-python-eat-the-turtle/ – 2014-08-28 15:12:07

+0

我最近在沒有Netlogo的Repeat語句的python中感到不安。 – ychaouche 2014-09-05 21:43:37

回答

4

一年多來NetLogo克隆類型項目已經出現,但是一旦創作者意識到創建和維持NetLogo這樣的工作在一段時間內是如何大量工作的幾十年。 (上的NetLogo和它的前輩在StarLogo線工作可以追溯到20世紀80年代末。)

2015年更新:Mesa看起來像在ABM換Python的空間有前途的參賽者。

對於那些誰喜歡的NetLogo的功能設置和代理語義,但不喜歡的語言,我認爲最有前途的方向是NetLogo Web項目,通過的NetLogo的開發者(包括我自己,但截至2015年,我不再沉重參與)。除了與舊的NetLogo語言向後兼容外,NLW還允許用JavaScript或任何編譯成JavaScript語言來構建模型。

NLW還沒有實現與普通NetLogo的完全功能對等,但它很好。因此,根據您的需求,這可能只是一個有希望的方向,而不是您今天可以使用的解決方案。

您也可以看看AgentScript - 也是基於JavaScript的,帶有CoffeeScript偏差(2015年更新:我認爲他們正在切換到ES6?)。

+0

感謝指向烏龜的指針。我會檢查出來的。我不能說純粹主義者真的是JavaScript,但至少有更好的控制結構。 – theoden 2014-08-29 20:49:24

2

NetLogo作爲一種語言確實有一些缺陷。 lack of a case statement當然是一個小小的;功能級以上缺乏模塊化對於非常複雜的仿真來說是一個較大的問題。

不過的事情,應該是簡單的代碼通常是,你可以不使用的方式簡單的代碼,雖然。這完全是一種心態:Logo語言源於Lisp家族,解決問題的最佳方式幾乎總是從functional programming的角度來看。如果你試圖保持一種必要的(甚至是「pythonic」)思維模式,你可能不得不「不斷地扭曲你的大腦」。

我會建議在這裏發佈問題,當你發現自己與顯然簡單的事情掙扎。有人很可能願意向你展示這種做法的「NetLogo方法」。

話雖這麼說,有對的NetLogo主要有兩種方式與其他JVM語言界面,包括Jython的:

  • The Extensions API允許您提供內的NetLogo可用新的原語。您可以設想在Jython中構建大部分模型,通過擴展基元暴露您的代碼,並將您必須在NetLogo中編寫代碼的內容保持在最低限度。

  • The Controlling API允許您從外部程序控制NetLogo。在這種情況下,您可以在Jython中編寫模型,並使用NetLogo作爲外部模擬引擎/庫。

但是,如果你的目標只是建立模擬,我不確定你會通過採取這些迂迴的方式獲得很多。你可能還需要切換到MASONRepast之類的不同平臺,或者只是,你知道... 學會愛NetLogo

+0

是的,模塊化的缺乏可能是一個大問題,但是小問題會出現並且是累積性的。我喜歡使用地圖並減少原始圖片,儘管很容易讓它們變得聰明和簡約,並且爲了清晰起見而憎恨它們。 NetLogo作爲一種語言看起來似乎是如此不受歡迎的道路。 – theoden 2014-08-29 20:49:49

+1

這是一篇關於從Python控制NetLogo的博客文章:http://davidmasad.com/blog/netlogo-from-python/ – 2014-09-05 17:38:38

+0

謝謝Seth。這是一個有趣的討論,它將通過Python運行NetLogo API。 – theoden 2014-09-06 22:22:36

1

gridworld.py模塊提供了一些類似NetLogo的功能。

我絕對喜歡Python,但是我會爲NetLogo寫一句話:一旦習慣了它的功能集,特別是在添加了任務之後,對於大多數小規模的模擬來說這已經足夠了。 (正如尼古拉斯所建議的,從功能編程的角度來說是有幫助的。)對於一些項目來說,NetLogo中缺乏繼承非常不方便(品種不是一個合適的替代品)。不過,我正在進行的項目之一是在NetLogo中,在嘗試使用Python教授基於代理的編程之後,我轉而使用NetLogo作爲教室。

還有一件事:期待,Tortoise看起來很激動人心。

+0

是的,規模是NetLogo的一個問題。我有一個數字螞蟻模擬,由於性能問題,我無法獲得10,000個以上的補丁。但它是在數百萬臺機器上運行的。我會去看看烏龜。謝謝! – theoden 2014-08-29 20:51:25

+0

NetLogo Web(又名烏龜)明顯比普通NetLogo慢,所以對於高性能和/或大量代理,最好使用常規的NetLogo。 – 2015-10-24 15:25:07