关于MATLAB 打包成exe后生成随机数不变问题的解决方案

Posted slandarer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于MATLAB 打包成exe后生成随机数不变问题的解决方案相关的知识,希望对你有一定的参考价值。

问题描述

事情是这样的,之前写了一个刮奖特效的MATLAB 程序:
传送门:
七夕节还不知道送啥,教你用MATLAB制作一款刮刮乐抽奖特效,让她的手气决定她的礼物
其中有通过随机数来决定显示字符的部分,但是有读者尝试将程序打包后,发现结果是固定的。

出现原因

稍微研究了一下发现了问题所在:
我们在matlab运行程序后,软件会自己更改随机数种子,但是打包成exe文件后,经过了中间变换,脱离软件后程序会使用固定的随机数种子,这就导致每次生成的随机数都是固定的。

解决思路

这样我们很容易就能想到C语言的类似操作,C语言生成随机数时,都要依据时间重新定义随机数种子:

srand(time(NULL));
rand()

于是我们可以在MATLAB中也采用类似操作,
只需要将rand()前加上如下代码:

tempTime=clock();
second=round(tempTime(6)+60*tempTime(5)+24*60*tempTime(4));
rng(second)

就可以在一天中每一秒都设置不同的随机数种子,当然,与时间相关的其他任意整数均可,大家可以稍作改变,将代码更改后再打包便不会出现随机数固定的问题。

原程序更改部分对比(当作示例)

原:

randNum=rand();
numRange=probVal>randNum;
strPos=find(numRange,1);

改:

tempTime=clock();
second=round(tempTime(6)+60*tempTime(5)+24*60*tempTime(4));
rng(second)
randNum=rand();
numRange=probVal>randNum;
strPos=find(numRange,1);

以上是关于关于MATLAB 打包成exe后生成随机数不变问题的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

winform项目打包后生成一个exe安装包

WebPack打包React项目, 减小打包后生成的js文件.

MATLAB如何进行封装打包成独立可执行exe.

Python打包成exe可执行文件

VUE前端项目打包后生成的CHUNK-VENDORS文件过大, 导致加载太慢

Jenkins 2.46 打包apk后生成下载二维码