赞
踩
Actor是基于Policy-Gradients。可以选择连续动作,但是必须循环一个回合才可以更新策略。学习效率低。
Critic网络继承了Q-learning 的传统,依然可以逐步更新。
首先导入需要的包,这没什么好说的。
import numpy as np import tensorflow as tf import gym import matplotlib.pyplot as plt np.random.seed(2) tf.set_random_seed(2) # reproducible # 超参数 OUTPUT_GRAPH = False MAX_EPISODE = 5 DISPLAY_REWARD_THRESHOLD = 200 # 刷新阈值 MAX_EP_STEPS = 500 # 最大迭代次数 RENDER = False # 渲染开关,这玩意儿是gym输出动画的开关 GAMMA = 0.9 # 衰变值 LR_A = 0.001 # Actor学习率 LR_C = 0.01 # Critic学习率 env = gym.make('CartPole-v0') env.seed(1) env = env.unwrapped N_F = env.observation_space.shape[0] # 状态空间 N_A = env.action_space.n # 动作空间
Actor网络
class Actor(object):
def __init__(self, sess, n_features, n_actions, lr=0.001):
self.sess = sess
self.s = tf.placeholder(tf.float32, [1, n_features], "state")
self.a = tf.placeholder(tf.int32, None, "act")
self.td_error = tf.placeholder(tf.float32, None, "td_error") # TD_error
with tf.variable_scope('Actor'):
l1 = tf.layers.dense(
inputs=self.s,
units=20, # number
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。