gpt4 book ai didi

C++ 随机数生成器 : How to make numbers random upon every execution

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:28 27 4
gpt4 key购买 nike

我不认为这是重复的,因为我已经尝试过其他 SO 答案,但它们对我不起作用。当我运行一个程序(随时间播种)时,我得到了一堆随机数。然后几秒钟后我再次运行该程序并获得了一组类似的随机数。

srand(time(0));
for(int i=0; i<10; i++) {
cout<<rand()<<"\n";
}

86035531462625114799167992823031436029504

863919984304428803299552722529699882213897411

如您所见,数字不同,但非常相似。这对我不起作用的原因是因为我将它转换为 0 和 1 之间的 float (除以 RAND_MAX)。当我这样做时,以秒为单位的时间流逝得非常慢。在一次运行中我可以得到 0.09245... 并且接下来我可以得到 0.0925... 。我正在使用这些概率来制作一个 21 点 AI,我不希望相同的投注模式出现在后续的执行中。

我看了很多遍,并试图将种子放入循环中,但只打印了 10 次相同的数字。不确定如何使数字在执行时完全随机出现。谢谢你的想法

编辑:

使用

    srand(rd());    
for(int i=0; i<10; i++) {
cout<<generate()<<"\n";
}

145142847862781170304620546740167642908131095702815178977201746293864714​​84343223554882785677395967469126240319926998463599546848164252941897054265919987896041709892525165566358044926049913402

认为我每次运行它时都会得到完全相同的序列。

编辑 2:

一些背景知识可以消除困惑。我希望分布均匀,但如果不是这样也没关系,这只是我自己的做法,没有赌场业务。我最初的计划是让 6 个字符的命中/停留概率数组的值为 12-20。所以就像 Jim 会 [0.958367, 0.942123, 0.876655, 0.864322, 0.7543321, 0.653213, 0.201201, 0.12919, 0.00001] 来编造这些数字。假设吉姆的手牌是 14。所以我随机得到一个 0-1 的数字,如果它小于 0.876655,那么他就会中牌。 100 轮后的获胜者将混合他们的“基因”,也许 1000 轮后,将自然选择完美的 child ,并形成完美的命中/通过率。这就是为什么我注意到 Pam 或其他人总是会击中:他们的随机基因总是落在 0.05 左右,所以无论她的手牌好坏,她都会击中。我差不多完成了,唯一要做的就是修复这个随机生成器和另一个处理投注资金的小错误(我保证不相关)

最佳答案

如果可能,请使用 std::random_device 获取种子,并使用 std::mt19937_64 生成数字。 std::random_device 旨在(但不幸的是,不能保证)使用硬件生成真正的随机数,因此至少在一个好的实现中,它确实是非常随机的(但带宽相当低)。

C++11 呈现的 randsrand 几乎已经过时了。

下面是一个相当不错的演示程序:

#include <random>
#include <iostream>

int main() {

std::mt19937_64 gen{ std::random_device()() };
std::uniform_real_distribution<double> dis{ 0.0, 1.0 };

for (int i=0; i<10; i++)
std::cout << dis(gen) << "\n";
}

至少在合理合理地实现库的情况下,这应该会产生相当可靠的结果。

关于C++ 随机数生成器 : How to make numbers random upon every execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com