如何为遗传算法生成随机数?
How should I generate random numbers for a genetic algorithm?
我正在写一个遗传算法来解决Master Mind游戏。我做了很多关于最佳方法的研究,拥有多样化的人口是非常重要的。我试图确定如何在c++中获得真正好的随机数。我在程序开始时使用srand(time(NULL))
来设置种子,然后我简单地使用rand()
。我想知道的是这到底有多随机?它很好吗?有没有其他更好的随机数库?
我知道数论和随机性是一门非常复杂的学科;在编写自己的rand()
版本时,您有什么建议?
对于加密,您需要非常强的随机数属性。很多文献都集中在这类需求上。一个典型的解决方案是使用环境噪声(硬盘延迟、网络数据包、鼠标移动、RDRAND、HAVEGE等)播种SHA-256的迭代应用程序。
对于蒙特卡罗模拟或人工智能应用,随机性要求确实要低得多。事实上,非常简单的生成器就足够了。最基本的是臭名昭著的线性同余生成器,它现在被认为有点过时,因为输出模式有时会产生明显的和不必要的采样效果(特别是,在70年代和80年代进行的一些实验研究很可能因此而有缺陷)。如今,Mersenne Twister更受欢迎了,对于电脑游戏来说已经足够了。它在c++标准库中可用:参见std::mt19937。
rand()
的随机性真的很差。这是一种标准的LCG,通常具有较差的随机性和较差的投影质量。如果你对应用程序的随机性质量很认真,你需要使用更好的东西。然后,这取决于您是否想要保持标准库。
如果你想使用标准库,使用<random>
header和Mersenne Twister。
但是,我建议您使用PCG随机族代替。它速度快,质量好,修复了<random>
的大部分错误。
相关文章:
- C++向量初始化遗传算法的代理向量
- 编程作业:机器人遗传算法
- 在遗传算法中永远不会达到100%
- 多线程galib247遗传算法陷入局部极大值
- 遗传算法中的单点交叉
- 如何利用遗传算法求C中数的平方根来实现选择和交叉
- 遗传算法的选择机制
- 在遗传算法中使用二进制编码是必要的吗
- 遗传算法和神经网络:临时地址[-fallowive]
- 访问基于遗传算法的PNRG中的数组? " no match for operator[] "
- 在遗传算法中,对于非排序群体,应该如何组织轮盘选择
- 为什么我的遗传算法不收敛
- 为遗传算法分配和检索逐位内存值
- boost c++正在使用Mersenne Twister算法生成0到1之间的相同随机数
- 神经网络与遗传算法问题
- C/ c++算法在不同平台上从相同的种子产生相同的伪随机数序列
- 种群变得陈旧——遗传算法
- 如何为遗传算法生成随机数?
- 用C(++)语言将double转换为遗传算法的位数组
- C++中的开源随机数生成算法