Menu

Mastersim - Abfrage von Bedingungen bei Simulation

2017-11-27
2017-11-27
  • Andreas Nicolai

    Andreas Nicolai - 2017-11-27

    Ist es möglich, während einer Simulation nach jedem Schritt eine Bedingung (beispielsweise den Wert einer berechneten Variable) abzufragen und von dieser abhängig zu machen, ob ein weiterer Schritt getan oder die Simulation beendet werden soll?

    Wo und wie ließe sich das am besten einbauen?

    Eine Alternative wäre für uns auch, die Simulationsergebnisse nicht in eine Datei zu schreiben, sondern an ein externes "Überprüfungstool" zu übergeben, welches die Simulation dann gegebenenfalls abbricht. Gibt es eine einfache Möglichkeit, diese Art des Outputs zu realisieren?

     
  • Andreas Nicolai

    Andreas Nicolai - 2017-11-27

    Ist es möglich, während
    einer Simulation nach jedem Schritt eine Bedingung (beispielsweise den
    Wert einer berechneten Variable) abzufragen und von dieser abhängig zu
    machen, ob ein weiterer Schritt getan oder die Simulation beendet werden
    soll?

    Das geht (noch) nicht.

    Wo und wie ließe sich das am besten einbauen?

    Eine Quick-and-Dirty Variante ist einfach.

    In der Funktion MasterSim::simulate() in MSIM_MasterSim.cpp nach doStep() einfach den Test einbauen und dabei direkt auf die in den Slaves gespeicherten Variablen zugreifen. Quick-and-Dirty deshalb, weil man dabei genau wissen muss, welche Variable in welchem Slot liegt. Ist außerdem dann nicht konfigurierbar.

    Eine komfortable Implementierung macht deutlich mehr Arbeit, da hier die Projektdatei-Parser-Routinen erweitert werden müssen, und aus Effizienzgründen die zu prüfenden Variablen zur Initialisierungszeit bestimmt und deren Slave + Index gespeichert werden.

    Eine Alternative wäre für uns auch, die Simulationsergebnisse nicht in eine Datei zu schreiben, sondern an ein externes "Überprüfungstool" zu übergeben, welches die Simulation dann gegebenenfalls abbricht. Gibt es eine einfache Möglichkeit, diese Art des Outputs zu realisieren?

    Ist vom Programmfluss her nicht einfach - MasterSim wäre der aufrufende Prozess und könnte von einem Kind-Prozess nicht einfach gekillt werden.

    Eine saubere Lösung wäre eher die Unterstützung einer Callback-Funktion, welche die aktuelle Lösung bekommt, und MasterSim via Rückgabewert signalisiert, ob weiterzurechnen ist oder abgebrochen werden soll.

    Man könnte das automatisieren, indem man versucht, eine entsprechende Checkfunktion aus einer DLL/so-Bibliothek bei der Initialisierung zu importieren, und diese dann jeweils nach jedem Schritt mit allen aktuellen Ergebnisgrößen aufrufen und den Rückgabewert testen.

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.