簡體   English   中英

實現馬爾可夫鏈示例 - java

[英]Implementing markov Chain Example - java

有很多用於文本模擬的馬爾可夫鏈示例,但是對於狀態變化(例如基於時間概率的天氣變化),我找不到任何示例。 例如,讓我們說

Sunny --> Sunny = probability is 0.8
Sunny --> Rainy = probability is 0.2

我正在尋找的是一種編寫算法的方法,該算法將顯示當前天氣直到沒有步驟。

例如: f(3) => S,S,R

我想我真正覺得困難的是如何將隨機性放入算法中。

算法根據短語中給定單詞的概率生成一個句子,但我無法將其映射到我的要求中。(我數學不好)

請讓我知道如何擴展算法,例如,如果晴天高濕度的概率為 0.3,則該函數應產生類似

 f(4) -> [S,Low Hu],[S, Low Hu],[R,High Hu] etc..

請讓我知道這種方法是否適合我的要求。 偽代碼就足夠了。

如果您不想自己實現相同的功能,您可以使用庫中同名的mockNeat.probabilities()方法。 或者你可以看看它是如何實現的。

我不確定我是否完全理解你想要什么,但我會試一試。 您需要一個使用轉移矩陣的馬爾可夫生成器。 可以基於訓練序列計算轉移矩陣。 馬爾可夫鏈生成器 (MCG) 是一種預測機器,它使用轉換矩陣來生成與訓練序列相似的序列。 因此,MCG 的輸出模擬了導致轉換矩陣中的值的訓練序列,並且過程本身代表了預測。 此外,MCG 還可用於驗證DPD 算法的正確操作。 一旦 DPD 算法使用訓練序列生成一個轉換矩陣(這里稱為“原始”轉換矩陣),MCG 就可以使用該轉換矩陣來預測類似的序列。 反過來,由 MCG 產生的序列可以被DPD 算法用來產生一個新的轉移矩陣。 如果原始轉移矩陣和預測序列的轉移矩陣包含接近的轉移概率值,則 DPD 算法和 MCG 機器按預期工作。 以下實現采用轉換矩陣並發出序列 s:

 // Paul A. Gagniuc. Markov chains: from theory to implementation and experimentation. // Hoboken, NJ, John Wiley & Sons, USA, 2017, ISBN: 978-1-119-38755-8. // MARKOV CHAINS GENERATOR var P = []; var Jar = []; for(var i=0; i<=4; i++){P[i]=[];} for(var i=1; i<=4; i++){Jar[i]=[];} P[0][0] = "A"; P[0][1] = "T"; P[0][2] = "C"; P[0][3] = "G"; // From A P[1][0] = 0; // to A P[1][1] = 0.75; // to T P[1][2] = 0.25; // to C P[1][3] = 0; // to G //From T P[2][0] = 0.43; // to A P[2][1] = 0.14; // to T P[2][2] = 0.43; // to C P[2][3] = 0; // to G //From C P[3][0] = 0.40; // to A P[3][1] = 0; // to T P[3][2] = 0; // to C P[3][3] = 0.60; // to G //From G P[4][0] = 0.67; // to A P[4][1] = 0.33; // to T P[4][2] = 0; // to C P[4][3] = 0; // to G for(var j=1; j<=4; j++){ Jar[j] = Fill_Jar(j); document.write('From '+P[0][j-1] + ' to ' + Jar[j] + "</br>"); } var draws = 40; var q = ""; var z = ""; var a; a = Draw(1); for (var i=1; i<=draws; i++){ for (var j=0; j<=3; j++){ if (a === P[0][j]){ a = Draw(j + 1); q = q + P[0][j]; j=3; } } } document.write("s = " + q + "</br>"); function Draw(S) { var rc = Math.floor((Math.random() * Jar[S].length)); var b = Jar[S].substr(rc, 1); return b; } function Fill_Jar(S){ var Ltot = 20; var a = 1; var b = ""; for (var i=0; i<=3; i++){ a = Math.round(Ltot * P[S][i]); for (var j=1; j<=a; j++){ b = b + P[0][i]; } } return b; }

項目:

https://github.com/gagniuc/Markov-Chains-VB6

https://github.com/gagniuc/Markov-Chains-The-weather

https://github.com/gagniuc/Discrete-Probability-Detector-JS

直播: https ://gagniuc.github.io/Discrete-Probability-Detector-JS/

參考

保羅·加格紐克。 馬爾可夫鏈:從理論到實現和實驗。 新澤西州霍博肯,美國約翰威利父子公司,2017 年,ISBN:978-1-119-38755-8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM