NGSIM 数据库换道规则提取源码程序 - matlab其它源码 - 谷速源码
下载频道> 资源分类> matlab源码> 其它源码> NGSIM 数据库换道规则提取源码程序

标题:NGSIM 数据库换道规则提取源码程序
分享到:

所属分类: 其它源码 资源类型:程序源码 文件大小: 133.43 KB 上传时间: 2019-12-01 21:33:48 下载次数: 1 资源积分:1分 提 供 者: jiqiren NGSIM 数据库换道规则提取源码程序
内容:
/*
**   File:Viterbi.cpp
**   功能:给定HMM和观察序列,求最可能的状态
*/
 
#include "StdAfx.h"
#include <math.h>
#include "hmm.h"
#include "nrutil.h"
 
#define VITHUGE  100000000000.0
 
/**************************************************************************
** 函数名称:Viterbi
** 功能:Viterbi算法
** 参数:phmm:HMM结构指针
**       T:观察值的个数
**       O:观察序列
**       delta,psi为中间变量
**       q:求得的最佳状态序列
**       pprob:概率
**/
void Viterbi(HMM *phmm, int T, int *O, double **delta, int **psi, 
int *q, double *pprob)
{
int i, j; /* 状态下标 */
int  t; /* 时间下标 */
 
int maxvalind;
double maxval, val;
 
/* 1. 初始化  */
 
for (i = 1; i <= phmm->N; i++) 
{
delta[1][i] = phmm->pi[i] * (phmm->B[i][O[1]]);
psi[1][i] = 0;
}
 
/* 2. 递归 */
 
for (t = 2; t <= T; t++) 
{
for (j = 1; j <= phmm->N; j++) 
{
maxval = 0.0;
maxvalind = 1;
for (i = 1; i <= phmm->N; i++) 
{
val = delta[t-1][i]*(phmm->A[i][j]);
if (val > maxval) {
maxval = val;
maxvalind = i;
}
}
 
delta[t][j] = maxval*(phmm->B[j][O[t]]);
psi[t][j] = maxvalind; 
 
}
}
 
/* 3. 终止 */
 
*pprob = 0.0;
q[T] = 1;
for (i = 1; i <= phmm->N; i++) 
{
if (delta[T][i] > *pprob) 
{
*pprob = delta[T][i];
q[T] = i;
}
}
 
/* 4. Path (state sequence) backtracking */
 
for (t = T - 1; t >= 1; t--)
q[t] = psi[t+1][q[t+1]];
 
}
 
/**************************************************************************
** 函数名称:ViterbiLog
** 功能:Viterbi算法
** 参数:phmm:HMM结构指针
**       T:观察值的个数
**       O:观察序列
**       delta,psi为中间变量
**       q:求得的最佳状态序列
**       pprob:概率
**/
void ViterbiLog(HMM *phmm, int T, int *O, double **delta, int **psi,
int *q, double *pprob)
{
int     i, j;   /* 状态下标 */
int     t;      /* 时间下标 */
 
int     maxvalind;
double  maxval, val;
double  **biot;
 
/* 0. 预处理 */
 
for (i = 1; i <= phmm->N; i++) 
phmm->pi[i] = log(phmm->pi[i]);
for (i = 1; i <= phmm->N; i++) 
for (j = 1; j <= phmm->N; j++) 
{
phmm->A[i][j] = log(phmm->A[i][j]);
}
 
biot = dmatrix(1, phmm->N, 1, T);
for (i = 1; i <= phmm->N; i++) 
for (t = 1; t <= T; t++) 
{
biot[i][t] = log(phmm->B[i][O[t]]);
}
 
/* 1. 初始化  */
 
for (i = 1; i <= phmm->N; i++) 
{
delta[1][i] = phmm->pi[i] + biot[i][1];
psi[1][i] = 0;
}
 
/* 2. 递归 */
 
for (t = 2; t <= T; t++) 
{
for (j = 1; j <= phmm->N; j++) 
{
maxval = -VITHUGE;
maxvalind = 1;
for (i = 1; i <= phmm->N; i++) 
{
val = delta[t-1][i] + (phmm->A[i][j]);
if (val > maxval) 
{
maxval = val;
maxvalind = i;
}
}
 
delta[t][j] = maxval + biot[j][t]; 
psi[t][j] = maxvalind;
 
}
}
 
/* 3. 终止 */
 
*pprob = -VITHUGE;
q[T] = 1;
for (i = 1; i <= phmm->N; i++) 
{
if (delta[T][i] > *pprob) 
{
*pprob = delta[T][i];
q[T] = i;
}
}
 
 
/* 4. 回溯 */
 
for (t = T - 1; t >= 1; t--)
q[t] = psi[t+1][q[t+1]];
 
}

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

NGSIM 数据库换道规则提取源码程序/
NGSIM 数据库换道规则提取源码程序/shujuchulichengxu/
NGSIM 数据库换道规则提取源码程序/shujuchulichengxu/ChangLane.m
NGSIM 数据库换道规则提取源码程序/shujuchulichengxu/NGSIM 数据库换道规则提取.docx
NGSIM 数据库换道规则提取源码程序/shujuchulichengxu/Untitled.m
NGSIM 数据库换道规则提取源码程序/shujuchulichengxu/change.m

关键词: NGSIM 数据库 换道 规则 提取 源码程序

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved