the*_*den 6 python agent-based-modeling netlogo
NetLogo非常适合基于代理的建模......除了语言.我总是发现自己被扭曲我的大脑试图找出如何做一些事情,应该是简单的代码(如实现一个简单的case语句)中的NetLogo的Logo实现.徽标不是程序员的语言(对于这个断言所激怒的人道歉).
我看到了Abe Gong的Tengolo项目,声称这样做(http://compsocsci.blogspot.com/2012/02/announcing-tengolo-python-alternative.html),但该项目似乎已被放弃.堆栈溢出中的另一个问题(基于代理的模拟:性能问题:Python与NetLogo和Repast)似乎表明Python会更慢.
看起来很可能使用Jython编译成NetLogo可以使用的模块,但我想知道是否有人知道某些事情会让我用像Python这样的合理语言进行NetLogo模拟.思考?
截至2018 年 4 月,块上有一个新的孩子,PyNetLogo,它甚至可以在 PyPi中通过pip.
论文@JASSS:PyNetLogo:将 NetLogo 与 Python 连接(2018 年 3 月)
多年来,出现了许多 NetLogo 克隆类型的项目,但是一旦创建者意识到在几年甚至几十年的时间里创建和维持像 NetLogo 这样的东西需要大量的工作,它们往往会失败和消亡。(NetLogo 及其前身 StarLogo 系列的工作可以追溯到 1980 年代后期。)
2015 年更新: Mesa看起来像是 ABM-for-Python 领域的一个有前途的进入者。
对于那些喜欢 NetLogo 的功能集和代理语义但不喜欢该语言的人来说,我认为最有前途的方向是NetLogo Web项目,由 NetLogo 的开发人员(包括我自己,尽管截至 2015 年,我不再大量参与)。除了向后兼容旧的 NetLogo 语言之外,NLW 还允许使用 JavaScript 或任何编译为 JavaScript 的语言构建模型。
NLW 还没有实现与常规 NetLogo 的完整功能平价,但它正在顺利进行。因此,根据您的需求,它可能只是一个有前途的方向,而不是您今天可以使用的解决方案。
你也可以看看AgentScript——也是基于 JavaScript 的,偏向 CoffeeScript(2015 年更新:我认为他们正在转向 ES6?)。
2020 年更新:最近一个基于 JavaScript 和 Python 的参赛者(来自 StackOverflow 创始人 Joel Spolsky!)是 HASH:https : //hash.ai
NetLogo 作为一种语言确实有一些缺陷。该缺少的case说法肯定是较小的; 对于非常复杂的模拟,缺乏功能级别以上的模块化是一个更大的问题。
但是,事情应该是简单的代码通常是简单的代码,尽管在某种程度上,你可能不来。这完全是心态问题:Logo 语言起源于 Lisp 家族,解决其中问题的最佳方法几乎总是从函数式编程的角度来看。如果你试图保持一种命令式(甚至是“pythonic”)的心态,你可能不得不不断地“扭曲你的大脑”。
当您发现自己为看似简单的事情而苦苦挣扎时,我建议您在此处发布问题。很有可能有人愿意向您展示“NetLogo 方式”的做法。
话虽如此,NetLogo 有两种主要方式与其他 JVM 语言接口,包括 Jython:
扩展 API允许您提供可在 NetLogo 中使用的新原语。可以想象,您可以在 Jython 中构建大部分模型,通过扩展原语公开您的代码,并将您必须在 NetLogo 中编码的内容保持在最低限度。
Controlling API允许您从外部程序控制 NetLogo。在这种情况下,您将在 Jython 中对模型进行编码,并将 NetLogo 用作外部模拟引擎/库。
但是,如果您的目标只是建立模拟,我不确定采取这些迂回的方式是否会获得很多收益。您不妨切换到不同的平台,如MASON或Repast,或者只是,您知道...学会爱上 NetLogo。
| 归档时间: |
|
| 查看次数: |
5215 次 |
| 最近记录: |