9

NetLogo は、言語を除いて、エージェントベースのモデリングに優れています。私はいつも、NetLogo の Logo 実装で (単純な case ステートメントを実装するなど) コード化するのが簡単であるべきことを行う方法を見つけようとして、自分の脳をゆがめていることに気づきます。ロゴはプログラマーの言語ではありません (この主張に激怒した人には申し訳ありません)。

これを行うことを目的とした Abe Gong の Tengolo プロジェクト ( http://compsocsci.blogspot.com/2012/02/announce-tengolo-python-alternative.html ) を見ましたが、このプロジェクトは放棄されたようです。また、スタック オーバーフローに関する別の質問 (エージェントベースのシミュレーション: パフォーマンスの問題: Python vs NetLogo & Repast ) は、Python の方が遅いことを示しているようです。

Jython を使用して、NetLogo が使用できるモジュールにコンパイルすることはかなり可能であるように思われますが、Python のような賢明な言語で NetLogo シミュレーションを実行できる何かを誰かが知っているかどうか疑問に思いました。考え?

4

5 に答える 5

6

何年にもわたってNetLogoのクローンタイプのプロジェクトがたくさんありましたが、NetLogoのようなものを何年も何十年にもわたって作成し、維持するためにどれほどの作業が必要であるかを作成者が認識すると、それらは崩壊して死ぬ傾向があります. (NetLogo とその前身である StarLogo ラインの作業は、1980 年代後半にまでさかのぼります。)

2015 年の更新: Mesaは ABM-for-Python スペースへの有望な参入者のようです。

NetLogo の機能セットとエージェント セマンティクスは好きだが言語は嫌いな人にとって、最も有望な方向性は、 NetLogo の開発者によるNetLogo Webプロジェクトだと思います (2015 年の時点で、私はもう深く関わっていませんが、私も含めて)。古い NetLogo 言語との後方互換性に加えて、NLW は JavaScript または JavaScript にコンパイルする任意の言語でモデルを構築することもできます。

NLW は、通常の NetLogo と完全に同等の機能をまだ達成していませんが、順調に進んでいます。そのため、ニーズによっては、現在使用できるソリューションではなく、有望な方向性である可能性があります.

また、CoffeeScript バイアスを使用した JavaScript ベースのAgentScript (2015 更新: 彼らは ES6 に切り替えていると思いますか?) も参照してください。

2020 年の更新: JavaScript および Python ベースの最近の参入者 (StackOverflow の創設者である Joel Spolsky によるものです!) はハッシュです: https://hash.ai

于 2014-08-28T12:28:51.283 に答える
5

言語としての NetLogo にはいくつかの欠陥があります。声明欠如caseは確かにマイナーなものです。関数レベル以上のモジュール性の欠如は、非常に複雑なシミュレーションにとってより大きな問題です。

しかし、コーディングが簡単であるべきことは、慣れていないかもしれませんが、通常はコーディングが簡単です。これはすべて考え方の問題です。Logo 言語は Lisp ファミリーにルーツがあり、Lisp ファミリーの問題にアプローチする最善の方法は、ほとんどの場合、関数型プログラミングの観点からです。命令的な (または "pythonic" でさえも) 考え方を維持しようとすると、おそらく常に "脳をねじ曲げる" 必要があります。

一見単純なことに苦労していることに気付いた場合は、ここに質問を投稿することをお勧めします。誰かがそれを行うための「NetLogo の方法」を喜んで示してくれる可能性は非常に高いです。

そうは言っても、NetLogo が Jython を含む他の JVM 言語とインターフェースをとる主な方法は 2 つあります。

  • 拡張 APIを使用すると、NetLogo 内で使用できる新しいプリミティブを提供できます。モデルの大部分を Jython 内で構築し、拡張プリミティブを介してコードを公開し、NetLogo 内でコード化する必要があるものを最小限に抑えることができます。

  • 制御 APIを使用すると、外部プログラムから NetLogo を制御できます。このシナリオでは、モデルを Jython でコーディングし、NetLogo を外部シミュレーション エンジン/ライブラリとして使用します。

しかし、あなたの目標がシミュレーションを構築することだけである場合、これらの回り道をすることで多くの利益が得られるかどうかはわかりません. MASONRepastなどの別のプラットフォームに切り替えるか、 NetLogo を愛することを学ぶこともできます。

于 2014-08-27T21:46:08.573 に答える
4

gridworld.pyモジュールは、いくつかの NetLogo のような機能を提供します

私は絶対に Python が大好きですが、NetLogo について一言言います。特にタスクの追加以降、その機能セットに慣れれば、ほとんどの小規模なシミュレーションには十分すぎるほどです。(Nicolas が示唆しているように、関数型プログラミングの観点が役に立ちます。) 一部のプロジェクトでは、NetLogo に継承がないことは非常に不便です (品種は適切な代替物ではありません)。それでも、進行中のプロジェクトの 1 つに NetLogo があり、Python を使用してエージェント ベースのプログラミングを教えようとした後、教室で NetLogo に切り替えました。

もう 1 つ: 楽しみにしていて、Tortoiseはかなりエキサイティングに見えます。

于 2014-08-27T22:29:21.257 に答える
3

Python から NetLogo モデルの最適化または感度分析を行う場合は、NL4Pyの使用を検討することをお勧めします。NL4Py は、Python から NetLogo モデルを制御できるようにする Python パッケージです。パッケージはPyPI.org でリリースされており、簡単なpip install nl4py.

記事のプレプリント

リポジトリとドキュメント

NL4Py と DEAP を使用したモデル キャリブレーションの例

NL4Py と SALib を使用した感度分析の例

于 2018-09-11T15:35:43.883 に答える