繁体   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