2017-06-07 5 views
0

Wie stellt man sicher, dass ein Modell in Form von Simulink ausführbare "Standalone ausführbare" generiert verschiedene zufällige Reihenfolge jedes Mal, wenn die ausführbare Datei ausgeführt wird. Ich habe rng('shuffle') in den initFcn Callbacks hinzugefügt, aber das hat den Trick nicht gemacht.Random Number Generator wiederholt sich in Simulink

+0

Was verwenden Sie in Ihrem Modell, um Zufallszahlen zu generieren? – Navan

+0

@Sam versuchen Sie die Lösung geschrieben, ich glaube, es wird Ihr Problem beheben. – Matt

Antwort

0

Ich denke, ich fand Ihre Lösung - die Rand-Funktion erzeugt immer die gleichen Zahlen jedes Mal, wenn MATLAB geladen wird (es wird mit einem 0-Seed initialisiert). Deshalb erhalten Sie von MATLAB aus (neu) verschiedene Ausgaben, als wenn die exe erstellt wird. Die Abhilfe ist diese Zeile in Ihrem Code hinzuzufügen NUR EINMAL im Code vor Ihrer Anrufe auf rand (die einen Zufallskeim auf dem Systemtakt basiert stattdessen generieren), randn oder randi:

%THIS IS THE SOLUTION GIVEN FOR AN EXE (UPDATED FOR NEWER MATLAB VERSIONS) 
reset(RandStream.getGlobalStream,sum(100*clock)) 

%OR (THIS IS INSIDE MATLAB, HAVEN'T TRIED WITH AN EXE) 
RandStream.setGlobalStream(RandStream('mt19937ar','seed',sum(100*clock))); %note you can use 6 other random number generators, type RandStream.list for more 

Siehe hier für weitere Informationen: https://www.mathworks.com/matlabcentral/answers/104306-why-does-my-compiled-rand-function-give-the-same-values-every-time-i-run-my-matlab-generated-standal

https://www.mathworks.com/matlabcentral/answers/336-why-do-i-get-the-same-numbers-in-randn-function?s_tid=answers_rc1-1_p1_Topic

Nun, wenn Sie MATLAB verwenden Coder Sie soll sind, so etwas tun (wenn clock nicht verfügbar ist):

coder.cinclude('"time.h"') 
sd=0; 
sd=coder.ceval('time',[]); 
rng(sd); 

Alle diese Lösungen funktionieren mit den Funktionen rand, randn, randi.