python写dnf游戏脚本辅助_HMM-维特比算法明白与实现(python)_dnf辅助,r6辅助
基于ELK搭建MySQL日志平台的要点和常见错误绝地求生卡盟
解码问题
给定观察序列 (O=O_1O_2...O_T),模子 (lambda (A,B,pi)),找到最可能的状态序列 (I^∗={i^∗_1,i^∗_2,...i^∗_T})
近似算法
在每个时刻 (t) 选择最可能的状态,获得对应的状态序列
凭据HMM-前向后向算法盘算时刻 (t) 处于状态 (i^*_t) 的概率:
[i^∗_t=argmax[gamma_t(i)],t=1,2,...T gamma_t(i) = frac{alpha_{i}(t) beta_{i}(t)}{sum_{i=1}^{N} alpha_{i}(t) beta_{i}(t)} ]
然则无法保证获得的解是全局最优解
维特比算法
维特比算法的基础可以归纳综合为下面三点(来源于吴军:数学之美):
若是概率最大的路径经由篱笆网络的某点,则从起始点到该点的子路径也一定是从最先到该点路径中概率最大的。
假定第 t 时刻有 k 个状态,从最先到 t 时刻的 k 个状态有 k 条最短路径,而最终的最短路径一定经由其中的一条。
凭据上述性子,在盘算第 t 1 时刻的最短路径时,只需要思量从最先到当前的k个状态值的最短路径和当前状态值到第 t 1 时刻的最短路径即可。如求t=3时的最短路径,即是求t=2时,从起点到当前时刻的所有状态结点的最短路径加上t=2到t=3的各节点的最短路径。
通俗明白维特比算法,对上面三点加深明白
如果你从S和E之间找一条最短的路径,最简朴的方式就是列出所有可能的路径 ((O(T^N))),选出最小的,显然时间复杂度太高。怎么办?(摘自[3])
使用维特比算法
S到A列的路径有三种可能:S-A1,S-A2,S-A3,如下图
S-A1,S-A2,S-A3 中肯定有一个属于全局最短路径。继续往右,到了B列
对B1:
会发生3条路径:
S-A1-B1,S-A2-B1,S-A3-B1
假设S-A3-B1是最短的一条,删掉其他两条。获得
对B2:
会发生3条路径:
S-A1-B2,S-A2-B2,S-A3-B2
假设S-A1-B2是最短的一条,删掉其他两条。获得
对B3:
会发生3条路径:
S-A1-B3,S-A2-B3,S-A3-B3
假设S-A2-B3是最短的一条,删掉其他两条。获得
现在我们看看对B列的每个节点有哪些,回首维特比算法第二点
假定第 t 时刻有 k 个状态,从最先到 t 时刻的 k 个状态有 k 条最短路径,而最终的最短路径一定经由其中的一条
B列有三个节点,以是会有三条最短路径,最终的最短路径一定会经由其中一条。如下图
同理,对C列,会获得三条最短路径,如下图,dnf脚本,
到目前为止,仍然无法确定哪条属于全局最短。最后,我们继续看E节点
最终发现最短路径为S-A1-B2-C3-E
数学形貌
在上述过程中,对每一列(每个时刻)会获得对应状态数的最短路径。在数学上若何表达?纪录路径的最大概率值 $ delta_t(i)$ 和对应路径经由的节点 (psi_t(i))。
界说在时刻 (t) 状态为 (i) 的所有单条路径中概率最大值为
[delta_{t}(i)=max _{i_{1}, i_{2}, ldots, i_{t-1}} Pleft(i_{t}=i, i_{t-1}, ldots, i_{1}, o_{t}, ldots, o_{1} | lambdaright), i=1,2, ldots, N ]
递推公式
[begin{aligned} delta_{t 1}(i) &=max _{i_{1}, i_{2}, ldots, i_{t}} Pleft(i_{t 1}=i, i_{t}, ldots, i_{1}, o_{t 1}, ldots, o_{1} | lambdaright) &=max _{1 leq j leq N}left[delta_{t}(j) a_{j i}right] b_{i}left(o_{t 1}right), i=1,2, ldots, N ; t=1,2, ldots, T-1 end{aligned} ]
界说在时刻 (t) 状态为 (i) 的所有单条路径中,概率最大路径的第 (t - 1) 个节点为
[psi_{t}(i)=arg max _{1 leq j leq N}left[delta_{t-1}(j) a_{j i}right], i=1,2, ldots, N ]
维特比算法步骤:
step1:初始化
[begin{aligned}&delta_{1}(i)=pi_{i} b_{i}left(o_{1}right), i=1,2, ldots, N&psi_{1}(i)=0, i=1,2, ldots, Nend{aligned} ]
step2:递推,对 (t=2,3,...,T)
[delta_{t}(i)=max _{1 leq j leq N}left[delta_{t-1}(j) a_{j i}right] b_{i}left(o_{t}right), i=1,2, ldots, N psi_{t}(i)=arg max _{1 leq j leq N}left[delta_{t-1}(j) a_{j i}right], i=1,2, ldots, N ]
step3:盘算时刻 (T) 最大的 $ delta _T(i)(,即为最可能隐藏状态序列泛起的概率。盘算时刻)T(最大的)psi_T(i)(,即为时刻)T$最可能的隐藏状态。
[P^{*}=max _{1 leq i leq N} delta_{T}(i) quad i_{T}^{*}=arg max _{1 leq i leq N} delta_{T}(i) ]
step4:最优路径回溯,对(t=T-1,...,1)
[i_{t}^{*}=psi_{t 1}left(i_{t 1}^{*}right)I^*=(i_{1}^{*},i_{2}^{*},...,i_{T}^{*}) ]
代码实现
假设从三个 袋子 {1,2,3}中 取出 4 个球 O={red,white,red,white},模子参数(lambda = (A,B,pi)) 如下,盘算状态序列,即取出的球来自哪个袋子
#状态 1 2 3
A = [[0.5,0.2,0.3],
[0.3,0.5,0.2],
[0.2,0.3,0.5]]
pi = [0.2,0.4,0.4]
# red white
B = [[0.5,0.5],
[0.4,0.6],
[0.7,0.3]]
def hmm_viterbi(A,B,pi,O):
T = len(O)
N = len(A[0])
delta = [[0]*N for _ in range(T)]
psi = [[0]*N for _ in range(T)]
#step1: init
for i in range(N):
delta[0][i] = pi[i]*B[i][O[0]]
psi[0][i] = 0
#step2: iter
for t in range(1,T):
for i in range(N):
temp,maxindex = 0,0
for j in range(N):
res = delta[t-1][j]*A[j][i]
if res>temp:
temp = res
maxindex = j
delta[t][i] = temp*B[i][O[t]]#delta
psi[t][i] = maxindex
#step3: end
p = max(delta[-1])
for i in range(N):
if delta[-1][i] == p:
i_T = i
#step4:backtrack
path = [0]*T
i_t = i_T
for t in reversed(range(T-1)):
i_t = psi[t 1][i_t]
path[t] = i_t
path[-1] = i_T
return delta,psi,path
A = [[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]]
B = [[0.5,0.5],[0.4,0.6],[0.7,0.3]]
pi = [0.2,0.4,0.4]
O = [0,1,0,1]
hmm_viterbi(A,B,pi,O)
效果
references:
iOS中的事件响应链、单例模式、工厂模式、观察者模式
python写dnf游戏脚本辅助_HMM-维特比算法明白与实现(python)_dnf辅助,r6辅助相关推荐
- python写dnf游戏脚本辅助_利用Python自动化操作鼠标键盘刷金币,工作室都靠这种脚本搬砖!...
不管是英雄联盟还是王者荣耀,总是有一个特殊的模式可以用来刷金币,为什么说是特殊模式呢?因为打的都是人机,或者并不影响游戏平衡,被其它玩家举报,同时你这种模式的战绩也没人去看你的. 如果能利用Pytho ...
- python网络游戏脚本_用Python写一个游戏脚本,你会吗?
学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手.如果你也想多练项目实战.可以去小编的Python交流.裙 :一久武其而而流一思(数字的谐 ...
- python可以制作游戏脚本吗_用Python写一个游戏脚本,你会吗?
学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手.如果你也想多练项目实战.可以去小编的Python交流.裙 :一久武其而而流一思(数字的谐 ...
- 开始着手用Python写一个游戏脚本(一)
学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手. 听说pywin32写脚本还不错 pywin32主要代码 我以楚留香的电脑版为例,记录脚 ...
- 用Python写一个游戏脚本,你会吗?
学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手. 听说pywin32写脚本还不错 pywin32主要代码 我以楚留香的电脑版为例,记录脚 ...
- 用python写跑酷游戏脚本_用python写游戏之2D跑酷游戏(二)
这篇文章介绍2D跑酷游戏中,添加地板资源, 给主角附加重力作用,以及添加游戏控制器和游戏场景的切换. 废话不多说,直接开始. 添加地板资源 定义地板类,继承自pygame.sprite.Sprite ...
- python自动游戏脚本_[python游戏脚本]我想用Python写一个游戏脚本,自动点击排队!...
我只是学会了Python,我用我的知识掌握和使用\u201Cautopy\u201D功能来编写一个脚本,该脚本自动点击鼠标队列,但是我希望这个脚本运行而不被显示在前面的窗口,即使是最小化.我在后台继续 ...
- 用python写跑酷游戏脚本,用Python写一个天天酷跑
感觉上次写的植物大战僵尸与俄罗斯方块的反应还不错,这次这个文章就更有动力了 这次就写一个天天酷跑吧 写出来的效果图就是这样了 下面就更新一下全部的代码吧 还是老样子先定义`import pygame, ...
- python写安卓游戏_python写lol游戏脚本(用python开发安卓脚本)
python写lol游戏脚本 俾格米人和搅拌机的引擎. python-ogre和panda3d是用c/c编写的,但只提供了一个python接口. 你好,蟒蛇可以在Android上工作. 因为你可以在A ...
最新文章
- IntelliJ IDEA 12 创建Web项目 教程 超详细版
- 《关系营销2.0——社交网络时代的营销之道》一从单向沟通转向多方沟通
- qhfl-9 微信模板消息推送
- MySQL复习资料(一)——MySQL环境安装
- mysql5.7.14安装版_MySql5.7.14安装教程详解(解压版)_MySQL
- vue - 组件的创建
- JAVA读取Properties文件对象常用方法总结
- python3 自动识图
- FL Studio 20.8中文进阶高级完整版 安装下载教程
- Java制作证书的工具keytool用法总结
- Python报mongod: error while loading shared libraries: libcrypto.so.1.1
- 基于网络安全相关的开源项目技术预研分析报告
- 怎么看台式计算机内存条,内存条型号,详细教您怎么查看内存条型号
- 月薪翻20倍,从小编辑到百度高级产品经理,我是如何打怪升级的
- mysql right syntax_Mysql 出现the right syntax to use near USING BTREE错误解决办法
- 大二上学期 学习计划
- Yocto系列讲解[理论篇]27 - BitBake全过程(5)
- IDEA类左侧有一个对勾,如何去掉对勾?
- 你,来到大学的第一眼
- 服务器登录密码 被修改,服务器登录密码被人改
热门文章
- dos下操作mysql数据库常用命令
- MFC与OpenCv中的图片转换实例
- MFC 操作配置文件INI的方法
- 系统服务有多个mysql_windows系统中安装多个Mysql服务
- 华三交换机mode是什么意思_POE交换机150米、长距离250米传输是什么意思?
- import cv2时ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
- 文件包含——apache日志文件包含shell(四)
- java 时间段内月份_java获取某段时间内的月份列表
- 软件开发计划_敏捷软件开发实践:估算与计划读书笔记123第21章 关于计划的沟通...
- Linux里的21的理解