Domanda

Sto creando un Programma di modellazione basato su agenti in Java.

Sto cercando di determinare il modo migliore per animare gli agenti. Ho visto diversi esempi che usano una griglia, permettendo a ciascun agente di occupare solo una cella alla volta.

Sto cercando qualcosa di più fluido, dove gli agenti possono "fluire" attraverso la finestra in tutte le direzioni.

Eventuali suggerimenti?

Grazie!

Modificare:

L'ambiente sarà semplice e bidimensionale. Ci sarà ovunque da un agente a diverse centinaia di agenti.

Vorrei rappresentare gli agenti come piccoli cerchi con una sorta di indicazione della direzione (i dettagli sono irrilevanti; il punto è che l'agente ha bisogno della capacità di ruotare).

Seconda modifica:

Attualmente sto leggendo questo tutorial: http://www.giosoft.net/development/java-asteroids-tutorial.html

Sembra che mi aiuterà con quello che sto cercando di realizzare.

È stato utile?

Soluzione

Non riesco a dire cosa stai davvero chiedendo. Forse stai chiedendo (o intendeva porre) queste tre domande?

  1. "Per il mio modello basato su agenti, come dovrei rappresentare i miei agenti nello spazio?"

    Quando fai modellazione basata su agenti, devi progettare la tua simulazione in modo che abbia senso per il tuo dominio. Nessuno qui può darti una risposta ragionevole su quali scelte spaziali a meno che non abbiano qualche idea sul tuo dominio.

    Potresti andare con visualizzazione 2 o tridimensionale. Potresti voler usare lo spazio toroidale. È possibile imporre una griglia (ad esempio dimensioni X e Y discrete) o potresti consentire uno spazio continuo. Potresti avere alcune regole sulla vicinanza (ad esempio un solo agente può occupare uno spazio della griglia alla volta). Potresti voler andare con qualche altra serie di regole.

    Ancora una volta, la chiave è trovare una serie di regole che abbiano senso per il tuo dominio. Consiglierei di trovare il set più semplice di regole che creano ancora i tipi di comportamento essenziale per il tuo modello.

  2. "Quali librerie di animazione basate su Java dovrei considerare?"

    Una volta che hai deciso gli aspetti spaziali del tuo modello basato su agenti, poi Sarai pronto a decidere quali tecnologie utilizzare per visualizzarlo. Questo è un argomento ampio, ma ti consiglierei di dare un'occhiata all'elaborazione, Piccolo2D, Javafx, Java 2D e Java 3D.

    In realtà, questa domanda è un po 'più ampia di quanto l'ho affermato sopra. Probabilmente ti preoccuperai di più della semplice animazione. I modelli basati su agenti possono essere guidati da GUI e/o interfacce della riga di comando. Se vuoi una GUI, desideri vari controlli di input in modo che i parametri del modello possano essere sintonizzati. Ti consigliamo di considerare, almeno, Swing e Javafx.

  3. "Quali kit o librerie dovrei usare per aiutarmi a costruire il mio modello basato su agenti?"

    Il Confronto di Wikipedia degli strumenti di modellazione basati su agenti è l'elenco più completo che ho visto finora, ma potrebbe sopraffarti. Nella mia esperienza, colleghi e colleghi tendono a gravitare su uno o più dei seguenti: Netlogo, Repast Simfony, Anylogic o Mason. Alcune persone (incluso me stesso) trovano spesso più velocemente rotolare da soli. Se segui quel percorso, ti consiglio vivamente di dare un'occhiata a lingue di alto livello come Ruby, Scala o Python per lasciarti concentrarsi sulla logica del dominio anziché sui dettagli del linguaggio di basso livello.

Altri suggerimenti

Potresti voler dare un'occhiata MURATORE. È una piattaforma Java open source per la simulazione multi-agente. Alcune delle demo (ad esempio MAV) mostrano come fare esattamente ciò che descrivi.

Ripasti è un'altra piattaforma Java che potrebbe essere un'opzione.

Infine, Netlogo Rende ciò che descrivi estremamente facile. Sebbene sia possibile integrare Netlogo con altro codice Java, ha il suo piccolo linguaggio che consente uno sviluppo molto rapido.

Tra il 2000-2006 ho lavorato presso Tryllian, un'azienda olandese specializzata in sistemi multi-agente. La società non è non attiva ora.

La prima idea a Tryllian è stata quella di costruire un apparecchio di ricerca basato su agenti (chiamato Gossip). Ciò aveva un'app client grafica con una serie di agenti circolari dai colori vivaci con occhi carini. Ogni agente aveva una lacuna nella schiena in cui poteva essere trascinato uno "zaino". Lo zaino potrebbe contenere una query di ricerca e una serie di risultati di ricerca (URL, documenti, immagini ecc.). Per fare una ricerca all'utente ha dovuto trascinare un agente con uno zaino preparato sul "portale su Internet" che era una specie di porta di atterraggio con uno sfondo stellato come vedi nei film di fantascienza. L'agente verrebbe quindi "teletrasportato" al server Tryllian in cui sarebbe stato indirizzato a una "sala argomenti" da un "agente maggiordomo" che viveva sul server. Nella stanza potrebbe interagire con altri agenti e scambiare interessi di ricerca e risultati. Sembra che tu possa ancora scaricare gossip qui.

Here's what the Gossip client looked like

Successivamente Tryllian decise di sviluppare un kit di sviluppo degli agenti (ADK) con il quale si potevano creare applicazioni di agenti come Gossip più facilmente. Offriva un modello basato sulle attività per il comportamento degli agenti di programmazione. Il tuo agente otterrebbe molti eventi (agenti partiti, ecc.) E nel caso in cui i gestori potrebbero aggiungere compiti che a loro volta avrebbero anche eventi (avviati, ecc.) E potrebbero programmare comportamenti più complessi (possibilmente sotto forma di sottovaluti). L'API è stata davvero ben fatta.

La caratteristica chiave dell'ADK era secondo me la mobilità del codice offerto; Non solo gli agenti possono viaggiare tra le stanze virtuali sul loro locale sono (Agent Runtime Environment), ma potrebbero anche viaggiare su un altro server. Ciò ha comportato la serializzazione di classe e una soluzione multi-classifica che all'epoca era abbastanza rivoluzionaria (ci piaceva pensare). Questa funzione ha abilitato i progetti in cui si porta il codice ai dati invece di dover passare i dati (pompare i dati è ancora una caratteristica principale della maggior parte dei sistemi aziendali che conosco). Ad esempio, Tryllian ha sviluppato un'applicazione di auditing remota che ha permesso agli analisti della società di auditing di codificare le regole di revisione in un agente e inviarle in modo sicuro al server del proprio client per monitorare i processi.

Mi fermerò prima che questa risposta inizi a ottenere veramente lungo (-;

Questo è probabilmente un po 'più di quello che stai cercando di ottenere in questo momento. Se riesci a formulare le tue domande un po 'più specificamente, potrei dare alcuni consigli su come impostare il tuo sistema multi -agente (come modellare la messaggistica tra gli agenti è anche un argomento molto interstiting btw - oh scusa, ho detto che mi fermerei. ..).

Quale sarebbe lo scopo del tuo sistema multi-agente? Cosa farebbe un agente? Funzionerebbe su una macchina o distribuita? Gli agenti sarebbero codificati, configurabili o completamente dinamici nel loro comportamento/regole?

Un ultimo suggerimento: un ragionevole punto di partenza per pensare alla modellazione di agenti semplici è Sense-plan-act che di solito è associato ai robot.

Modifica: risposta al tuo commento

Il modello di agente Tryllian è focalizzato più sulla messaggistica che sulla stretta interazione con un ambiente fisico simulato. Guardando il sito di esempio che hai pubblicato sembra che le prestazioni siano piuttosto cruciali soprattutto quando il numero di agenti aumenta. Non sfrutteresti i punti di forza dell'agente di Tryllian: mobilità del codice, programmazione basata sulle attività, genericità, quindi penso che non sarebbe lo strumento migliore per una simulazione come questa.

Hai menzionato un approccio "griglia" contro un approccio "liscio". Penso che in una simulazione di computer dovrai sempre rappresentare le dimensioni, le coordinate, la velocità e la direzione degli agenti all'interno di una sorta di sistema discreto di coordinate. Ci sarà così sempre una sorta di griglia, ma puoi rendere le "cellule" più piccole per renderlo più fluido.

Forse ci sono alcune risorse utili da trovare nel dominio di gioco? (sprite, rilevamento delle collisioni ecc.)

Buona fortuna e buon divertimento!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top