2014-08-27 22 views
5

NetLogo è eccellente per la modellazione basata su agenti ... ad eccezione della lingua. Mi ritrovo sempre a contorcermi il cervello cercando di capire come fare qualcosa che dovrebbe essere essere semplice da codificare (come implementare una semplice dichiarazione di un caso) nell'implementazione del logo di NetLogo. Il logo non è il linguaggio di un programmatore (ci scusiamo con quelli infuriati da questa affermazione).Script Python per NetLogo?

Ho visto il progetto Tengolo di Abe Gong che si proponeva di fare proprio questo (http://compsocsci.blogspot.com/2012/02/announcing-tengolo-python-alternative.html) ma il progetto sembra essere stato abbandonato. Un'altra domanda nello stack overflow (agent-based simulation: performance issue: Python vs NetLogo & Repast) sembra indicare che Python sarebbe più lento.

Sembra che sarebbe abbastanza possibile utilizzare Jython per compilare moduli che NetLogo potrebbe utilizzare, ma mi chiedevo se qualcuno fosse a conoscenza di qualcosa che mi permettesse di fare simulazioni NetLogo in un linguaggio ragionevole come Python. Pensieri?

+0

rilevanti: https://simulatingcomplexity.wordpress.com/2014/05/26/how-the-python-eat-the-turtle/ –

+0

Recentemente mi sono arrabbiato con Python per non avere l'istruzione Replica di Netlogo. – ychaouche

risposta

4

Ci sono stati un sacco di progetti di tipo clone NetLogo durante l'anno, ma tendono a fondare e morire una volta che i creatori si rendono conto di quanto sia enormemente coinvolto nel creare e sostenere qualcosa come NetLogo in un periodo di anni e persino decenni. (I lavori per NetLogo e dei suoi predecessori nella linea StarLogo risale alla fine del 1980.)

2015 aggiornamento:Mesa sembra una concorrente promettente nello spazio ABM-per-Python.

Per coloro che come quella di NetLogo set di funzionalità e agente semantica, ma non amano la lingua, credo che la direzione più promettente è il progetto NetLogo Web, dagli sviluppatori di NetLogo (me compreso, anche se a partire dal 2015, non sono più pesantemente coinvolti). Oltre ad essere retrocompatibile con il vecchio linguaggio NetLogo, NLW consente anche di costruire modelli in JavaScript o in qualsiasi linguaggio compile-JavaScript.

NLW non ha ancora raggiunto la piena parità di funzionalità con il normale NetLogo, ma è in buone condizioni. Quindi, a seconda delle esigenze, potrebbe essere solo una direzione promettente piuttosto che una soluzione che puoi utilizzare oggi.

Si potrebbe anche dare un'occhiata a AgentScript - anche basato su JavaScript, con un bias di CoffeeScript (aggiornamento 2015: penso che stanno passando a ES6?).

+0

Grazie per il puntatore a Tortoise. Lo guarderò. Non posso dire che il purista in me sia davvero in JavaScript, ma almeno ci sono strutture di controllo migliori. – theoden

2

NetLogo come lingua presenta alcuni difetti. Il lack of a case statement è certamente un minore; la mancanza di modularità al di sopra del livello di funzione è maggiore per simulazioni molto complesse.

Ma le cose che dovrebbe essere semplice da codice di solito sono semplici da codice, anche se in un modo che si potrebbe non essere abituati. È tutta una questione di mentalità: il linguaggio Logo ha le sue radici nella famiglia Lisp e il modo migliore per affrontare un problema è quasi sempre dal punto di vista functional programming. Se cerchi di mantenere una mentalità imperativa (o anche "pitonica"), dovrai probabilmente "contorcere il tuo cervello" costantemente.

Suggerirei di postare domande qui quando ti trovi a dover lottare con cose apparentemente semplici. C'è una buona possibilità che qualcuno sia disposto a mostrarti il ​​"modo NetLogo" per farlo.

Detto questo, ci sono due modi principali per NetLogo ad interfacciarsi con altre lingue, tra cui la JVM Jython:

  • The Extensions API consente di fornire nuove primitive utilizzabili all'interno NetLogo. Potresti costruire la maggior parte del tuo modello all'interno di Jython, esporre il tuo codice attraverso le estensioni primitive e mantenere al minimo le cose che devi codificare all'interno di NetLogo.

  • The Controlling API consente di controllare NetLogo da un programma esterno. In questo scenario, si codificherebbe il modello in Jython e si utilizzerà NetLogo come motore/libreria di simulazione esterni.

Ma se il vostro obiettivo è solo quello di costruire simulazioni, non sono sicuro che otterrete molto prendendo questi modi indiretti. Potresti anche passare a una piattaforma diversa come MASON o Repast o semplicemente, lo sai ... imparare ad amare NetLogo.

+0

Sì, la mancanza di modularità è probabilmente il grosso problema, ma i problemi minori emergono e sono cumulativi. Mi piace usare la mappa e ridurre le primitive sebbene sia facile amarle per intelligenza e parsimonia e odiarle per chiarezza. NetLogo come lingua sembra davvero un percorso fuori dal comune. – theoden

+1

Ecco un post sul blog relativo al controllo di NetLogo da Python: http://davidmasad.com/blog/netlogo-from-python/ –

+0

Grazie, Seth. Questa è un'interessante discussione su ciò che sarebbe necessario per eseguire l'API NetLogo tramite Python. – theoden

1

Il modulo gridworld.py fornisce alcune funzionalità di tipo NetLogo.

Amo assolutamente Python, ma metterò una parola per NetLogo: è più che adeguato per la maggior parte delle simulazioni su piccola scala, una volta che ci si abitua al suo set di funzionalità, specialmente dopo l'aggiunta di attività. (Come suggerisce Nicolas, prendere una prospettiva di programmazione funzionale aiuta.) Per alcuni progetti l'assenza di ereditarietà in NetLogo è davvero scomoda (le razze non sono un sostituto adeguato).Tuttavia, uno dei miei progetti in corso è in NetLogo e, dopo aver provato a insegnare la programmazione basata su agenti con Python, sono passato a NetLogo per la classe.

Un'altra cosa: guardare avanti, Tortoise sembra piuttosto eccitante.

+0

Sì, la scala è un problema per NetLogo. Ho una simulazione Digital Ants che non riesco a superare le 10.000 patch a causa di problemi di prestazioni. Ma è fatto per funzionare su milioni di macchine. Controllerò la tartaruga. Grazie! – theoden

+0

NetLogo Web (alias Tortoise) è notevolmente più lento del normale NetLogo, quindi per prestazioni elevate e/o un numero elevato di agenti, si sta meglio con NetLogo. –