#參考:
#encoding:utf-8
#!/usr/bin/env python3
import random
#狀態states=[0,1,2,3,4,5]
#動作actions=["a", "b"]
# 獎勵的折扣因子
gama=0.9
""" 狀態值 v_value
v_value="""
v_value={}
for state in states:
v_value[state]=0
# 動作值 ("1", "a"):0
q_value={}
#狀態轉移
def p_state_reward(state, action):
# 輸入當前狀態,及行為
# return 跳轉概率,下一狀態, 獎勵
if state==0:
if action=="a":
return (0, 0, 0)
else:
return (0, 2, 0)
if state==1:
if action=="a":
return (1/2, 0, 1)
else:
return (1/2, 2, 0)
if state==2:
if action=="a":
return (1/2, 1, 0)
else:
return (1/2, 3, 0)
if state==3:
if action=="a":
return (1/2, 2, 0)
else:
return (1/2, 4, 0)
if state==4:
if action=="a":
return (1/2, 3, 0)
else:
return (1/2, 5, 5)
if state==5:
if action=="a":
return (0, 5, 0)
else:
return (0, 5, 0)
# q_value 初始值
"""q_value="""
def q_value_fun():
q_value.clear()
for state in states:
for action in actions:
psr=p_state_reward(state, action)
temp=0
temp+=psr[0]*(psr[2]+gama*v_value[psr[1]])
#for t in p_state_reward(state, action):總報錯
#temp+=t[0]*(t[2]+gama*v_value[t[1]])
q_value[(state, action)]=temp
#q_value初始化
q_value_fun()
#策略 pi 初始化 "1":
pi={}
for state in states:
temp={}
for action in actions:
temp[action]=1.0/len(actions)
pi[state]=temp
#print(v_value)
#print(pi)
#print(q_value)
#策略評估 得出 v_value 值
def policy_evalue():
global v_value
v_value_new = {}
def v_update():
nonlocal v_value_new
v_value_new = {}
for state in states:
temp = 0
for action, p in pi[state].items():
temp += p * q_value[(state, action)]
v_value_new[state] = temp
# print("v_value: "+str(v_value))
# print("v_value_new: "+str(v_value_new))
#迭代停止條件
def stop_judge():
flag=true
for state, value in v_value.items():
if abs(v_value_new[state]-value)>0.0001:
flag=false
return flag
# 計算 v_value_new
v_update()
while stop_judge()!=true:
# 更新 v_value
v_value=v_value_new
# 更新 q_value
q_value_fun()
# 再次迭代 計算v_value_new
v_update()
#策略改進 max
def policy_improve():
flag=true
for state in states:
#l=#for action in actions:
#action=max(l)[-1]
action=max((q_value[state, action], action) for action in actions)[-1]
for k in pi[state]:
if k==action:
if pi[state][k]!=1.0:
pi[state][k]=1.0
flag=false
else:
pi[state][k]=0.0
return flag
if __name__=="__main__":
"""policy_evalue()
print("*"*30)
print(v_value)
print("*"*30)
print(q_value)
print("*"*30)
print(pi)
"""policy_evalue()
flag = policy_improve()
i = 1
while flag != true:
i += 1
policy_evalue()
flag = policy_improve()
#print("*" * 30 + "\n")
print("總共執行次數:" + str(i) + "\n")
print("狀態值為:")
print(v_value)
print("")
print("狀態行為值為:")
print(q_value)
print("策略為:")
print(pi)
二維網格遷移
給你乙個 n 行 m 列的二維網格 grid 和乙個整數 k。你需要將 grid 遷移 k 次。每次 遷移 操作將會引發下述活動 輸入 grid 1,2,3 4,5,6 7,8,9 k 1 輸出 9,1,2 3,4,5 6,7,8 輸入 grid 3,8,1,9 19,7,2,5 4,6,11,10...
Grid 網格二維布局 筆記
首先,你必須使用 display grid 將容器元素定義為乙個 grid 網格 布局,使用 grid template columns 和 grid template rows 設定 列 和 行 的尺寸大小,然後通過 grid column 和 grid row 將其子元素放入這個 grid 網格...
二維瓦片網格邊界檢測
二維瓦片網格邊界檢測 1.每個網格只考慮enws四個相鄰格仔 四個相鄰格仔ensw編號為0 3 2.當前方向d 0 3 如果當前格仔是上乙個格仔選擇的ensw 0 3 中的乙個,則這個選擇就是當前方向 3.選擇下乙個的策略 按找以下優先順序判斷 d 3 4,d 4 4,d 5 4,d 6 4 第一優...