冰冻湖图例(以4*4为例):
SFFF
FHFH
FFFH
HFFG
S为起始位置,F是可通过的冰冻湖,H是会落下去的洞,G是要到达的目标。
状态个数为16,指代16个方格。行为个数为4,查原码可知,LEFT = 0;DOWN = 1;RIGHT = 2;UP = 3。
state, action = 6,2
directions = {0:'无法移动',4:'上',1:'左',-1:'右',-4:'下'}
for next_sr in env.P[state][action]:
trans_prob, next_state, reward_prob, _ = next_sr
print(directions[state-next_state],'\t',trans_prob, '\t',next_state,'\t', reward_prob)
state,action = 6.2
输出(移动方向 转移概率 下一状态 回报):
下 0.3333333333333333 10 0.0 右 0.3333333333333333 7 0.0 上 0.3333333333333333 2 0.0
state,action = 2,3
输出:
右 0.3333333333333333 3 0.0 无法移动 0.3333333333333333 2 0.0 左 0.3333333333333333 1 0.0
state,action = 14,2
无法移动 0.3333333333333333 14 0.0 右 0.3333333333333333 15 1.0 上 0.3333333333333333 10 0.0
state,action = 5,2
输出:
无法移动 1.0 5 0
由此我们可看出动作的实际效果为。当位于F块上时,向对应方向和两侧方向等概率前进一格,如果碰到边界则回到原点。如果处于H块上,不会移动,下一状态默认为原点。同时我们可看出,只有当移动到目标点G块时,才会获得1的奖励回报。