2009-11-03 14 views
12

Ich würde gerne einige Szenarien mit dem multiagenten Paradigma simulieren, und es scheint NetLogo und Repast sind die beliebtesten Werkzeuge dafür.NetLogo vs. Repast Simphony?

Ich würde gerne wissen, ob jemand Erfahrung mit beiden hatte und könnte mir mehr über sie erzählen? Zum Beispiel habe ich bemerkt, dass es eine fluxogrammähnliche Modellierungsoption für Repast gibt, aber ich glaube, dass sie eher begrenzt ist. Ich habe mir die Tutorials und die Dokumentation auf der offiziellen Website angeschaut und die Dokumentation scheint zu fehlen. Es gibt zwar einige Beispiele dafür, aber ich würde sagen, dass es so erweitert wird, um ein Umfeld zu simulieren, auf das es nicht speziell vorbereitet wurde, obwohl Repast offensichtlich sehr robust ist und offensichtlich genug damit zurechtkommt Vertrautheit damit.

Auf der anderen Seite hat NetLogo mehr Beispiele und insgesamt habe ich es mehr für seine Einfachheit gemocht, aber es scheint sich mehr auf die Simulation der Ausbreitung von Krankheiten oder ähnlichen Modellen zu konzentrieren. Ich habe ein Programmierbuch gefunden, das Logo lehrt, also denke ich, dass es leichter wäre, damit anzufangen.

Momentan denke ich darüber nach, botnets und IDS es als multiagents zu simulieren. Das Problem ist jedoch, dass ich die Netzwerk- und Transportschichten in einem gewissen Maße abstrahieren muss, um dies tun zu können, und auch Verkehr zwischen den Knoten generieren kann. Repast scheint dafür passender zu sein, aber angesichts der Komplexität und des Mangels an Dokumentation denke ich über NetLogo nach. Zwar gibt es einige Beispiele für NetLogo mit traditionellen Anwendungen (z. B. Tetris oder Pac-Man), aber ich bin nicht sicher, ob dies angemessen wäre.

Antwort

1

Sie könnten den Datenverkehr mit einem Agententyp namens "packet" simulieren, der erzeugt und von einem Agenten namens "bot" an einen anderen Agenten namens "bot" oder "server" gesendet wird. Anstatt die Pakete an eine IP-Adresse zu senden, würden Sie sie an ein Paar X- und Y-Koordinaten senden.

Netlogo hat ein Beispiel dafür, wie sich ein Virus in einem Netzwerk verbreitet, dies könnte ein guter Ausgangspunkt sein.

2

Ich hatte mehr oder weniger das gleiche Problem vor ein paar Monaten, als ich ein Framework für meine Simulation wählen musste. Ich schaue auf Repast, NetLogo, Swarm und Jade. NetLogo war nett und ich habe versucht, einige einfache Testanwendungen zu schreiben, aber da ich Java als meine Programmiersprache verwenden wollte, war NetLogo nicht der beste Kandidat. Repast hat so ziemlich alles, was Sie brauchen, um größere Simulationen zu schreiben und es gibt viele Projekte (besonders in den Sozialwissenschaften), in denen Repast verwendet wird. Meine Probleme mit Repasts waren: schlechte API-Dokumentation, Parameter, die an Methoden übergeben werden oder Konstruktoren, die nie benutzt werden und überhaupt keinen Sinn ergeben (siehe Quellcode) und eine Menge Standardcode. Ich benutze jetzt Jade (http://jade.tilab.com/) und ich bin wirklich glücklich damit. Die Community ist gut und ihre Mailingliste ist SEHR aktiv. Okay, Jade ist nur eine Bibliothek und ein Framework für agentenbasierte Modellierung. Sie werden nicht so etwas wie diesen visuellen Editor in Repast bekommen, und Sie müssen Ihr eigenes Werkzeug schreiben, um die Ergebnisse zu visualisieren.

Prost

0

Ich habe nie versucht, NetLogo, aber habe ich versucht, Repast-J und Simphony. Es scheint, dass Simphonie gut ist, aber im Moment bleibe ich bei der Änderung des Edge-Typs von der geraden Linie zur gekrümmten. Es sind nicht genügend Dokumentationen und Beispiele verfügbar. Einmal habe ich versucht Mason, die auf Java basiert auch. Es ist vergleichbar mit Repast-J, aber es war schneller. Aber in letzter Zeit gibt es in Mason nicht viel Entwicklung. Ich möchte Jade später ausprobieren.

12

Ich habe eine Webseite mit ein paar dösen netlogo multiagent simulations.Ich benutze netlogo für den Unterricht und ich habe festgestellt, dass man Simulationen erstaunlich schnell entwickeln kann, sobald man die Lernkurve überwunden hat. Dinge, die Sie 80 Mannstunden in anderen so genannten Agentenumgebungen (Jade, Repast, die in der Regel nur Bibliotheken programmieren) benötigen, können in 2 Stunden erledigt werden.

Auf der anderen Seite ist netlogo nicht wirklich gut für Simulationen, die eine immense Menge an Details erfordern, wie zB das Simulieren eines Netzwerks von TCP/IP bis HTTP. Das würde nur große Mengen an Code erfordern, unabhängig von der Programmiersprache, und netlogo saugt derzeit, wenn Ihr Programm mehr als 10 Seiten lang wird. Allerdings würden die meisten Leute erstaunt sein, was Sie in 10 Seiten Netlogo Code machen können.

10

Kurze Antwort: es auf dem Programmierparadigma oder Sprache, die Sie verwenden möchten, hängt, und der Entwurf, den Sie für Ihre Agenten wollen:

  • Wenn Sie eine Low-Entry - High-Ceiling-Sprache, die schnelles Prototyping, aber ausgeklügelte Simulationen erlaubt und bereit ist, ein neues Paradigma zu lernen (Schleifen zu vermeiden), verwenden Sie NetLogo. Gute Dokumentation.

  • Wenn Sie eine echte Anwendung für hochparallelisierte Cluster erstellen möchten oder einfach Java Groovy verwenden möchten oder eine spezielle Java-Bibliothek für Ihren Zweck benötigen, verwenden Sie Repast oder besser Repast for High Performance Computing (aber vermeiden Sie ReLogo, das sehr langsam ist). Leichte Dokumentation.

  • Wenn Sie kognitive Agenten modellieren möchten (statt reaktiv) mit FIPA-Kommunikation verwenden besser Jason oder besser JaCaMo die AgentSpeak + Java unterstützt (so können Sie auch Ihre Lieblings-Java-Bibliotheken), und es gibt keine Groovy erforderlich. Schlechte Dokumentation (viele nicht detaillierte Funktionen und Befehle und schlechte, zu komplexe, nicht kommentierte Beispiele).

Lange Antwort: Disclaimer: Ich bin erfahreneren mit NetLogo aber ich habe auch Repast und ein paar andere wie Jason. Der Unterschied zwischen NetLogo und Repast besteht darin, dass Sie mit NetLogo ein einfacheres Framework haben, aber Sie müssen lernen, wie man in einem Turtle-and-Patch-orientierten Paradigma programmiert, während Sie in Repast müssen lerne das + die Mechanismen hinter Java Groovy, aber du wirst später mehr Flexibilität bekommen. Geschwindigkeit ist hier nicht wirklich ein Kriterium (siehe unten).

Um klarer zu sein, können Sie in NetLogo effizient programmieren, wenn Sie die nativen Funktionen der Schildkröten und Patches maximal nutzen. Zum Beispiel, wenn Sie A * implementieren, anstatt eine Liste von Knoten zu implementieren, sollten Sie direkt die patchs verwenden und filtern sie mit stopfen wie folgt aus:

ask patchs with [criteria1 = value and criteria2 = value2] [do-some-stuff] 
ask patchs with-min [criteria][do] 
let var [somevalue] of min-one-of patches [criteria] 

Auch wenn Sie nicht, einen Weg finden Effizient zu tun, was Sie wollen, achten Sie darauf, if maybe an extension exists (überprüfen Sie auch here unter Bibliotheken und Tools) für Ihren Zweck, wie die jetzt native Matrix-Erweiterung, die mir eine efficient neural network in NetLogo machen.

Auf der anderen Seite ist Repast möglicherweise flexibler als NetLogo (da Sie Zugriff auf die gesamte Palette von Java-Bibliotheken haben), aber ein bisschen komplexer, da Sie wissen müssen, wie Sie mit Groovy umgehen.

Wenn Sie ausschließlich an Geschwindigkeit interessiert sind, verwenden Sie KEINE ReLogo (NetLogo-ähnliche Syntax für Repast), die viel langsamer als NetLogo gezeigt wurde (siehe 2012 Papier unten). In jedem Fall wäre es das Beste, entweder eine Implementierung mit NetLogo mit den oben genannten Tricks zu versuchen, oder wenn Sie Ihre Anwendung zu einem späteren Zeitpunkt verwenden möchten, gibt es auch eine Distribution namens Repast für High Performance Computing, die die meisten entfernt Überlastung, die mit Schildkröten und Patches Objekte kommen, und somit kann es für echte Anwendungen verwendet werden. A similar extension exists for NetLogo in Clustern mit Parallelisierung zu berechnen, aber es ist keine offizielle Verteilung.

Wenn Sie mehr Infos über die verschiedenen Plattformen wollen, hier ist ein schöner Rückblick 2006:

Railsback, S. F., Lytinen, S. L., & Jackson, S. K. (2006). Agent-based Simulation Platforms: Review and Development Recommendations. SIMULATION, 82(9), 609-623.

und eine aktualisierte Version dieses Papiers im Jahr 2012 den Umgang mit NetLogo vs ReLogo:

Lytinen, S. L., & Railsback, S. F. (2012, April). The evolution of agent-based simulation platforms: A review of netlogo 5.0 and relogo. In Proceedings of the Fourth International Symposium on Agent-Based Modeling and Simulation.

/EDIT: Ich zitiert Jason, aber keine weiteren Details. Wenn Sie kognitive Agenten (anstelle von reaktiven Agenten) modellieren möchten, können Sie das in NetLogo mit dem inoffiziellen BDI extension tun, das gut funktioniert, aber ein wenig eingeschränkt ist (aber es ist leicht erweiterbar, da es reines NetLogo ist), aber Ihre beste Wette ist zu verwenden ein Framework, das speziell entwickelt wurde, um kognitive Agenten mit voller Unterstützung von AgentSpeak zu modellieren.

Jason ist sehr nett, da Sie Zugriff auf eine vollständige AgentSpeak Sprache + JAVA haben, um die technische Seite zu implementieren. In der Tat können Sie ganze Projekte mit nur AgentSpeak (was ich getan habe), aber Sie können auch mehr Java-orientierte Versionen machen, es liegt an Ihnen, wie Sie Ihr Programm zu entwerfen, das Ergebnis wird mehr oder weniger das gleiche sein. Dies bietet Ihnen viel Flexibilität in Ihrem Design-Workflow.

Tipp: Suchen Sie in der Dokumentation nach "Jason internal actions", um eine gute Beschreibung der verfügbaren AgentSpeak-Befehle zu erhalten.

Auch wenn Sie an Jason interessiert sind, könnten Sie Interesse an JaCaMo (= Jason + Cartago + Moise), die das Ergebnis einer Zusammenarbeit von drei Projekten Autoren, ein vollwertiges kognitives Agenten-Framework, die auch modellieren kann komplexe Umgebungen (mit Artefakttheorie) und Multiagentenorganisationen (Rollen, Gruppen, Missionen, etc.).

Ein letzter Rahmen, den ich kenne, aber keine Chance hatte, ist Mason, der 2D- und 3D-Umgebungen unterstützt. Hatte nie eine Chance, dieses hier zu probieren, also weiß ich nicht, wie das mit den anderen verglichen wird, aber Sie können es ausprobieren.

+0

Um mehr über Jason zu erfahren, empfehle ich, das Buch zu verwenden: Programmierung von Agentensystemen in AgentSpeak mit Jason http://jason.sourceforge.net/jBook/jBook/Home.html –

0

Wenn Sie bereits Code in Java, können Sie auf der folgenden Papier sehen auch für einen Vergleich zwischen Repast, Swarm, Quecksilber und VSEit, verschiedene frei verfügbaren Bibliotheken für die Unterstützung der Programmierung der sozialen wissenschaftliche agentenbasierte Computersimulation

Tobias, Robert, and Carole Hofmann. "Evaluation of free Java-libraries for social-scientific agent based simulation." Journal of Artificial Societies and Social Simulation 7.1 (2004).

repast ist auf jeden Fall flexibler als NetLogo aber die Dokumentation ist nicht sehr detailliert für repast Symphony