【发布时间】:2015-02-19 00:16:03
【问题描述】:
我正在使用 Armadillo c++ 库,它允许对矩阵和向量进行高性能计算。该库具有用随机数填充其对象的内置函数。我在对象的程序随机生成的上下文中使用它。对象的创建是随机的,但无论我多久重新创建对象,只要种子保持不变,它就会保持不变。
问题是,尽管我可以将种子设置为确定的值,从而在我的机器上重新创建相同的运行......当转到另一台计算机时,我失去了随机性的连贯性。我来自 Matlab 的魔法之地,在那里我可以指定用于生成伪随机数的函数。所以,如果选好功能,这一代可以跨平台。 但是如何为犰狳指定 RNG 函数?
我的研究使我找到了这个源文档,它“详细说明”了随机数生成的过程:
http://arma.sourceforge.net/internal_docs_4300/a01181_source.html http://arma.sourceforge.net/internal_docs_4300/a00087.html
但我不知道在这里做什么:这段代码比我能写的要先进得多。我将不胜感激!
谢谢你们!
备注: - 我不在乎使用的随机函数有多好。我只想要一个快速的跨平台跨架构生成器。无论如何,确定性随机性是我的目标。 - 详细地说,如果重要的话,要考虑的机器应该是英特尔处理器、windows 或 mac、32b 或 64b。 - 我已经阅读了几篇提到使用种子来实现随机性的帖子,但似乎这里的问题是跨平台上下文以及随机生成器被埋在 Armadillo 代码中的事实(至少在我未经训练的眼里)。
【问题讨论】:
-
快速浏览 API,似乎不清楚为什么在不同的机器上使用相同的种子会产生不同的结果。也许这只是一个错误!由于该库是开源的,您可以尝试调试它。
-
std::rand() 的实现会因操作系统(和操作系统版本)而异。