强化学习实战(一):策略迭代算法实现机器人快速寻找金币

一、构建机器人寻找金币的环境

构建机器人寻找金币的环境需要编写四个主要函数:
  • reset():利用均匀随机分布初始化智能体的状态;
  • render():扮演图像引擎的角色,渲染,显示环境中物体的图像;
  • step():扮演物理引擎的角色,模拟环境中物体的运动规律;
  • transform():状态转换,获得下一个状态,立即汇报,是否终止和调试项

在编写render()时,我们可以通过gym库中的classic_control目录下的redering模块绘制环境,主要利用rendering模块中的make_circle()、Line()、Transfrom()等函数或类绘制环境,代码如下:

import logging
import random
import numpy as np  
import gym 
import ptvsd
ptvsd.enable_attach(address = ('0.0.0.0', 5678))
ptvsd.wait_for_attach()

logger=logging.getLogger(__name__)
class GridEnv(gym.Env):
    metadata={
        'render.modes':['human','rgb_array'],
        'video.frames_per_second':2

    }
    def __init__(self):
        #机器人初始化状态
        self.x=[140,220,300,380,460,140,300,460]
        self.y=[250,250,250,250,250,150,150,150]
        #终止状态
        self.terminate_states=dict()
        self.terminate_states[6]=1
        self.terminate_states[7]=1
        self.terminate_states[8]=1
        #状态空间
        self.states=[1,2,3,4,5,6,7,8]
        #动作空间
        self.actions=['n','e','w','s']
        #回报函数
        self.rewards=dict()
        self.rewards['1_s']=-1.0
        self.rewards['3_s']=1.0
        self.rewards['5_s']=-1.0
        #状态转移概率
        self.t=dict()
        self.t['1_e']=2
        self.t['1_s']=6
        self.t['2_w']=1
        self.t['2_e']=3
        self.t['3_w']=2
        self.t['3_e']=4
        self.t['3_s']=7
        self.t['4_w']=3
        self.t['4_e']=5
        self.t['5_w']=4
        self.t['5_s']=8

        #折扣因子
        self.gamma=0.8
        #显示器
        self.viewer=None
        #状态
        self.state=None
        #在类对象内部访问实例属性
        #获取终止状态
    #返回下一步状态、立即回报和状态转移概率
    def transform(self,state,action):
        #遍历动作空间,当不在状态转移概率中时,该状态设为-1
        s=-1
        r=0
        key='%i_%s'%(state,action)
        if key in self.rewards:
            r=self.rewards[key]
        if key in self.t:
            s=self.t[key]
        return self.t,s,r
            
    def getTerminal(self):
        return self.terminate_states
    #获取状态空间
    def
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员对白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值