就生成随机数而言,种子是啥? [复制]

Posted

技术标签:

【中文标题】就生成随机数而言,种子是啥? [复制]【英文标题】:What is a seed in terms of generating a random number? [duplicate]就生成随机数而言,种子是什么? [复制] 【发布时间】:2013-02-01 14:27:22 【问题描述】:

在生成随机数方面什么是种子?

我需要生成数百到数千个随机数,我已经阅读了很多关于使用“种子”的信息。什么是种子?是随机数开始的种子吗?例如,如果我将种子设置为 5,它会生成从 5 到我的限制的数字吗?所以它永远不会给我 3 例如。

我使用的是 C++,所以如果你提供任何示例,如果它是用 C++ 编写的就更好了。

谢谢!

【问题讨论】:

【参考方案1】:

现实中通常所说的随机数序列是“伪随机”数序列,因为这些值是使用确定性算法计算得出的,而概率没有实际作用。

“种子”是序列的起点,保证如果您从同一个种子开始,您将获得相同的数字序列。这对于例如调试非常有用(当您在程序中寻找错误时,您需要能够重现问题并研究它,非确定性程序将更难调试,因为每次运行都会不同) .

如果您只需要一个随机数字序列并且不需要复制它,那么只需使用当前时间作为种子...例如:

srand(time(NULL));

【讨论】:

嗯,是的,srand 播种 rand()。但是 TR1(好吧,不是那么新)和 C++11 中丰富的新随机数生成器都有自己的播种机制,srand 不涉及。 @PeteBecker:我的疯狂猜测是,对于 OP 的需求,srand/rand 绰绰有余。 是的,可能。尽管如此,播种不仅仅是srand<g> @6502:为什么将 null 作为参数传递给 time() 函数?我可以传递除 NULL 以外的任何内容吗? @PravasiMeet: time 由于历史原因可以追溯到标准前 C 接受一个指针来存储函数返回的 time_t 值。通常现代代码在调用 time 时不需要传递任何东西,除了 NULL【参考方案2】:

那么,让我们这样说吧:

如果您和您的朋友将种子设置为相同的数字,那么您和您的朋友将获得相同的随机数。所以,如果我们都写这个简单的程序:

#include<iostream>
using namespace std;
void main () 
    srand(0);
    for (int i=0; i<3; i++)
        int x = rand()%11;          //range between 0 and 10
        cout<<x<<endl;
    

我们都会得到相同的随机数,即 (5, 8, 8)。

如果你想每次得到不同的数字,你可以使用 srand(time())

【讨论】:

以上是关于就生成随机数而言,种子是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C# Random 生成不重复随机数

C# Random 生成不重复随机数

关于随机种子random.seed()测试 pytorch完全设置随机种子

Python深度学习之路产生随机数

Python深度学习之路产生随机数

Python深度学习之路产生随机数