2010-10-22 5 views
11

Attualmente sto cercando un simulatore di eventi discreti scritto per C++. Non ho trovato molto sul web scritto specificamente in stile OO; ce ne sono alcuni, ma obsoleti. Alcuni altri, come Opnet, Omnet e ns3 sono troppo complicati per quello che devo fare. Inoltre, ho bisogno di simulare algoritmi basati su agenti in grado di simulare sistemi di migliaia di nodi.simulatori di eventi discreti per C++

Qualcuno sa qualcosa di adatto alle mie esigenze?

+0

Se si ha dimestichezza con Python, è possibile provare GarlicSim, che consente di eseguire simulazioni basate su agenti. (Non l'ho mai provato per migliaia, ma non credo che ci sarà un problema.) –

risposta

0

Dai uno sguardo allo GBL library. È scritto in C++ moderno e supporta anche funzionalità C++ 0x come la semantica del movimento e le funzioni lambda. Offre diversi meccanismi di modellazione: gestori di eventi sincroni e asincroni, thread preventivi e fibre. È possibile creare modelli puramente comportamentali, accurati del ciclo e in tempo reale o qualsiasi combinazione di questi.

+1

Autopromozione? –

+1

auto revisioni è consentita se si adatta al contesto in cui si trova (è una risposta) –

1

Esiste CSIM da Mesquite Software che supporta lo sviluppo di modelli in C, C++ e Java. Tuttavia, è pagato-commerciale, AFAIK.

3

Altri hanno buone risposte dirette, ma ho intenzione di suggerire un'alternativa. Se ti capisco bene, vuoi un sistema in C++ o simile in cui puoi pubblicare eventi che si attivano in futuro, e il codice viene eseguito quando questi eventi si attivano.

Avevo un progetto da fare in questo modo e ho iniziato a provare a scrivere un tale sistema di eventi in C++ e poi ho realizzato rapidamente che avevo una soluzione migliore.

Hai mai pensato di scrivere il tuo programma in Verilog comportamentale? Potrebbe sembrare strano scrivere software in un linguaggio descrittivo dell'hardware, ma un simulatore Verilog è un sistema basato sugli eventi e il Verilog comportamentale è un modo molto conveniente per esprimere eventi, tempi, trigger, ecc. Esiste un simulatore Verilog gratuito (che è quello che ho usato) chiamato Icarus Verilog. Se non stai usando Ubuntu o qualche distribuzione Linux con Icarus già in un pacchetto, costruire dalla sorgente è semplice.

+0

, si prega di prendere in considerazione la pubblicazione di un collegamento a un esempio di Verilog che esegue un semplice esempio DES. Grazie – gatorback

+0

@ gatorback Non sono sicuro di averlo mai visto fare da nessun altro.Sono sicuro che lo abbiano, ma l'unico esempio che conosco è il già citato progetto che ho fatto, e non ho idea di dove ho messo quel codice. –

3

Vorrei raccomandare un secondo aspetto a OmNet ++. A prima vista potrebbe sembrare piuttosto complesso, ma se lo guardi più in dettaglio scoprirai che la maggior parte della complessità è nel componente aggiuntivo di rete (il framework INET). A meno che non si stia eseguendo una simulazione di rete dettagliata, non è necessario l'INET.

L'utilizzo del core OmNet ++ non è particolarmente difficile e potrebbe essere più semplice di altri strumenti simili.

si consiglia di dare un'occhiata ad un intro (probabilmente un po 'obsolete) a http://www.arcos.inf.uc3m.es/~jdaniel/seminarios/omnet2/index.html

Una delle cose che rende Omnet ++ interessante per me è la sua scalabilità. È possibile eseguire simulazioni di grandi dimensioni in un desktop. Inoltre, è possibile ridimensionare la stessa simulazione in un cluster senza riscrivere il codice.

2

Si consiglia di considerare SystemC, anche se consiglio anche di dare una seconda occhiata a OmNet ++.

1

Io uso SIMLIB nella mia scuola. È un simulatore molto veloce, facile da capire, orientato agli oggetti, discreto e continuo. Potrebbe sembrare obsoleto, ma è ancora mantenuto.