""" 悬崖漫步环境是一个非常经典的强化学习环境,他要求一个智能体从起点出发,避开悬崖行走,最终到达目标位置。
下面代码就是一个悬崖漫步环境:有一个4*12的网格世界,每一个网格表示一个状态,智能体的起点是左下角的状态,
目标是右下角的状态,智能体在每一个状态可以执行四个动作:上、下、左、右,如果智能体采取动作后触碰到边界墙壁则
状态不发生改变,否则就会相应到达下一个状态。环境中有一段悬崖,智能体掉入悬崖或者到达目标状态都会结束动作并返回起点
,也就是说掉入悬崖或者到达目标状态是终止状态。智能体每走一步的奖励是-1,掉入悬崖的奖励是-100。"""
class CliffWalkingEnv:
def __init__(self,ncol=12,nrow=4):
self.ncol=ncol#定义网格世界的列
self.nrow=nrow#定义网格世界的行
self.P=self.createP()#转移矩阵P[state][action]=[(p,next_state,reward,done)]包含下一个状态和奖励
def createP(self):
P=[[[]for i in range(4)]for j in range(self.ncol*self.nrow)]#初始化
change=[[0,-1],[0,1],[-1,0],[1,0]]#4种动作,change[0]:上;change[0]:上;change[0]:上;change[0]:上。[列变化,行变化];坐标系原点(0,0)
for i in range(self.nrow):
for j in range(self.ncol):
for a in range(len(change)):
if i==self.nrow-1 and j>0:#如果在悬崖或者目标状态,任何动作奖励都为0
P[i*self.ncol+j][a]=[(1,i*self.ncol+j,0,True)]
continue
next_x=min(self.ncol-1,max(0,j+change[a][0]))
next_y=min(self.nrow-1,max(0,i+change[a][1]))
next_state=next_y*self.ncol+next_x
reward=-1
done=False
if next_y==self.ncol-1 and next_x>0:#如果下一个位置在悬崖或者终点,done=True
done=True
if next_x==self.ncol:#如果在悬崖,奖励为-100
reward=-100
P[i*self.ncol+j][a]=[(1,next_state,reward,done)]
return P
强化学习经典环境之悬崖漫步环境
最新推荐文章于 2024-10-02 10:53:34 发布