# tenserboard --logdir=logs ,然后打开网页127.0.1.1:6006,可以查看定义网络的神经结构。
# 两个神经网络,结构相同,但是参数不一样。
# 走多少步再更新,可以自己定义
# target_net 是保存很久以前的的网络的值,冻结之前的神经网络.也叫q-real
# eval_net 是实时进行更新的。每走一步,更新一步。
# 他的第二个神经网络的输出,就应该等于action的数目,第二层输出的,就是一个q_eval的估计值。
# n_l1是神经元的数目
# c_names 是用于tf调用参数的
# target_net 分析出来的,通过place_holder来进行传入到eval_net
# build_net(self) 用于建造上面的两个network
# DeepQNetwork 的参数意义
# n_action 输出的行动的值
# n_features 输入的observation
# learning_rate 学习率
# reward_decay 有多少概率听妈妈的话
# e_greedy 有多少概率会贪心的选择
# e_greedy_increment 是用来不断缩小随机的范围
# replace_target_iter 是用来隔多少步然后进行target_net的变换
# memory_size 是记忆库的容量
# batch_size 用于做梯度下降的时候进行
# store_transition(self, s, a, r, s_)
# memory 用pandas创建, pandas.DataFrame(np.zeros((self.memory_size, n_features*2 + 2))
# cost_his 是用来记录每一步的误差。
# store_transition(self, s, a, r, s_)
# 存储再内存,然后不断的循环替换。
# choose_action(self, observation)
# 如何选择呢? 在输入的时候,进行一些处理,因为原本是一维的输入,将它变成二维?
# _replace_target_params(self)
# 刚才在 target_net 和 eval_net 当中分别定义了两个 collection ,是所有的参数。
# get_collection()会返回名字的所有的集合。传出来的是一个列表。
# 然后用tf.assign来进行eval_net 赋值到 target_net 当中。
# learn(self) 的方式
# 第一步, 是否需要替代 target_net的参数。
# 第二步,调用记忆库,随机抽取记忆库。如果没有那么多记忆,就抽取已经 存储下来的记忆。
# 第三步, 运行q_next 和 q_eval 的值。他们的输入,包括两个self.s_,和self.s 。这里,主要是从存储里面取出所有的observation。这里需要更多的理解
# 第四步,计算cost。训练操作。
# 第五步,减少随机性
self.q_next 是
self.q_eval 是