關於MATLAB 打包成exe後生成隨機數不變問題的解决方案

slandarer 2021-08-15 19:00:26 阅读数:668

本文一共[544]字,预计阅读时长:1分钟~
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);
版权声明:本文为[slandarer]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815190011547l.html