所以我的程序实际上是一个DPLL SAT求解器,因此在程序内部需要选择随机变量来赋值为TRUE或FALSE。如果我运行我曾经的程序它运行正常!如果再次运行它将选择不同的变量仍然有效(这是我想要的)。
然而,为了产生可靠的实验,我需要重复运行我的程序。这可以通过分别多次运行程序来完成,但这很繁琐并且需要很长时间。我已经学会了如何使用bash如下:
#!/bin/bash
for ((i=50; i>0; i--))
do
./Project 90 10 >> outfile.txt
done
然而,当这样做时,每次运行都以相同的顺序选择相同的“随机”变量,因此产生相同的结果。如何让我的程序每次都以不同的方式运行?
谢谢!
答案 0 :(得分:5)
您需要初始化随机数种子,随机数不是真正随机的,将其添加到您的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)
将返回不同的值。
阅读this了解详情。
注意:由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。