强化学习有两种常见迭代训练算法:策略迭代算法和值迭代算法。在上一篇博客<<强化学习笔记(二)>>中已经详细描述了策略迭代算法,其实值迭代算法和策略迭代算法的基本思想是一致的,其最大的区别在于,策略迭代算法在进行策略改善的时候,使用的每个状态的值函数,是稳定的,在进行策略评估的时候,计算得到了当前策略的稳定值函数;而值迭代算法交替进行策略评估和策略改善的过程,并不是等到值函数稳定的时候再进行策略改善,其过程更为动态。
gym的样例代码展示
通过对下面的问题进行编程,加深对值迭代算法的理解。问题的描述同<<强化学习笔记(二)>>中的内容
该图的状态空间由下置上,从左到右,分别为1 – 36
import numpy as np
import random
from gym import spaces
import gym
from gym.envs.classic_control import rendering
#模拟环境类
class GridWorldEnv(gym.Env):
#相关的全局配置
metadata = {
'render.modes':['human', 'rgb_array'],
'video.frames_per_second': 2
}
def __init__(self):
self.states = [i for i in range(1, 37)] #初始化状态
self.terminate_states = [3, 7, 11, 15, 19, 20, 23, 30, 33, 34] #终结态
self.actions = ['up', 'down', 'left', 'right'] #动作空间
self.v_states = dict() #状态的值空间
for state in self.states:
self.v_states[state] = 0.0
for state in self.terminate_states: #先将所有陷阱和黄金的值函数初始化为-1.0
self.v_states[state] = -1.0
self.v_states[34] = 1.0 #黄金的位置值函数初始化为 1
self.initStateAction() #初始化每个状态的可行动作空间
self.initStatePolicyAction() #随机初始化当前策略
self.gamma = 0.8 #计算值函数用的折扣因子
self.viewer = None #视图对象
self.current_state = None #当前状态
return
def translateStateToRowCol(self, state):
"""
将状态转化为行列坐标返回
"""
row = (state - 1) // 6
col = (state - 1) % 6
return row, col
def