可以在运行时选择不同的Boost伪随机数生成器
Possible to select between different Boost pseudo-random number generators at run-time?
我正在使用Boost Random库为蒙特卡罗模拟生成随机数。为了检查我的结果,我希望能够在不同的运行中使用不同的RNG引擎。理想情况下,我想使用命令行选项来确定在运行时使用哪个RNG,而不是在编译时通过类型定义选择RNG。
是否存在一个基类T,使得下面的事情成为可能?或者,如果没有,有一个明显的原因吗?
#include <boost/random.hpp>
int main()
{
unsigned char rng_choice = 0;
T* rng_ptr; // base_class pointer can point to any RNG from boost::random
switch(rng_choice)
{
case 0:
rng_ptr = new boost::random::mt19937;
break;
case 1:
rng_ptr = new boost::random::lagged_fibonacci607;
break;
}
boost::random::uniform_int_distribution<> dice_roll(1,6);
// Generate a variate from dice_roll using the engine defined by rng_ptr:
dice_roll(*rng_ptr);
delete rng_ptr;
return 0;
}
直接使用Boost。类型擦除的函数。
编辑:一个简单的例子。
#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/random/uniform_int_distribution.hpp>
#include <boost/random/mersenne_twister.hpp>
int main() {
boost::random::mt19937 gen;
boost::random::uniform_int_distribution<> dist(1, 6);
boost::function<int()> f;
f=boost::bind(dist,gen);
std::cout << f() << std::endl;
return 0;
}
例如,查看mersenne twister的源代码,似乎没有基类。看来你必须实现你需要的类层次结构。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- 使用Boost分隔接口和随机数生成器类的实现
- 将boost用于长二重的(伪)随机数生成器
- 可以在运行时选择不同的Boost伪随机数生成器
- 二维数组和boost随机数生成器
- c++ -11中使用boost封装的随机数生成器