生成满足一定分布的随机数,是统计模拟、系统仿真等应用中最基本的要求。matlab中提供了函数可以生成各种常见分布的随机数,c++使用boost random库也可以很容易实现。

一、例子

boost random库的文档提供了一个例子,模拟掷色子。投掷一个均匀的色子,六个面每个面出现的概率应该是相等的,也就是说,投掷出的点数应该是服从{ 1 2 3 4 5 6 } 上的均匀分布的。

#include <boost/random.hpp>
#include <boost/random.hpp>
#include <iostream>

int main()

{

boost::mt19937gen;                                     
   boost::uniform_int<>dist(1,6);
   boost::variate_generator<boost::mt19937&,boost::uniform_int<>>die(gen,dist);

for( int i=0; i<10; ++i) {
       std::cout<<die() <<std::endl;
   }
}

上面的例子虽然简单,但也可以看出要生成满足一定分布的伪随机数的一般步骤:

首先,我们需要一个伪随机数发生器(generator)。语句

boost::mt19937 gen;

声明了一个mt19937类型的伪随机数发生器gen。boost一共提供了17种类型伪随机发生器供使用者选择,它们是:

minstd_rand,  rand48, lrand48, ecuyer1988, kreutzer1986, hellekalek1995, mt11213b, mt19937, lagged_fibonacci 607, lagged_fibonacci1279, lagged_fibonacci2281, lagged_fibonacci3217, lagged_fibonacci4423, lagged_fibonacci9689, lagged_fibonacci19937, lagged_fibonacci23209, lagged_fibonacci44497。

总之,名字是一个比一个丑啊。到底选用何种发生器,需要使用者在性能、质量和内存之间进行权衡,一般的应用的话,boost文档推荐使用mt19937就够了。也可以选择多种发生器,使结果相互印证,从而更可信。

其次,需要一个分布函数。由伪随机数发生器生成的伪随机数一般是一个很大区间上的均匀分布(如[1,2^99999999])。而要产生我们想要的分布的随机数(本例中,我们想要的分布为 {1 2 3 4 5 6 }上的均匀分布),还要对它们做某些变换。

boost::uniform_int<> dist(1, 6);

就是干这个事的。

boost random提供了如下的分布函数:

uniform_smallint ------ 一个整数集上的离散均匀分布

uniform_int ------ 一个整数集上的离散均匀分布

uniform_01 ------ [0, 1)上的连续均匀分布

uniform_real ------ [ min, max)上的连续均匀分布

bernoulli_distribution ------ 伯努利分布

geometric_distribution ------ 几何分布

triangle_distribution ------ 三角分布

exponential_distribution ------ 指数分布

normal_distribution ------ 正态分布

lognormal_distribution ------ 对数正态分布

uniform_on_sphere ------ 球面上的均匀分布

最后,把以上两个结合生成我们想要的随机数发生器:

boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(gen, dist);

boost random library的使用的更多相关文章

  1. 【转】使用Boost Graph library(一)

    转自:http://shanzhizi.blog.51cto.com/5066308/942970 本文是一篇译文,来自:http://blog.csdn.net/jjqtony/article/de ...

  2. Boost Graph Library使用学习

    Boost Graph Library,BGL 使用学习 探索 Boost Graph Library https://www.ibm.com/developerworks/cn/aix/librar ...

  3. Boost随机库的简单使用:Boost.Random(STL通用)

    文章目录 文章目录 文章内容介绍 Boost随机库的简单使用 生成一个随机的整数 生成一个区间的平均概率随机数 按概率生成一个区间的随机整数 一些经典的分布 与STL的对比 Ref 文章内容介绍 Bo ...

  4. Boost Graph Library materials

    Needed to compute max flow in a project and found the official document of BGL to be rather obscure, ...

  5. 【转】使用Boost Graph library(二)

    原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...

  6. Boost 1.61.0 Library Documentation

    http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...

  7. (五)boost库之随机数random

    (五)boost库之随机数random boost库为我们提供了许多的日常随机数生成器: 1.uniform_smallint:在小整数域内的均匀分布 2.uniform_int:在整数域上的均匀分布 ...

  8. Visulalize Boost Voronoi in OpenSceneGraph

    Visulalize Boost Voronoi in OpenSceneGraph eryar@163.com Abstract. One of the important features of ...

  9. Win7下Boost库的安装

    Boost库是C++领域公认的经过千锤百炼的知名C++类库,涉及编程中的方方面面,简单记录一下使用时的安装过程 1.boost库的下载 boost库官网主页:www.boost.org 2.安装 将下 ...

随机推荐

  1. CentOS源码安装 Tomcat/8.0.24

    依个人的习惯,喜欢将源码安装在/usr/local这个目录下面: 第一步:下载源码 wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.2 ...

  2. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理

    把stus注释掉 正常访问就会报错 第20行 这里的stus为空,所以造成了这个错误. 非空判断 不为空用双问号来判断 <#if stus??><#list stus as stu& ...

  3. [Scikit-learn] 1.9 Naive Bayes

    Ref: http://scikit-learn.org/stable/modules/naive_bayes.html 1.9.1. Gaussian Naive Bayes 原理可参考:统计学习笔 ...

  4. matllab 按照文件夹处理文件

    folders=dir('文件夹地址'); folders={folders.name}; folders=setdiff(folders,{'.','..'})'; num=length(folde ...

  5. 使用sproto buff 的陷阱

    当sproto协议包中的数组元素,长度为0时,会出现接收异常.在没有调试断点的情况下,会停止接收其它协议.

  6. windows7-tomcat配置

    1.下载 2.解压缩 3.配置环境变量 (1)计算机属性--高级系统配置--高级--环境变量--系统变量--新建 (2)CATALINA_HOME 如:C:\apache-tomcat-7.0.73 ...

  7. 【POJ - 1742】Coins (多重背包)

    Coins 直接翻译了 Descriptions 给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数.  Input 多组数据,每组数据前两个数字为n,m.n表示硬币种类数,m为最大面额,之后前 ...

  8. node.js 安装配置笔记

    先设置 NODEJS_MODULES 系统环境变量,我在这里设置为:D:\Program Files\nodejs\node_modules, 然后修改 npm.cmd 文件中 SET "N ...

  9. 《剑指offer》Q01-12 (牛客10.11)

    目录 T1 二维部分有序数组查找 ☆ T2 字符串字符不等长替换 - 从后往前 T3 返回链表的反序 vector T4 重建二叉树 T5 两个栈模拟队列 T6 旋转数组中的最小元素 - 二分或暴力 ...

  10. HOG算法总结

    1.HOG特征提取所针对的图像的尺寸是固定的.输入的图像应首先resize到这个尺寸. 2.尺寸的划分3个等级:window,block,cell window即输入的需要提取特征的图片大小.然后将w ...