import numpy as np
states=np.array([0,1]) #rainy--0 sunny--1
obser=np.array([0,1,2]) # k walk-0 shop-1 clean-2
start=np.array([0.6,0.4])
transition_probability=np.array([[0.7,0.3],
[0.4,0.6]])
emission_probability=np.array([[0.1,0.4,0.5],
[0.6,0.3,0.1]])
weather_sun=np.zeros([2,7])
weather_rain=np.zeros([2,7])
for i in range(0,2):
weather_rain[i,0]=start[i]*emission_probability[i,0]
weather_sun[i,0]=start[i]*emission_probability[i,0]
j=1
for k in range(1,2):
for i in range(0,2):
weather_rain[i,j]=weather_rain[i,j-1]*transition_probability[i,0]*emission_probability[0,k]
weather_sun[i,j]=weather_sun[i,j-1]*transition_probability[i,1]*emission_probability[1,k]
weather_rain[:,j+2]=np.max(weather_rain[:,j])
weather_sun[:,j+2]=np.max(weather_sun[:,j])
if weather_rain[0,j]>weather_rain[1,j]:
weather_rain[0,j+1]=weather_rain[0,j]#np.max(weather_rain[:,j])
weather_rain[1,j+1]=0
if weather_rain[0,j]<weather_rain[1,j]:
weather_rain[1,j+1]= weather_rain[1,j]#np.max(weather_rain[:,j])
weather_rain[0,j+1]=0
if weather_sun[0,j]>weather_sun[1,j]:
weather_sun[0,j+1]=np.max(weather_sun[:,j])
weather_sun[1,j+1]=0
if weather_sun[0,j]<weather_sun[1,j]:
weather_sun[1,j+1]=np.max(weather_sun[:,j])
weather_sun[0,j+1]=0
j=4
for k in range(2,3):
for i in range(0,2):
weather_rain[i,j]=weather_rain[i,j-1]*transition_probability[i,0]*emission_probability[0,k]
weather_sun[i,j]=weather_sun[i,j-1]*transition_probability[i,1]*emission_probability[1,k]
weather_rain[:,j+2]=np.max(weather_rain[:,j])
weather_sun[:,j+2]=np.max(weather_sun[:,j])
if weather_rain[0,j]>weather_rain[1,j]:
weather_rain[0,j+1]=np.max(weather_rain[:,j])
weather_rain[1,j+1]=0
if weather_rain[0,j]<weather_rain[1,j]:
weather_rain[1,j+1]= np.max(weather_rain[:,j])
weather_rain[0,j+1]=0
if weather_sun[0,j]>weather_sun[1,j]:
weather_sun[0,j+1]=np.max(weather_sun[:,j])
weather_sun[1,j+1]=0
if weather_sun[0,j]<weather_sun[1,j]:
weather_sun[1,j+1]=np.max(weather_sun[:,j])
weather_sun[0,j+1]=0
# print(weather_rain)
# print(weather_sun)
weather_all=np.vstack((weather_rain,weather_sun))
#print(weather_all)
# if weather_rain[0,6]>weather_sun[0,6]:
# print("clean:rain")
#for j in range(5,-1,-3):
#clean shop
weather_day=np.where(weather_all==np.max(weather_all[:,5]))
a=weather_day[0][0]
#print(a)
if a==3 or a==2:
print("clean:sunny")
weather_all1=np.delete(weather_all,0,axis=0)
weather_all2=np.delete(weather_all1,0,axis=0)
print("shop:sunny")
if a==0 or a==1:
print("clean:rainy")
weather_all1=np.delete(weather_all,2,axis=0)
weather_all2=np.delete(weather_all1,2,axis=0)
print("shop:rainy")
else:
print("error")
#walk
weather_day=np.where(weather_all==np.max(weather_all[:,0]))
a=weather_day[0][0]
if a==0:
print("walk:rainy")
if a==1:
print("walk:sunny")
else:
print("error")
运行结果如下
clean:rainy
shop:rainy
walk:sunny