强化学习经典环境之悬崖漫步环境

""" 悬崖漫步环境是一个非常经典的强化学习环境,他要求一个智能体从起点出发,避开悬崖行走,最终到达目标位置。
下面代码就是一个悬崖漫步环境:有一个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

OpenAI Gym 是一个用于创建和测试强化学习(RL)算法的开源环境库,它提供了一系列标准化的环境供研究人员和开发者实验。其中著名的 "CliffWalking" 或者称为 "GridWorld with a Cliff" 是一个经典环境,它模拟了一个简单的网格世界,包含一个悬崖区域,如果代理落在悬崖上,就会结束该回合。 在 "CliffWalking" 中,目标是让智能体学会避开悬崖并尽量获得较高的分数。通常,任务包括以下几个关键元素: 1. **环境状态**:网格世界由一个个格子组成,每个格子都有一个特征向量表示,可能包括当前位置、方向、悬崖等信息。 2. **动作空间**:一般有两种或四种基本的动作,如上下左右移动。 3. **奖励机制**:安全移动会获得正奖励,撞到悬崖则会得到极大负奖励,并且游戏结束。 4. **终止条件**:达到预定的步数限制,或者走到悬崖上。 以下是使用 Python 和 `gym` 库实现一个简单的 CliffWalking 环境的伪代码示例: ```python import gym from gym.envs.toy_text.discrete import DiscreteEnv class CliffWalkingEnv(DiscreteEnv): def __init__(self, width=12, height=4, cliff=True): super().__init__() self.action_space = gym.spaces.Discrete(4) # 上下左右 self.observation_space = gym.spaces.Discrete(width * height) self.grid = create_grid(width, height, cliff) self.current_pos = (0, 0) def _generate_observation(self): return self.grid[self.current_pos] def step(self, action): reward, done, info = self._take_action(action) obs = self._generate_observation() return obs, reward, done, info def _take_action(self, action): # 实现根据动作更新位置的逻辑,判断是否碰到悬崖 ... def run_episode(env): obs = env.reset() for _ in range(MAX_STEPS): action = select_action(obs) # 根据策略选择动作 obs, reward, done, _ = env.step(action) if done: break return obs # 创建并运行环境 env = CliffWalkingEnv() obs = run_episode(env) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值