Come prevedere un futuro stato di simulazione

0

Abbiamo un programma che combina la simulazione di un sistema di aeromobili e scenari pedagogici predefiniti per i piloti tirocinanti per imparare come utilizzare questo sistema.

Quando seguiamo lo scenario normale, capitolo dopo capitolo, tutto va liscio .

Ora, quando il tirocinante salta il capitolo N e va direttamente al capitolo N + 1, la simulazione passa a snafu perché il capitolo N non è stato eseguito dalla simulazione, risultando in uno stato incoerente .

Come rimedio, scriviamo lo stato di simulazione desiderato nel file dello scenario, subito dopo il punto di inserimento del capitolo.

Il problema è che non è possibile prevedere lo stato di simulazione per il capitolo N se non conosciamo lo scenario a memoria. E alcuni scenari sono molto complessi. Uno sviluppatore deve dedicare molto tempo allo studio dello scenario per ottenere un quadro accurato di ciò che è previsto dal tirocinante, quindi passa al capitolo N.

Il software non ha bisogno di persistenza. Cioè, non dobbiamo salvare lo stato di simulazione quando il programma non è in esecuzione.

Lo stato della simulazione è gestito da ~ 200.000 variabili. Non è possibile per noi fare un'istantanea dello stato di simulazione ad ogni passaggio perché sarebbe estremamente impraticabile, e ogni volta che lo scenario viene aggiornato, lo snapshot non sarà aggiornato.

Inoltre, non abbiamo accesso esternamente a tutte le variabili poiché alcune sono private e fuori dai limiti (e anche se avessimo accesso, sarebbe una cattiva idea, data la mole di dati).

È un problema comune e ci sono le migliori pratiche e le soluzioni note per affrontare questo problema?

    
posta Sebastien Guimmara 18.09.2014 - 18:02
fonte

2 risposte

2

Esegui il simulatore passando da ogni fase a N + 1, quindi registra lo stato. Quando vuoi passare a N + 1, ripristina semplicemente lo stato che hai registrato.

    
risposta data 18.09.2014 - 18:30
fonte
0

The simulation state is managed by ~200 000 variables. It is not possible for us to make a snapshot of the simulation state at every step because it would be highly impracticable, and each time the scenario is updated, the snapshot would be out of date.

Questo sembra un problema non solo per eseguire la simulazione in un determinato capitolo, ma anche per testarlo. Per testare qualcosa è necessario conoscere le condizioni preliminari, cioè lo stato previsto all'inizio del test. Non è ragionevole aspettarsi che i programmatori operino su un sistema che coinvolge 200.000 variabili per prevedere correttamente ogni effetto delle modifiche apportate al sistema, quindi i test automatici sembrano un requisito assoluto per qualcosa di simile.

The software doesn't need persistence. That is, we don't have to save the simulation state when the program is not running.

Anche se potrebbe non essere necessario che tu possa salvare lo stato del simulatore per ogni tirocinante, il fatto che tu stia facendo questa domanda indica che, in effetti, devi essere in grado di salvare lo stato della simulazione in vari punti in modo da poter caricare configurazioni specifiche su richiesta. Ancora una volta, questo non solo risolverà il tuo problema, ma pagherà anche dividendi in termini di test e debugging.

Se non è possibile salvare ragionevolmente lo stato effettivo della simulazione, un'altra opzione è quella di poter registrare e riprodurre le azioni dell'utente. Questo è davvero solo un altro modo per registrare lo stato, ma invece di registrare lo stato del sistema in un dato momento, invece registra tutti i passaggi che ti portano a quello stato. In un sistema deterministico la stessa serie di input risulterà sempre nello stesso stato finale. Questo approccio potrebbe avere alcuni vantaggi: poiché non si registra lo stato effettivo del sistema, non importa se il modo in cui il sistema viene implementato cambia; tutto ciò che conta è che le azioni attese dall'utente in ogni fase non cambino. Inoltre, lo spazio necessario per registrare le azioni dell'utente potrebbe non essere così grande come quello necessario per registrare lo stato totale del sistema.

    
risposta data 03.10.2014 - 16:41
fonte