HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    偽隨機(jī)算法有哪些

    發(fā)布時(shí)間:2023-04-08 09:14:56     稿源: 創(chuàng)意嶺    閱讀: 64        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于偽隨機(jī)算法有哪些的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫(xiě)出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    偽隨機(jī)算法有哪些

    一、『偽隨機(jī)』偽隨機(jī)的概念

    計(jì)算機(jī)里的確的確沒(méi)有“真隨機(jī)”,因?yàn)橛?jì)算機(jī)是由0和1組成,不存在不確定的因素。但是程序經(jīng)常會(huì)用到隨機(jī)的功能,因此出現(xiàn)了“偽隨機(jī)”,這是相對(duì)“真隨機(jī)”的一個(gè)概念。

    “真隨機(jī)”就是我們現(xiàn)實(shí)世界中的隨機(jī),每次發(fā)生都是獨(dú)立事件,概率不會(huì)相互影響。

    比如一件事發(fā)生的概率是20%,不管是否發(fā)生,那么下次再發(fā)生的概率依然是20%。

    隨機(jī)數(shù)生成器 是一個(gè)函數(shù)y=f(x),而 隨機(jī)種子 則是變量x。所以一旦x和f(x)確定了,那么產(chǎn)生的隨機(jī)數(shù)y也就確定。

    “偽隨機(jī)”正是通過(guò),在 隨機(jī)數(shù)生成器 中傳入的 隨機(jī)種子 得到結(jié)果產(chǎn)生隨機(jī)數(shù)。之所以為“偽隨機(jī)”,是因?yàn)槟軌虺霈F(xiàn)的結(jié)果以及次序其實(shí)已經(jīng)在 隨機(jī)數(shù)生成器 這個(gè)函數(shù)中確定了,如果f(x)一定,而程序通過(guò)輸入x的變化,而產(chǎn)生不同結(jié)果,達(dá)到隨機(jī)的效果。 “偽”指的是有規(guī)律,而不是“假”。

    比如3次輸入的x值相同,那么得到的3次結(jié)果也將相同。但是如果將當(dāng)前時(shí)間節(jié)點(diǎn)(時(shí)鐘)當(dāng)做輸入x,x則必然不同,則達(dá)到了隨機(jī)的效果。

    在游戲中,經(jīng)常有"暴擊率"的游戲設(shè)定,但是出現(xiàn)連續(xù)暴擊而改變戰(zhàn)局對(duì)于電子競(jìng)技游戲來(lái)說(shuō)并不是好事,因此經(jīng)典游戲war3,dota就對(duì)暴擊率進(jìn)行了干涉,首先設(shè)定一個(gè)暴擊率初始值x%,之后進(jìn)行正常判定,如果未發(fā)生暴擊,則通過(guò)算法,提高x%的值。那么下次暴擊率就會(huì)提高。如此循環(huán),直到出現(xiàn)暴擊,然后重置暴擊率為初始x%。

    雖然過(guò)程并不獨(dú)立,但平均總體算下來(lái),是符合該角色暴擊率的。

    在游戲中,經(jīng)常有抽卡玩法,比如YYS,F(xiàn)GO,王者榮耀等。

    假如SSR出率為1%,那么1個(gè)玩家抽100次沒(méi)有SSR的概率是99%,那么100個(gè)玩家各抽100次,0.99^100=0.366,將近37%的人沒(méi)有SSR。這就非常影響游戲體驗(yàn)了,超過(guò)1/3的玩家都沒(méi)有獲得強(qiáng)力卡牌。這會(huì)導(dǎo)致這部分玩家一氣之下卸載游戲甚至在網(wǎng)絡(luò)上攻擊游戲,對(duì)游戲廠商非常不利。為了避免這種情況,很多游戲推出了保底機(jī)制,比如當(dāng)你前99次都沒(méi)有抽到某爆率1%角色時(shí),第100次必定會(huì)出,這就是保底機(jī)制。

    現(xiàn)在的音樂(lè)播放器都有“隨機(jī)播放”功能,這個(gè)功能的實(shí)現(xiàn)并不是在你的歌單中隨機(jī)抽取歌曲播放,而是將你歌單中的歌曲重新打亂排序生成一個(gè)新歌單(用戶看不到),再順序播放這個(gè)生成的歌單。

    所以即使你使用隨機(jī)播放,當(dāng)你從固定的歌曲選擇“上一首”時(shí),每次都是同一首歌。

    二、聽(tīng)說(shuō)計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù)是偽隨機(jī)數(shù),公式有誰(shuí)知道。

    用S作隨機(jī)模擬計(jì)算

    作為統(tǒng)計(jì)工作者,我們除了可以用S迅速實(shí)現(xiàn)新的統(tǒng)計(jì)方法,還可以用S進(jìn)行隨機(jī)模擬。隨機(jī)模擬可以驗(yàn)證我們的算法、比較不同算法的的優(yōu)缺點(diǎn)、發(fā)現(xiàn)改進(jìn)統(tǒng)計(jì)方法的方向,是進(jìn)行統(tǒng)計(jì)研究的最有力的計(jì)算工具之一。

    隨機(jī)模擬最基本的需要是產(chǎn)生偽隨機(jī)數(shù),S中已提供了大多數(shù)常用分布的偽隨機(jī)數(shù)函數(shù),可以返回一個(gè)偽隨機(jī)數(shù)序列向量。這些偽隨機(jī)數(shù)函數(shù)以字母r開(kāi)頭,比如rnorm()是正態(tài)偽隨機(jī)數(shù)函數(shù),runif()是均勻分布偽隨機(jī)數(shù)函數(shù),其第一個(gè)自變量是偽隨機(jī)數(shù)序列長(zhǎng)度n。關(guān)于這些函數(shù)可以參見(jiàn)第14節(jié)以及系統(tǒng)幫助文件。下例產(chǎn)生1000個(gè)標(biāo)準(zhǔn)正態(tài)偽隨機(jī)數(shù):

    >

    y

    <-

    rnorm(1000)

    這些偽隨機(jī)數(shù)函數(shù)也可以指定與分布有關(guān)的參數(shù),比如下例產(chǎn)生1000個(gè)均值為150、標(biāo)準(zhǔn)差為100的正態(tài)偽隨機(jī)數(shù):

    >

    y

    <-

    rnorm(1000,

    mean=150,

    sd=100)

    產(chǎn)生偽隨機(jī)數(shù)序列是不重復(fù)的,實(shí)際上,S在產(chǎn)生偽隨機(jī)數(shù)時(shí)從一個(gè)種子出發(fā),不斷迭代更新種子,所以產(chǎn)生若干隨機(jī)數(shù)后內(nèi)部的隨機(jī)數(shù)種子就已經(jīng)改變了。有時(shí)我們需要模擬結(jié)果是可重復(fù)的,這只要我們保存當(dāng)前的隨機(jī)數(shù)種子,然后在每次產(chǎn)生偽隨機(jī)數(shù)序列之前把隨機(jī)數(shù)種子置為保存值即可:

    >

    the.seed

    <-

    .Random.seed

    >

    ……………

    >

    .Random.seed

    <-

    the.seed

    >

    y

    <-

    rnorm(1000)

    作為例子,我們來(lái)產(chǎn)生服從一個(gè)簡(jiǎn)單的線性回歸的數(shù)據(jù)。

    #

    簡(jiǎn)單線性回歸的模擬

    lm.simu

    <-

    function(n){

    #

    先生成自變量。假設(shè)自變量x的取值范圍在150到180之間,大致服從正態(tài)分布。

    x

    <-

    rnorm(n,

    mean=165,

    sd=7.5)

    #

    再生成模型誤差。假設(shè)服從N(0,

    1.2)分布

    eps

    <-

    rnorm(n,

    0,

    1.2)

    #

    用模型生成因變量

    y

    <-

    0.8

    *

    x

    +

    eps

    return(data.frame(y,x))

    }

    S沒(méi)有提供多元隨機(jī)變量的模擬程序,這里給出一個(gè)進(jìn)行三元正態(tài)隨機(jī)變量模擬的例子。假設(shè)要三元正態(tài)隨機(jī)向量

    n個(gè)獨(dú)立觀測(cè),可以先產(chǎn)生n個(gè)服從三元標(biāo)準(zhǔn)正態(tài)分布的觀測(cè),放在一個(gè)

    n行3列的矩陣中:

    U

    <-

    matrix(rnorm(3*n),

    ncol=3,

    byrow=T)

    可以認(rèn)為矩陣U的每一行是一個(gè)標(biāo)準(zhǔn)的三元正態(tài)分布的觀測(cè)。設(shè)矩陣

    的Choleski分解為

    A為上三角矩陣,若隨機(jī)向量

    ,則

    。因此,

    作為一個(gè)三行

    n列的矩陣每一行都是服從

    分布的,且各行之間獨(dú)立。經(jīng)過(guò)轉(zhuǎn)置,產(chǎn)生的

    X

    X

    <-

    matrix(rep(mu,n),

    ncol=3,

    byrow=T)

    +

    U

    %*%

    A

    是一個(gè)

    n行三列的矩陣。

    有時(shí)模擬需要的計(jì)算量很大,多的時(shí)候甚至要計(jì)算幾天的時(shí)間。對(duì)于這種問(wèn)題我們要善于把問(wèn)題拆分成可以單獨(dú)計(jì)算的小問(wèn)題,然后單獨(dú)計(jì)算每個(gè)小問(wèn)題,把結(jié)果保存在S對(duì)象中或文本文件中,最后綜合保存的結(jié)果得到最終結(jié)果。

    如果某一個(gè)問(wèn)題需要的計(jì)算時(shí)間比較長(zhǎng),我們?cè)诰幊虝r(shí)可以采用以下的技巧:每隔一定時(shí)間就顯示一下任務(wù)的進(jìn)度,以免計(jì)算已經(jīng)出錯(cuò)或進(jìn)入死循環(huán)還不知道;應(yīng)該把中間結(jié)果每隔一段時(shí)間就記錄到一個(gè)文本文件中(cat()函數(shù)可以帶一個(gè)file參數(shù)和append參數(shù),對(duì)這種記錄方法提供了支持),如果需要中斷程序,中間結(jié)果可能是有用的,有些情況下還可以根據(jù)記錄的中間結(jié)果從程序中斷的地方繼續(xù)執(zhí)行。

    參考文獻(xiàn):

    http://www.math.pku.edu.cn/teachers/lidf/docs/statsoft/html/s/13.html

    三、C++ 中的偽隨機(jī)數(shù),例如rand(),是怎么生成的?

    #include<math.h>

    #define RAND_MAX 32767

    unsigned int g_nSeed;//隨機(jī)數(shù)種子

    void srand(unsigned int seed)//初始化隨機(jī)數(shù)種子

    {

    g_nSeed = seed;

    }

    int rand()

    {

    int a, c;

    a = sqrt(RAND_MAX) + 1;

    c = sqrt(3)*RAND_MAX;

    g_nSeed = (g_nSeed*a+c)%RAND_MAX;//一種求隨機(jī)數(shù)種子的算法,具體算法不一定是這樣,可以有很多種,但大概原理就是這樣

    return g_nSeed;

    }

    四、偽隨機(jī)和真隨機(jī)區(qū)別

    計(jì)算機(jī)不會(huì)產(chǎn)生絕對(duì)隨機(jī)的隨機(jī)數(shù),計(jì)算機(jī)只能產(chǎn)生“偽隨機(jī)數(shù)”。其實(shí)絕對(duì)隨機(jī)的隨機(jī)數(shù)只是一種理想的隨機(jī)數(shù),即使計(jì)算機(jī)怎樣發(fā)展,它也不會(huì)產(chǎn)生一串絕對(duì)隨機(jī)的隨機(jī)數(shù)。計(jì)算機(jī)只能生成相對(duì)的隨機(jī)數(shù),即偽隨機(jī)數(shù)。

    隨機(jī)數(shù)三個(gè)特性

    1、隨機(jī)性:完全亂序;

    2、不可推測(cè)性:從已有的數(shù),無(wú)法推測(cè)出下一個(gè)數(shù);

    3、不可重復(fù)性:隨機(jī)數(shù)之間不重復(fù)。

    真隨機(jī)數(shù)是伴隨著物理實(shí)驗(yàn)的,比如:拋硬幣、擲骰子、電子元件的噪音、核裂變等,它的結(jié)果符合三大特性的。

    偽隨機(jī)數(shù)

    偽隨機(jī)數(shù)是通過(guò)一定算法,獲得一個(gè)隨機(jī)的值,并不是真的隨機(jī)。偽隨機(jī)又分為強(qiáng)偽隨機(jī)數(shù)和弱偽隨機(jī)數(shù)。強(qiáng)偽隨機(jī)數(shù):更加貼近真隨機(jī)數(shù),滿足特性的。隨機(jī)性和不可推測(cè)性,難以預(yù)測(cè)。弱偽隨機(jī)數(shù):滿足隨機(jī)性,可以預(yù)測(cè)。

    以上就是關(guān)于偽隨機(jī)算法有哪些相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    偽隨機(jī)算法有哪些

    中國(guó)最長(zhǎng)漂流排行榜(中國(guó)最長(zhǎng)的漂流多長(zhǎng)時(shí)間)

    產(chǎn)品設(shè)計(jì)的四個(gè)階段(產(chǎn)品設(shè)計(jì)的四個(gè)階段分別是)