C#实现马尔科夫模型例子
已知条件:三个缸N状态,每个缸中不同颜色球的个数M状态值,时间轴T,观察值序列O
参数:状态值序列,转移概率序列
求:概率

后台代码如下
const int N = , M = ;//N状态,M状态值 (0橙色,1绿色,2蓝色,3黄色)
public int[] O = { , , , , , , , };//观察值序列
public double[,] A = new double[N, N];//初始一个三行三列的二维数组(状态转移概率)
public double[,] B = new double[N, M];//初始一个三行四列的二维数组(观察值的概率矩阵)
public double[] PI = { 1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0 };//初始化概率
#region 获取观察值概率
/// <summary>
/// 获取观察值概率
/// </summary>
public void GetB()
{
//第一缸球的颜色
double[] one = { , , , };
//第二缸球的颜色
double[] two = { , , , };
//第一缸球的颜色
double[] three = { , , , };
//每个缸中球的总数量
int[] count = { , , };
for (int i = ; i < ; i++)
{
B[, i] = one[i] / count[];
B[, i] = two[i] / count[];
B[, i] = three[i] / count[];
}
}
#endregion #region 获取概率P值 zhy
/// <summary>
/// 获取概率P值
/// </summary>
/// <param name="Q">状态值序列(0第一个缸,1第二个缸,2第三个缸)</param>
/// <param name="A">转移概率</param>
/// <returns></returns>
public double GetP(string Q, string A)
{
GetA(A);
GetB();
int[] q = GetQ(Q);
//时间轴
int T = ;
//初始概率Q[0]:第一缸, O[0]:第一个球
double p = PI[q[]] * B[q[], O[]];
for (int i = ; i < T; i++)
{
//this.A:q[i-1]取上一个刚,q[i]取当前缸,然后获得转移概率
//B:q[i]取当前缸,O[i]取缸中哪个颜色的球
p *= this.A[q[i - ], q[i]] * B[q[i], O[i]];
}
return p;
}
#endregion #region 获取状态值序列 zhy
/// <summary>
/// 获取状态值序列
/// </summary>
/// <param name="Q">状态值字符串</param>
/// <returns>状态值数组</returns>
public int[] GetQ(string Q)
{
int[] q = null;
if (Q.TrimEnd(',').IndexOf(',') > )
{
//获得状态序列
string[] zhuangtai = Q.TrimEnd(',').Split(',');
q = new int[zhuangtai.Length];
for (int i = ; i < zhuangtai.Length; i++)
{
q[i] = Convert.ToInt32(zhuangtai[i]);
}
}
else
{
q = new int[];
q[] = Convert.ToInt32(Q);
}
return q;
}
#endregion #region 获取转移概率序列 zhy
/// <summary>
/// 获取转移概率序列
/// </summary>
/// <param name="A">转移概率字符串</param>
public void GetA(string A)
{
if (A.TrimEnd(',').IndexOf(',') > )
{
string[] gailv = A.TrimEnd(',').Split(',');
//获取A的转移概率的二维数组
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
this.A[i, j] = Convert.ToDouble(gailv[ * i + j]);
}
}
}
}
#endregion
html如下:
<span>请输入状态值序列 : </span><input type="text" id="zhuangtaizhi" value="0,2,1,1,2,0,0,1" /><span> 多个值请使用","隔开(0第一缸,1第二缸,2第三缸)</span><br /><br />
<span> a11-a13 :</span>
<input type="text" id="a11_a13" value="0.25,0.45,0.2" /><span> 请输入第一缸的转移概率以","隔开,三值相加等于1</span><br /><br />
<span> a21-a23 :</span>
<input type="text" id="a21_a23" value="0.1,0.85,0.15" /><span> 请输入第二缸的转移概率以","隔开,三值相加等于1</span><br /><br />
<span> a31-a33 :</span>
<input type="text" id="a31_a33" value="0.14,0.55,0.31" /><span> 请输入第三缸的转移概率以","隔开,三值相加等于1</span><br /><br />
<input type="button" value="计算" onclick="count()" />
<div style="display:none;" id="jieguo">
<span>概率为:</span><span id="gailv"></span>
</div>
js如下
function count() {
var zhuangtaizhi = $.trim($("#zhuangtaizhi").val());
var a11_a13 = $.trim($("#a11_a13").val());
var a21_a23 = $.trim($("#a21_a23").val());
var a31_a33 = $.trim($("#a31_a33").val());
if (zhuangtaizhi == "") {
alert("请输入状态值序列");
return;
}
if (a11_a13 == "") {
alert("请输入a11-a13的转移概率");
return;
}
if (a21_a23 == "") {
alert("请输入a21-a23的转移概率");
return;
}
if (a21_a23 == "") {
alert("请输入a21-a23的转移概率");
return;
}
var zhuanyigailv = a11_a13 + "," + a21_a23 + "," + a31_a33;
$.post("/YinMa/GetP", { Q: zhuangtaizhi, A: zhuanyigailv }, function (msg) {
$("#gailv").html(msg);
$("#jieguo").show();
});
}
纯本人手写,转载请注明出处
C#实现马尔科夫模型例子的更多相关文章
- 基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
文章目录 1. 1. 摘要 2. 2. Map-Matching(MM)问题 3. 3. 隐马尔科夫模型(HMM) 3.1. 3.1. HMM简述 3.2. 3.2. 基于HMM的Map-Matchi ...
- 隐马尔科夫模型HMM学习最佳范例
谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...
- HMM隐马尔科夫模型
这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...
- 隐马尔科夫模型(HMM)的概念
定义隐马尔科夫模型可以用一个三元组(π,A,B)来定义:π 表示初始状态概率的向量A =(aij)(隐藏状态的)转移矩阵 P(Xit|Xj(t-1)) t-1时刻是j而t时刻是i的概率B =(bij) ...
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
上篇介绍了隐马尔科夫模型 本文给出关于问题3解决方法,并给出一个例子的python代码 回顾上文,问题3是什么, 下面给出,维比特算法(biterbi) algorithm 下面通过一个具体例子,来说 ...
- 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- 隐马尔科夫模型HMM(一)HMM模型
隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- 用hmmlearn学习隐马尔科夫模型HMM
在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...
随机推荐
- http请求和响应头部
说一说常见的请求头和响应头都有什么呢? 1)请求(客户端->服务端[request]) GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1 ...
- HDU_6016_(Bestcoder round #92 1002)_(dfs)(暴力)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6016 题意:给定男羊和女羊的朋友关系,即给定一个图,问从任意一只羊开始连续数四只不相同的羊的方法数. ...
- jquery选择器,筛选器,属性,事件 基础
左边栏实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 梦想iOS版CAD控件2018.11.07更新
下载地址: http://www.mxdraw.com/ndetail_10110.html 1. 增加iOS上的CAD绘图接口和使用例子 2. 增加动态交互使用例子 3. 把Android上改 ...
- 禁止foreach循环使用remove/add----快速失败
阿里巴巴开发手册中有一条: 7[强制]不要在 foreach 循环里进行元素的 remove / add 操作. remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterato ...
- 00JavaScript
JavaScript JavaScript是由网景公司开发的一种跨平台面向对象(object-oriented)的网页脚本语言(Web Script Language)是目前流行的网页特效设计语言Ja ...
- JavaScript day1(注释)
JavaScript中的注释方式有两种: 单行注释,使用 //. // This is an in-line comment. 多行注释,以/*开始,用*/来结束. /* This is a mult ...
- jQuey中的return false作用是什么?
jQuey中的return false作用是什么?在众多的语句中都有return false的使用,当然对于熟悉它的开发者来说,当然是知根知底,知道此语句的作用,当然也就知道在什么时候使用此语句,不过 ...
- (C/C++学习)20.基于C++改进的单目标遗传算法
说明:在学习生活中,经常会遇到各种各样的最优问题,其中最常见的就是求某个多维(多个自变量)函数在各个自变量各取何值时的最大值或最小值:例如求函数 f(x) = (x-5)2+(y-6)2+(z-7)2 ...
- Radar Installation POJ - 1328 (贪心)
题目大意(vj上的翻译版本) 假定海岸线是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.每个小岛是位于海洋中的一个点.对于任何一个雷达的安装 (均位于海岸线上),只能覆盖 d 距离,因此海洋中的 ...