当前位置:网站首页>Solution au problème de l'Invariance des nombres aléatoires après l'emballage de Matlab en exe

Solution au problème de l'Invariance des nombres aléatoires après l'emballage de Matlab en exe

2021-10-14 08:19:18 Slandarer

Description du problème

Voilà ce qui s'est passé.,J'ai écrit un article sur les effets spéciauxMATLAB Procédure:
Porte de transfert:
Je ne sais toujours pas quoi envoyer,Pour t'apprendre à utiliserMATLABCréer un effet de tirage au sort racleur,Laissez sa main décider de son cadeau
Il y a des Parties où les caractères affichés sont déterminés par des nombres aléatoires,Mais après avoir essayé d'emballer le programme,Les résultats sont fixes.

Raison de l'apparition

Un peu de recherche a révélé le problème:
On est là.matlabAprès l'exécution du programme,Le logiciel change lui - même le nombre aléatoire de graines,Mais emballéexeAprès le document,Après une transition intermédiaire,Après avoir quitté le logiciel, le programme utilise un nombre aléatoire fixe de graines,Il en résulte que chaque fois que le nombre aléatoire généré est fixe.

Solutions

Pour qu'on puisse facilement penserCFonctionnement similaire de la langue,CQuand la langue génère des nombres aléatoires,Pour redéfinir le nombre aléatoire de graines en fonction du temps:

srand(time(NULL));
rand()

Pour qu'on puisseMATLABIl en va de même pour,
Il suffit derand()Ajouter le code suivant avant:

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

Il est possible de définir un nombre aléatoire différent de graines à chaque seconde de la journée ,Bien sûr., Tout autre entier dépendant du temps peut , Tout le monde peut changer un peu , Il n'y a pas de problème de nombre aléatoire fixe lorsque le Code est modifié et emballé à nouveau .

Comparaison des Parties modifiées du programme original ( Comme exemple )

Original:

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

Modifier:

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://chowdera.com/2021/10/20211013205637667U.html

随机推荐