# 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 是