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的更多资料在官方文 ...
随机推荐
- mysql 性能优化索引、缓存、分表、分布式实现方式。
系统针对5000台终端测试结果 索引 目标:优化查询速度3秒以内 需要优化.尽量避免使用select * 来查询对象.使用到哪些属性值就查询出哪些使用即可 首页页面: 设备-组织查询 优化 避免使用s ...
- parsley之验证属性设置
parsley.js添加表单验证功能,直接在html元素中添加对应属性: Name API Description Required #2.0必填 required HTML5 data-parsle ...
- unittest自定义运行全量case or 运行指定的单个或多个case
import unittest import os from case.zufang.test_api_area_rentProlist import Zf1 case_path = os.path. ...
- CMU Database Systems - Two-phase Locking
首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本 ...
- ExtJs如何判断form表单是否被修改过详解
1.Extjs表单提交主要有三种方式: 1, EXT的form表单ajax提交(默认提交方式) 相对单独的ajax提交来说优点在于能省略写参数数组 ,form.getForm().submi ...
- 常用HTML5代码片段
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 热词解析(9) — hangry
今天给大家介绍一个非常有趣.又超级实用的词!!中文叫"饿极而怒",英文叫... 不知道你有没有这样的经历,当你饿着肚子等着你妈做饭,结果你妈却在麻将桌上不下来,你就越来越饿,越饿越 ...
- CSC
CSC CSC Table of Contents 1. account 2. Contacts 3. <国家公派留学人员预订回国机票说明> 4. 回国手续 4.1. 申办及开具<留 ...
- noip模拟赛 兔子
[问题描述]在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝 ...
- 开源的多行字符串工具: 在JS中整段地写HTML
这样看来ES6的多行字符模板可能就不需要了-- 通过这个你可以整段整段地在JS中写HTML.SQL了. 示例 之前你得这样写 var str = '' +'<!doctype html>' ...