日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost random library的使用

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost random library的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生成滿足一定分布的隨機數,是統計模擬、系統仿真等應用中最基本的要求。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);


轉載于:https://blog.51cto.com/no001/1347208

總結

以上是生活随笔為你收集整理的boost random library的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。