Parametrizza simulazione basata su agenti (domanda OOP)

4

Mi piacerebbe sentire i pensieri del mio collega programmatore sulla questione della parametrizzazione delle simulazioni basate su agenti:

Si consideri:

  • Core di simulazione, tra cui geometria, test di collisione, alcune regole
  • Diversi agenti (modellati in modo OOP: ha-a, is-a, interfacce astratte)
  • Gli agenti hanno sensori diversi, attori diversi, controller diversi, ... Tutti collegati tra loro da riferimenti / puntatori e accessibili tramite interfacce astratte.

Quindi, in sostanza, ogni agente è composto da un albero proprietario (l'agente possiede sensori, controller, attori), sovrapposto a un grafico del flusso di dati (sensore collegato al controller, collegato all'attore). L'albero, il grafico più la parametrizzazione delle cose insieme formano un setup di simulazione . L'esecuzione di una simulazione equivale a:

  • Leggi nella configurazione di simulazione
  • Crea un'istanza di un gruppo di oggetti, parametrizza e collegali insieme per formare l'albero e il grafico
  • Esegui la simulazione
  • Emetti alcuni dati (statistiche, segnali, qualunque cosa)

La domanda è il modo migliore per salvare la configurazione di simulazione e come istanziare & parametrizzare roba.

Requisiti (alcuni dei quali in conflitto):

  1. Probabilmente la parametrizzazione dovrebbe essere strutturata lungo l'albero di proprietà, come più naturale.
  2. Molte volte vorrei creare un'istanza di un gruppo di agenti simili con solo i 1 o 2 parametri modificati tra le istanze. Deve essere facile.
  3. Mi piacerebbe mantenere la parametrizzazione e il codice vicini. Quando faccio esperimenti con algoritmi che sono influenzati dalla parametrizzazione, non vorrei che le modifiche fossero distribuite su troppe posizioni.
  4. Al contrario, mi piacerebbe mantenere la parametrizzazione fuori dal codice, in modo che sia facile automatizzare le esecuzioni di simulazione per spazzare sistematicamente gli spazi dei parametri.
  5. I parametri hanno metadati: tipo, intervallo di valori, unità fisica, descrizione testuale, dipendenze logiche (ad esempio se si specifica X non è necessario specificare Y)
  6. I parametri non riguardano solo i dati (variabili membro) ma anche il codice (utilizzo di una particolare specializzazione della base astratta)

Ora i miei college e io abbiamo il compito di creare una nuova simulazione basata su agenti:

  • Conosci qualche framework / libreria / tecnica?
  • I modelli sono applicabili? Best practice?
  • Meta-programmazione?
  • Abandon OOP del tutto?

Non vedo l'ora di pensare.

    
posta edgar.holleis 24.05.2011 - 13:29
fonte

4 risposte

1

DSL

Riconsiderare l'approccio linguistico specifico del dominio. Dalla tua descrizione sembra più appropriato. È molto lavoro, ma se questo sarà un sistema di simulazione di lunga durata, lo sforzo potrebbe essere utile.

Blob

Se non si tratta di un sistema di lunga durata, si consiglia di scaricare i parametri in blob JSON (o XML, o coppie di valori nominali e così via) in un database con chiave per tipo di agente e nome dello scenario. Serializzazione semplice, in altre parole. Scrivi un editor di scenari per mantenere i dati. Sto indovinando qui che i risultati della simulazione sono molto più importanti della bellezza del codice di simulazione, a patto che faccia ciò che ti serve senza troppa fatica / noia.

    
risposta data 25.05.2011 - 04:13
fonte
0

Do you know any frameworks / libraries / techniques?

Trova una lingua migliore. La compilazione non aiuta. Ripetersi in XML non aiuta. Scrivere un DSL non aiuta.

Usa un linguaggio interpretato. Mi viene in mente Python, Smalltalk, Lisp.

Are any patterns applicable? Best practises?

Sì. Utilizza una lingua interpretata.

Meta-programming?

Evita questo.

Abandon OOP altogether?

OOP è stato inventato espressamente per questo scopo. Leggi la storia di Simula e lingue correlate.

Se non puoi fare la simulazione in OOP, qualcosa di molto brutto sta accadendo intorno ai bordi del progetto e ti sta portando fuori strada.

    
risposta data 24.05.2011 - 15:20
fonte
0

Vedo che l'analisi in xml può diventare dolorosa, ma hai pensato a modelli di documenti? (Basato su JSON per esempio).

Se stai seguendo questo percorso, ci sono database basati su documenti (couchDB) che possono aiutare a memorizzare / interrogare questi dati. E con una decente normalizzazione dei tuoi dati, potresti costruire un sistema con i seguenti componenti:  1. Gestisce lo storage dei dati / analisi / analisi / reportistica  2. Un componente che gestisce la generazione di campioni di simulazione da questi dati. (Ad esempio, potresti volere tutti i dati che sono permutazioni di X: Y)

Il problema più grande che ho riscontrato nei sistemi orientati alla configurazione è che prima o poi le persone iniziano a perdere la separazione delle preoccupazioni / SRP. In questo modo, i dati diventano disordinati e così via. Una volta creato un sistema di gestione dei dati, queste difficoltà dovrebbero ridursi.

Inoltre, a livello di gruppo dovresti capire che questo è qualcosa che è molto necessario. L'altra estremità di questo è un numero illimitato di file C che sono difficili da mantenere / modificare ecc. I dati nel codice di solito hanno causato problemi.

    
risposta data 24.05.2011 - 16:37
fonte
0

Il modo in cui parametrizza è strettamente legato alla progettazione della tua simulazione complessiva.

Un approccio che ho usato in questa situazione è qualcosa di simile.

I componenti che modellerai dovrebbero tutti derivare da alcune classi comuni che il tuo motore di simulazione può gestire. Questi includono metodi per la simulazione (gestione e sincronizzazione degli eventi) e comunicazione (passaggio di messaggi).

Il motore di simulazione è responsabile della gestione dei tempi e degli eventi e anche per il trasferimento dei messaggi.

L'interfaccia di classe dovrebbe avere un set standard di metodi in modo che gli elementi possano essere collegati insieme. Tutte le interazioni tra i tuoi elementi del modello dovrebbero passare attraverso i metodi di comunicazione standard.

Un motore di simulazione che ho utilizzato con successo è DEVS-Suite .

    
risposta data 25.05.2011 - 18:18
fonte

Leggi altre domande sui tag