随机数生成器在simulink中是重复的

时间:2017-06-07 15:36:50

标签: matlab simulink

如何确保以simulink生成的可执行“独立可执行文件”形式的模型在每次执行可执行文件时生成不同的随机序列。 我在initFcn Callbacks中添加了rng('shuffle'),但这并不能解决问题。

1 个答案:

答案 0 :(得分:0)

我想我找到了你的解决方案 - 每次加载MATLAB时,rand函数总是生成相同的数字(它用0种子初始化)。这就是为什么你从MATLAB运行不同的输出(重新)比建立exe时的原因。解决方法是在您调用choiceButton.setInfos(text: self.paragraph.choiceButtonArray[button]["text"]!, goToParagraphId: self.paragraph.choiceButtonArray[button]["goToParagraphId"]!) rand或{{1}之前,将此行添加到您的代码中(而不是根据系统时钟生成随机种子)仅在您的代码中生成}:

randn

请点击此处了解详情: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

现在,如果你正在使用MATLAB编码器,你应该做这样的事情(如果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

所有这些解决方案都适用于clockcoder.cinclude('"time.h"') sd=0; sd=coder.ceval('time',[]); rng(sd); rand函数。