当前位置:网站首页>Renforcer les dossiers de base de l'apprentissage
Renforcer les dossiers de base de l'apprentissage
2022-07-06 13:52:00 【J'aime le petit blanc fortifié de curry.】
Dans l'apprentissage intensifQ-learningEtSarasComparaison
Multi - agent Enhancement Learning LITTLE WHITE one,J'ai récemment appris à renforcer les bases de l'apprentissage,Notez ici,Au cas où.
Un.、Q-learning
Q-learingL'algorithme d'apprentissage intensif le plus élémentaire,AdoptionQÉtat de stockage du tableau-Valeur de l'action,C'est - à - dire:Q(s,a),Peut être utilisé pour les problèmes avec un espace d'état plus petit,Quand la dimension spatiale de l'état est grande,Besoin de coordination avec le réseau neuronal,S'étend àDQNAlgorithmes,Résolution des problèmes.
- Value-based
- Off-Policy
J'ai beaucoup lu surOn-PolicyEtOff-PolicyBlog de,Je n'ai jamais vraiment compris la différence,C'est un peu confus,J'ai lu la réponse d'un blogueur l'autre jour,Pour avoir une meilleure compréhension,Lien ci - joint.
Liens: on-policyEtoff-policyQuelle est la différence??
QuandQ-learningLors de la mise à jour,Bien que les données utilisées soient actuellespolicyProduit,Mais la politique mise à jour n'est pas celle qui produit ces données(Notez la mise à jour demax),C'est compréhensible ici:Ici.maxL'opération est de sélectionner pour obtenir un plus grandQAction de la valeur,Mise à jourQTableau, Mais il n'est pas certain que le vrai tour prenne des changements ,Alors c'estOff-PolicyDe. - Pseudo - Code
- Réalisation
L'environnement utilisé ici est le jeu de chasse au trésor dans le tutoriel du professeur mofan , Tenue à jour par liste ,—#-T, La dernière position TC'est un trésor.,# Représente la position actuelle du joueur , Allez à l'extrême droite ,Trouver un trésor,Fin du jeu.
L'implémentation du Code fait référence à un blogueur , Aucun lien trouvé .....
import numpy as np
import pandas as pd
import time
N_STATES = 6 # 6Statut,Longueur du tableau unidimensionnel
ACTIONS = [-1, 1] # Deux états,-1:left, 1:right
epsilon = 0.9 # greedy
alpha = 0.1 # Taux d'apprentissage
gamma = 0.9 # Valeur décroissante de la récompense
max_episodes = 10 # Nombre maximum de Tours
fresh_time = 0.3 # Intervalle de déplacement
# q_table
q_table = pd.DataFrame(np.zeros((N_STATES, len(ACTIONS))), columns=ACTIONS)
# choose action: 1. Explorer au hasard et explorer des endroits qui n'ont pas été explorés ,Sinon, sélectionnezrewardLe plus grand mouvement
def choose_action(state, table):
state_actions = table.iloc[state, :]
if np.random.uniform() > epsilon or state_actions.all() == 0:
action = np.random.choice(ACTIONS)
else:
action = state_actions.argmax()
return action
def get_env_feedback(state, action):
#Nouveau statut = État actuel + État du Mouvement
new_state = state + action
reward = 0
# Déplacer à droite plus 0.5
#À droite., Plus près du Trésor ,Obtenir+0.5Récompenses
if action > 0:
reward += 0.5
#À gauche., Loin du Trésor ,Obtenir-0.5Récompenses
if action < 0:
reward -= 0.5
# La prochaine étape vers le Trésor , Donner la plus haute récompense +1
if new_state == N_STATES - 1:
reward += 1
# Si vous marchez à gauche jusqu'à la fin , Encore à gauche , Obtenir une récompense négative minimale -1
#En même temps, Pour définir un nouvel état encore ici ,Sinon, une erreur sera signalée
if new_state < 0:
new_state = 0
reward -= 1
return new_state, reward
def update_env(state, epoch, step):
env_list = ['-'] * (N_STATES - 1) + ['T']
if state == N_STATES - 1:
# Atteindre la destination
print("")
print("epoch=" + str(epoch) + ", step=" + str(step), end='')
time.sleep(2)
else:
env_list[state] = '#'
print('\r' + ''.join(env_list), end='')
time.sleep(fresh_time)
def q_learning():
for epoch in range(max_episodes):
step = 0 # Déplacer les étapes
state = 0 # État initial
update_env(state, epoch, step)
while state != N_STATES - 1:
cur_action = choose_action(state, q_table)
new_state, reward = get_env_feedback(state, cur_action)
q_pred = q_table.loc[state, cur_action]
if new_state != N_STATES - 1:
q_target = reward + gamma * q_table.loc[new_state, :].max()
else:
q_target = reward
q_table.loc[state, cur_action] += alpha * (q_target - q_pred)
state = new_state
update_env(state, epoch, step)
step += 1
return q_table
q_learning()
2.、Saras
Saras C'est aussi l'algorithme le plus fondamental dans l'apprentissage intensif ,Mais aussi avecQStockage des tablesQ(s,a), C'est pour ça que Saras,C'est à cause d'untransitionContient(s,a,r,a,s)Quintuple,C'est - à - dire:Saras.
- Value-based
- On-Policy
Comparer iciQ-learning, On saura que , Les données utilisées ici sont actuelles policyProduit,Et mise à jourQQuand ça en vaut la peine., Est basé sur de nouvelles actions et de nouveaux états QValeur, De nouvelles actions seront exécutées ( Notez qu'il n'y a pas de max),Alors c'estOn-Policy. - Pseudo - Code
- Réalisation
Voir iciQ-learning Avec des modifications simples , C'est basé sur le nouvel état , Ré - sélectionner une action , Et pour le faire ,Mise à jourQQuand ça en vaut la peine., Directement basé sur l'état correspondant à l'action QMise à jour de la valeur.
import numpy as np
import pandas as pd
import time
N_STATES = 6 # 6Statut,Longueur du tableau unidimensionnel
ACTIONS = [-1, 1] # Deux états,-1:left, 1:right
epsilon = 0.9 # greedy
alpha = 0.1 # Taux d'apprentissage
gamma = 0.9 # Valeur décroissante de la récompense
max_episodes = 10 # Nombre maximum de Tours
fresh_time = 0.3 # Intervalle de déplacement
# q_table
#Générer(N_STATES,len(ACTIONS)))DeQ Valeur vide Tableau
q_table = pd.DataFrame(np.zeros((N_STATES, len(ACTIONS))), columns=ACTIONS)
# choose action:
#0.9 Probabilité de cupidité ,0.1 Action aléatoire probabiliste , Maintenir une certaine exploration
def choose_action(state, table):
state_actions = table.iloc[state, :]
if np.random.uniform() > epsilon or state_actions.all() == 0:
action = np.random.choice(ACTIONS)
else:
action = state_actions.argmax()
return action
def get_env_feedback(state, action):
#Nouveau statut = État actuel + État du Mouvement
new_state = state + action
reward = 0
# Déplacer à droite plus 0.5
#À droite., Plus près du Trésor ,Obtenir+0.5Récompenses
if action > 0:
reward += 0.5
#À gauche., Loin du Trésor ,Obtenir-0.5Récompenses
if action < 0:
reward -= 0.5
# La prochaine étape vers le Trésor , Donner la plus haute récompense +1
if new_state == N_STATES - 1:
reward += 1
# Si vous marchez à gauche jusqu'à la fin , Encore à gauche , Obtenir une récompense négative minimale -1
#En même temps, Pour définir un nouvel état encore ici ,Sinon, une erreur sera signalée
if new_state < 0:
new_state = 0
reward -= 1
return new_state, reward
# Maintenir l'environnement
def update_env(state, epoch, step):
env_list = ['-'] * (N_STATES - 1) + ['T']
if state == N_STATES - 1:
# Atteindre la destination
print("")
print("epoch=" + str(epoch) + ", step=" + str(step), end='')
time.sleep(2)
else:
env_list[state] = '#'
print('\r' + ''.join(env_list), end='')
time.sleep(fresh_time)
#Mise à jourQTableau
def Saras():
for epoch in range(max_episodes):
step = 0 # Déplacer les étapes
state = 0 # État initial
update_env(state, epoch, step)
cur_action = choose_action(state, q_table)
while state != N_STATES - 1:
new_state, reward = get_env_feedback(state, cur_action)
new_action = choose_action(new_state,q_table)
q_pred = q_table.loc[state, cur_action]
if new_state != N_STATES - 1:
q_target = reward + gamma * q_table.loc[new_state, new_action]
else:
q_target = reward
q_table.loc[state, cur_action] += alpha * (q_target - q_pred)
state,cur_action = new_state,new_action
update_env(state, epoch, step)
step += 1
return q_table
Saras()
Bloguer pour la première fois, Peut comprendre qu'il y a un problème , J'espère corriger l'erreur .
边栏推荐
- Reinforcement learning series (I): basic principles and concepts
- The latest tank battle 2022 - full development notes-3
- Implementation principle of automatic capacity expansion mechanism of ArrayList
- 5月14日杂谈
- MySQL事务及实现原理全面总结,再也不用担心面试
- Inaki Ading
- [the Nine Yang Manual] 2021 Fudan University Applied Statistics real problem + analysis
- 【九阳神功】2021复旦大学应用统计真题+解析
- Relationship between hashcode() and equals()
- C语言入门指南
猜你喜欢
[面试时]——我如何讲清楚TCP实现可靠传输的机制
Custom RPC project - frequently asked questions and explanations (Registration Center)
8. C language - bit operator and displacement operator
The latest tank battle 2022 full development notes-1
.Xmind文件如何上传金山文档共享在线编辑?
仿牛客技术博客项目常见问题及解答(二)
MySQL锁总结(全面简洁 + 图文详解)
1. C language matrix addition and subtraction method
canvas基础2 - arc - 画弧线
. Net6: develop modern 3D industrial software based on WPF (2)
随机推荐
(原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间。显示格式为“时时:分分:秒秒”。设有 4 个功能键k1~k4,功能如下:(1)k1——进入时间修改。
[modern Chinese history] Chapter V test
Implementation principle of automatic capacity expansion mechanism of ArrayList
【九阳神功】2020复旦大学应用统计真题+解析
String abc = new String(“abc“),到底创建了几个对象
About the parental delegation mechanism and the process of class loading
Caching mechanism of leveldb
[the Nine Yang Manual] 2016 Fudan University Applied Statistics real problem + analysis
重载和重写的区别
Miscellaneous talk on May 14
Using spacedesk to realize any device in the LAN as a computer expansion screen
It's never too late to start. The tramp transformation programmer has an annual salary of more than 700000 yuan
7-3 构造散列表(PTA程序设计)
受检异常和非受检异常的区别和理解
【手撕代码】单例模式及生产者/消费者模式
Using qcommonstyle to draw custom form parts
Zatan 0516
Have you encountered ABA problems? Let's talk about the following in detail, how to avoid ABA problems
Inaki Ading
Redis实现分布式锁原理详解