因此,我的程序实际上是DPLL SAT求解器,因此在程序内部需要选择随机变量以将TRUE或FALSE分配给它。如果我运行一次程序,它将正常工作;如果再次运行,它将选择不同的变量,并且仍然有效(这是我想要的)。
但是,为了进行可靠的实验,我需要重复运行程序。可以通过分别多次运行该程序来完成此操作,但这很繁琐并且会花费很长时间。我已经学会了如何使用bash,如下所示:
#!/bin/bash
for ((i=50; i>0; i--))
do
./Project 90 10 >> outfile.txt
done
但是,完成此操作后,每次运行都会以相同的顺序选择相同的“随机”变量,因此会产生相同的结果。如何使我的程序每次都以不同的方式运行?
谢谢!!
您需要初始化随机数种子,随机数不是真正的随机数,请将其添加到您的 main()
#include <time.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
srand(time(NULL)); /* here at the very beginnig of main */
.
.
.
return 0;
}
每次执行程序时,这都会产生不同的种子,因为time(NULL)
它将返回不同的值。
阅读此以获得更多信息。
注意:如Ingo Leonhardt所评论,效果将是相同的,因此请尝试此选项
#include <stdlib.h>
#include <sys/time.h>
int main(int argc, char **argv)
{
struct timeval tv;
gettimeofday(&tv, NULL);
srand(tv.tv_usec); /* here at the very beginnig of main */
.
.
.
return 0;
}
或者,因为每个过程都会有所不同,所以pid
这也可能有效1
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
srand((int)getpid()); /* here at the very beginnig of main */
.
.
.
return 0;
}
1这是POSIX解决方案,如果需要,可以研究不支持POSIX的操作系统的等效功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句