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的更多资料在官方文 ...
随机推荐
- java实现麦克风自动录音
最近在研究语音识别,使用百度的sdk.发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件. 先上代码: public class EngineeCore { String ...
- dubbo之服务降级
向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成) RegistryFactory registryFactory = ExtensionLoader.getExtensionLo ...
- Filesystem Hierarchy Standard (Unix, Linux etc)
http://www.pathname.com/fhs/ /boot -- Static files of the boot loader Purpose: contains everything r ...
- Introduction of Version Control/Git, SVN
什么是版本控制? 你可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照.当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当 ...
- 【转载】Java下利用Jackson进行JSON解析和序列化
参考资料: https://blog.csdn.net/sdut406/article/details/85647982 Java下常见的Json类库有Gson.JSON-lib和Jackson等,J ...
- 每日命令:(10)cat
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...
- js之定时器操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- gnulpot
gnulpot Table of Contents 1. Label position 2. coordinates 3. Symbols 4. key 4.1. key position 4.2. ...
- 高德地图将字符串地址转为经纬度的一个demo
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- 【模板】Lca倍增法
Codevs 1036 商务旅行 #include<cstdio> #include<cmath> #include<algorithm> using namesp ...