一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

微頭條丨【RL】算法簡介與實現 Value-Based-Learning算法

來源:CSDN 時間:2023-03-02 09:29:27

一 Value-Based

Q-Learning


(資料圖片僅供參考)

Q-Learning是RL算法中Value-Based的算法,Q即為Q(s,a)就是在某一時刻的s狀態下(s∈S),采取 動作a (a∈A)能夠獲得收益的期望,環境會根據agent的動作反饋相應的回報reward。所以算法的主要思想就是將State與Action構建成一張Q-table來存儲Q值,然后根據Q值來選取能夠獲得最大的收益的動作。 下面是Q-Learning的TensorFlow實現

import numpy as npimport pandas as pdclass QLearning:    def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):        """        QLearning        :param actions:         :param learning_rate:         :param reward_decay:         :param e_greedy:         """        self.actions = actions        self.lr = learning_rate        self.gamma = reward_decay        self.epsilon = e_greedy        self.q_table = pd.DataFrame(columns=self.actions)    def chooseAction(self, observation):        """Choose action with state and observation"""        self.checkStateExist(observation)        if np.random.uniform()<SELF.EPSILON: :]="" opt_actions="self.q_table.loc[observation," #="" ="="np.max(opt_actions)].index)"" return="" action="opt_actions.argmax()" updateparams(self,="" state,="" action,="" reward,="" self.checkstateexist(state_)="" q_pre="self.q_table.loc[state," state_="" !="terminal" self.gamma="" self.q_table.loc[state_,="" :].max()="" q_target="reward" self.q_table.loc[state,="" action]="" +="" *="" (q_target="" -="" q_pre)="" def="" checkstateexist(self,="" if="" state="" not="" in="" self.q_table="self.q_table.append(" pd.series([0]*len(self.actions),="" index="self.q_table.columns," name="state)" )

DQN

當狀態動作很多時,Q-Learning使用Table存儲Value的方式不再實用(甚至不可行)。

如何不使用Table而得到每個狀態下采取各個動作的Value呢?DQN用神經網絡將State映射到Value。 DQN是在Q-Learning的主框架上做了擴展,包括:

記憶庫(用于重復學習,隨機抽取的經歷也打亂的狀態之間的相關性,使神經網絡的更新更有效率)MLP計算Q值暫時凍結Q_target參數(切斷相關性),target網絡用來計算Q現實

下面是DQN的TensorFlow實現

import tensorflow as tfimport numpy as npclass DeepQNet:    def __init__(self,                 n_actions,                 n_features,                 learning_rate=0.01,                 reward_decay=0.9,                 e_greedy=0.9,                 update_target_iter=300,                 memory_size=500,                 batch_size=32,                 e_greedy_increment=None,                 output_graph=False,                 ):        """        DQN        :param n_actions:        :param n_features:        :param learning_rate:        :param reward_decay:        :param e_greedy:        :param update_target_iter:        :param memory_size:        :param batch_size:        :param e_greedy_increment:        :param output_graph:        """        self.n_actions = n_actions        self.n_actions = n_actions        self.n_features = n_features        self.lr = learning_rate        self.gamma = reward_decay        self.epsilon_max = e_greedy        self.update_target_iter = update_target_iter        self.memory_size = memory_size        self.batch_size = batch_size        self.epsilon_increment = e_greedy_increment        self.epsilon = 0 if e_greedy_increment is not None else self.epsilon_max        # total learning step(Cooperate with update_target_iter in learn() to update the parameters of target net)        self.learn_step_counter = 0        # memory: row = memory_size, col = observation + observation_ + action + reward        self.memory = np.zeros((self.memory_size, self.n_features*2+2))        self._buildNet()        self.sess = tf.Session()        if output_graph:            tf.summary.FileWriter("logs/", self.sess.graph)        self.sess.run(tf.global_variables_initializer())        self.cost = []    def _buildNet(self):        """"Build evaluate network and target network"""        # build evaluate net        self.state = tf.placeholder(tf.float32, [None, self.n_features], name="state")        self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name="Q_target")        with tf.variable_scope("evaluate_net"):            c_names, n_l1 = ["evaluate_net_params", tf.GraphKeys.GLOBAL_VARIABLES], 10            w_initializer, b_initializer = tf.random_normal_initializer(0, 0.3), tf.constant_initializer(0.1)            with tf.variable_scope("layer1"):                w1 = tf.get_variable("w1", [self.n_features, n_l1], initializer=w_initializer, collections=c_names)                b1 = tf.get_variable("b1", [1, n_l1], initializer=b_initializer, collections=c_names)                l1 = tf.nn.relu(tf.matmul(self.state, w1) + b1)            with tf.variable_scope("layer2"):                w2 = tf.get_variable("w2", [n_l1, self.n_actions], initializer=w_initializer, collections=c_names)                b2 = tf.get_variable("b2", [1, self.n_actions], initializer=b_initializer, collections=c_names)                self.q_evaluate = tf.nn.relu(tf.matmul(l1, w2) + b2)        with tf.variable_scope("loss"):            self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_evaluate))        with tf.variable_scope("train"):            self.opt = tf.train.RMSPropOptimizer(self.lr).minimize(self.loss)        # build target net        self.state_ = tf.placeholder(tf.float32, [None, self.n_features], name="state_")        with tf.variable_scope("target_net"):            c_names = ["target_net_params", tf.GraphKeys.GLOBAL_VARIABLES]            with tf.variable_scope("layer1"):                w1 = tf.get_variable("w1", [self.n_features, n_l1], initializer=w_initializer, collections=c_names)                b1 = tf.get_variable("b1", [1, n_l1], initializer=b_initializer, collections=c_names)                l1 = tf.nn.relu(tf.matmul(self.state_, w1) + b1)            with tf.variable_scope("layer2"):                w2 = tf.get_variable("w2", [n_l1, self.n_actions], initializer=w_initializer, collections=c_names)                b2 = tf.get_variable("b2", [1, self.n_actions], initializer=b_initializer, collections=c_names)                self.q_next = tf.nn.relu(tf.matmul(l1, w2) + b2)    def storeTransition(self, state, action, reward, state_):        """Store the state, observation and reward experienced during the train process to enable batch training"""        if not hasattr(self, "memory_counter"):            self.memory_counter = 0        transition = np.hstack((state, [action, reward], state_))        index = self.memory_counter % self.memory_size        self.memory[index, :] = transition        self.memory_counter += 1    def chooseAction(self, observation):        """Choose action with state and observation"""        observation = observation[np.newaxis, :]        if np.random.uniform() < self.epsilon:            actions = self.sess.run(self.q_evaluate, feed_dict={self.state: observation})            action = np.argmax(actions)        else:            action = np.random.randint(0, self.n_actions)        return action    def updateTargetNet(self):        """Update the target net with the latest evaluate net parameters"""        evaluate_params = tf.get_collection("evaluate_net_params")        target_params = tf.get_collection("target_net_params")        self.sess.run([tf.assign(t, e) for t, e in zip(target_params, evaluate_params)])    def learn(self):        # check to update target net        if self.learn_step_counter % self.update_target_iter == 0:            self.updateTargetNet()            print("Update target net!")        # Get batch training data from the memory        if self.memory_counter > self.memory_size:            sample_index = np.random.choice(self.memory_size, size=self.batch_size)        else:            sample_index = np.random.choice(self.memory_counter, size=self.batch_size)        batch_memory = self.memory[sample_index, :]        q_evaluate, q_next = self.sess.run([self.q_evaluate, self.q_next],                                           feed_dict={self.state: batch_memory[:, 0:self.n_features],                                               self.state_: batch_memory[:, -self.n_features:]})        q_target = q_evaluate.copy()        batch_index = np.arange(self.batch_size, dtype=np.int32)        eval_act_index = batch_memory[:, self.n_features].astype(int)        reward = batch_memory[:, self.n_features + 1]  # Related to memory format, here means [action, reward]        q_target[batch_index, eval_act_index] = reward + self.gamma * np.max(q_next, axis=1)        _, cost = self.sess.run([self.opt, self.loss],                                     feed_dict={self.state: batch_memory[:, 0:self.n_features],                                         self.q_target: q_target                                     })        self.cost.append(cost)        self.epsilon = self.epsilon + self.epsilon_increment if self.epsilon < self.epsilon_max else self.epsilon_max        self.learn_step_counter += 1    def showCost(self):        import matplotlib.pyplot as plt        plt.plot(np.arange(len(self.cost)), self.cost)        plt.ylabel("Cost")        plt.xlabel("training steps")        plt.show()

二 Policy-Based

直接輸出動作,可以在連續區間內選擇動作;而Value-Based要在連續區間中,對無數個動作計算價值選擇行為是不可行的。

誤差如何反向傳遞呢?沒有誤差,它的目的是選的動作在下次更有可能被選擇,但怎么知道動作的好壞呢,用reward,reward小,動作在下次被選擇的可能性增加的少。

Actor-Critic

Actor:Policy-Based,輸入State,預測輸出采取各種Action的概率。 Critic;Value-Based,輸入State,預測輸出當前State的Value,并與下一狀態的next_stateValue求TD_error 在Actor-Critic中,Actor可以每一步都更新學習(而單純的Policy-Based方法要在回合結束后才能更新)

但也帶來了問題:由于兩個網絡在連續狀態中更新參數,每次跟新前后的參數具有相關性,導致網絡只能片面的看待問題,甚至學不到有效的參數,不能收斂。

TRPO

PPO

Deep Deterministic Policy Gradient(DDPG)

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
亚洲免费视频一区二区| 欧美日韩大片| 国产午夜精品在线| 欧美精品亚洲精品| 久久久国产成人精品| 亚洲免费人成在线视频观看| 日韩视频一区二区三区在线播放免费观看 | 亚洲小说欧美另类社区| 亚洲国产另类久久精品| 加勒比av一区二区| 精品成人免费| 精品动漫3d一区二区三区免费版| 国产日韩在线看| 国内精品久久久| 国内精品视频666| 国产婷婷色一区二区三区在线 | 亚洲嫩草精品久久| 亚洲线精品一区二区三区八戒| 亚洲毛片在线看| 亚洲蜜桃精久久久久久久| 亚洲黄色片网站| 亚洲人成在线影院| 一本色道久久| 在线亚洲精品| 欧美一区二区视频97| 久久精彩免费视频| 美女精品在线观看| 欧美激情导航| 国产精品成人免费视频| 国产日韩综合| 亚洲国产欧美日韩精品| 亚洲网站视频福利| 欧美一站二站| 欧美国产日韩一区| 国产精品乱子乱xxxx| 国内外成人在线视频| 1769国内精品视频在线播放| 日韩亚洲精品电影| 欧美一级视频精品观看| 久久综合九九| 欧美日韩综合视频网址| 国产精品拍天天在线| 激情成人av在线| 中日韩午夜理伦电影免费| 欧美一区二区成人6969| 玖玖玖国产精品| 欧美视频在线观看免费| 国产偷国产偷精品高清尤物| 亚洲精品久久久久久久久| 亚洲一区二区三区免费视频| 久久九九精品| 国产精品高潮在线| 精品成人一区二区三区| 亚洲一区二区久久| 久久影院亚洲| 国产精品久久久久毛片软件| 韩国av一区二区三区在线观看 | 老司机一区二区三区| 欧美日韩国产美女| 久久精品国产在热久久| 一区二区三区www| 欧美主播一区二区三区| 欧美精品亚洲精品| 合欧美一区二区三区| 一区二区三区四区五区精品| 欧美呦呦网站| 欧美天天视频| 亚洲国产精品t66y| 久久福利精品| 国产精品国产亚洲精品看不卡15| 伊人天天综合| 欧美一区二区精品| 欧美日韩一区二区三区免费| 亚洲福利国产| 久久久综合香蕉尹人综合网| 国产精品夜夜嗨| 一区二区三区成人| 欧美激情1区2区| 亚洲第一色在线| 欧美一区日本一区韩国一区| 欧美视频观看一区| 亚洲精品久久久蜜桃| 看欧美日韩国产| 好吊视频一区二区三区四区| 亚洲影音先锋| 国产精品激情偷乱一区二区∴| 91久久亚洲| 欧美成熟视频| 亚洲第一色在线| 欧美电影美腿模特1979在线看| 精品成人乱色一区二区| 久久久精品日韩欧美| 国产日韩欧美一区二区三区四区| 亚洲在线国产日韩欧美| 欧美性大战久久久久| 亚洲午夜精品在线| 国产精品美女一区二区| 午夜精品三级视频福利| 国产精品视频自拍| 欧美影院精品一区| 国内精品一区二区三区| 久久成人一区二区| 亚洲国产视频a| 欧美日本精品| 亚洲深夜福利视频| 国产精品―色哟哟| 久久精品视频亚洲| 亚洲国产精品久久久久久女王| 久久这里有精品视频| 亚洲激情视频在线播放| 欧美激情精品久久久| 一本色道久久综合亚洲精品婷婷 | 亚洲欧美综合v| 国产精品久久毛片a| 先锋影院在线亚洲| 韩国美女久久| 欧美成人午夜视频| 99re8这里有精品热视频免费 | 国产日韩av高清| 久久久999国产| 亚洲国产欧美日韩精品| 欧美日韩精品一本二本三本| 这里只有精品电影| 国产一区二区按摩在线观看| 久久免费高清视频| av成人免费在线| 国产精品一区二区三区观看| 久久一本综合频道| 一区二区欧美亚洲| 国产日韩亚洲欧美| 欧美激情女人20p| 亚洲一区二区黄| 在线观看视频日韩| 国产精品久久久久久久久久久久久久 | 亚洲欧美日本日韩| 国产自产v一区二区三区c| 欧美成人首页| 香蕉乱码成人久久天堂爱免费 | 99视频日韩| 国产日韩av高清| 欧美国产日本在线| 欧美一级日韩一级| 亚洲精选国产| 黑人操亚洲美女惩罚| 欧美日韩免费在线| 快射av在线播放一区| 亚洲午夜小视频| 亚洲国产精品国自产拍av秋霞| 国产精品va| 欧美激情中文不卡| 久久国产精品99久久久久久老狼| 日韩视频免费观看| 国产综合av| 国产精品美女主播在线观看纯欲| 老牛影视一区二区三区| 午夜精品久久久99热福利| 亚洲日韩视频| 影音先锋久久精品| 国产手机视频精品| 国产精品爱久久久久久久| 欧美二区在线播放| 久久综合中文| 久久九九免费| 欧美一区二区三区男人的天堂| 99精品99久久久久久宅男| 伊大人香蕉综合8在线视| 国产精品一二三四| 老牛嫩草一区二区三区日本| 国产亚洲成av人在线观看导航 | 久久精品国产一区二区电影| 一区二区免费在线播放| 亚洲肉体裸体xxxx137| 黑丝一区二区三区| 国产视频欧美视频| 国产欧美日韩一级| 国产精品呻吟| 国产精品无码永久免费888| 欧美日韩一区在线| 欧美精品日韩精品| 欧美精品在线看| 欧美激情视频在线播放| 欧美成人免费观看| 欧美成人性生活| 欧美成人黄色小视频| 欧美精品成人一区二区在线观看| 美女任你摸久久| 欧美二区乱c少妇| 久久综合网络一区二区| 猛男gaygay欧美视频| 久久综合伊人77777蜜臀| 久热精品视频| 欧美精品videossex性护士| 欧美极品一区| 欧美电影资源| 欧美日韩日韩| 国产精品日本欧美一区二区三区| 国产欧美一区二区三区视频| 国产香蕉97碰碰久久人人| 国模套图日韩精品一区二区| 亚洲国产二区|