首页 技术 正文
技术 2022年11月16日
0 收藏 794 点赞 4,676 浏览 3237 个字

已知条件:三个缸N状态,每个缸中不同颜色球的个数M状态值,时间轴T,观察值序列O

参数:状态值序列,转移概率序列

求:概率

C#实现马尔科夫模型例子

后台代码如下

         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>请输入状态值序列&nbsp;&nbsp;: </span><input type="text" id="zhuangtaizhi" value="0,2,1,1,2,0,0,1" /><span>&nbsp;&nbsp; 多个值请使用","隔开(0第一缸,1第二缸,2第三缸)</span><br /><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a11-a13 :</span>
<input type="text" id="a11_a13" value="0.25,0.45,0.2" /><span>&nbsp;&nbsp; 请输入第一缸的转移概率以","隔开,三值相加等于1</span><br /><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a21-a23 :</span>
<input type="text" id="a21_a23" value="0.1,0.85,0.15" /><span>&nbsp;&nbsp; 请输入第二缸的转移概率以","隔开,三值相加等于1</span><br /><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a31-a33 :</span>
<input type="text" id="a31_a33" value="0.14,0.55,0.31" /><span>&nbsp;&nbsp; 请输入第三缸的转移概率以","隔开,三值相加等于1</span><br /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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();
});
}

纯本人手写,转载请注明出处

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,955
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,479
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,291
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,108
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,740
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,774