2012-03-20 7 views
7

Sono nuovo di Akka e il modello dell'attore, quindi non sono sicuro se si adatta alle mie esigenze.Akka per simulazioni

Voglio creare una simulazione con akka e milioni di entità (pensare come oggetti di dominio - attori successivi) che possono influenzarsi a vicenda. Quindi, pensando come simulazione con un risultato "fuzzy" più o meno, abbiamo un array con entità, in cui ognuna di queste entità ha una velocità, ma è ostacolata dalle entità di fronte all'entità reale. Quando inizia la simulazione, ogni entità dovrebbe spostare n campi, o, se contrastata da altri, meno campi. Abbiamo diverse iterazioni e alla fine abbiamo un nuovo ordine. Questo viene ripetuto per alcuni round fino a quando non vogliamo vedere una "istantanea" delle entità principali (che possono essere rimosse prima che inizi il prossimo round).

Quindi non capisco se riesco a creare questo con Akka, perché:

E 'possibile avere l'elenco globale con la posizione di ciascun attore, in modo da sapere in quale posizione sono e quali sono in davanti a loro? Per quanto ho capito, questo viola l'incapsulamento degli attori. Posso mettere la posizione dell'attore nell'attore stesso, ma come posso vedere/notificare gli attori attorno a questo attore? Oltre a questo, l'elenco globale creerà problemi di sincronizzazione e inciderà sulle prestazioni, esattamente l'opposto del comportamento desiderato (ed è complementare a akka/il modello dell'attore)

Cosa mi sono perso? Devo cercare un altro approccio di progettazione? Grazie per i suggerimenti.

Aggiornamento: lavorare con eventbus e classificatori non sembra un'opzione, anche. Facendo riferimento alla documentation:

"quindi non è ben adatto a utilizzare i casi in cui le sottoscrizioni cambiano con frequenza molto elevata"

risposta

2

Il modello attore è una misura molto buona per lo scenario. Gli attori comunicano inviando messaggi, quindi ogni attore può inviare messaggi ai suoi vicini che contengono la sua posizione. Naturalmente, ogni attore non può sapere di ogni altro attore nel sistema (non in ogni caso in modo efficiente), quindi dovrai anche escogitare uno schema attraverso il quale ogni attore conosce che i suoi vicini sono.

Per ottenere un'istantanea del sistema, è sufficiente disporre di un attore centrale che sia conosciuto da tutti e conosca tutti.

Sembra che tu abbia appena iniziato con gli attori. Leggi un po 'di più - il sito di akka è una buona risorsa - e torna indietro e perfeziona la tua domanda, se necessario.

Il tuo problema suona come un tipo di cosa, n-body simulation, quindi potrebbe essere utile esaminare anche questo.

+0

Abbiamo deciso di utilizzare una soluzione diversa per il nostro problema. Comunque penso che il tuo schema suggerito sia promettente. Anche grazie per il riferimento di n-body. – Dag