如何确保以simulink生成的可执行“独立可执行文件”形式的模型在每次执行可执行文件时生成不同的随机序列。
我在initFcn Callbacks中添加了rng('shuffle')
,但这并不能解决问题。
答案 0 :(得分:0)
我想我找到了你的解决方案 - 每次加载MATLAB时,rand函数总是生成相同的数字(它用0种子初始化)。这就是为什么你从MATLAB运行不同的输出(重新)比建立exe时的原因。解决方法是在您调用choiceButton.setInfos(text: self.paragraph.choiceButtonArray[button]["text"]!, goToParagraphId: self.paragraph.choiceButtonArray[button]["goToParagraphId"]!)
,rand
或{{1}之前,将此行添加到您的代码中(而不是根据系统时钟生成随机种子)仅在您的代码中生成}:
randn
现在,如果你正在使用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
所有这些解决方案都适用于clock
,coder.cinclude('"time.h"')
sd=0;
sd=coder.ceval('time',[]);
rng(sd);
,rand
函数。