先决条件:强化学习
强化学习简要地讲, 是学习过程的一种范式, 其中学习代理通过在环境中不断交互来学习超时地在特定环境中表现最佳。代理在学习过程中会经历所处环境中的各种不同情况。这些情况称为状态。处于该状态的代理可以从一组允许的操作中进行选择, 这些操作可以获取不同的奖励(或罚款)。学习代理人加班学习使这些奖励最大化, 以便在其处于任何给定状态时表现最佳。
Q学习是强化学习的基本形式, 它使用Q值(也称为动作值)来迭代地改善学习代理的行为。
Q值或操作值:
为状态和动作定义了Q值。
文章图片
估计采取行动有多好
文章图片
在该状态
文章图片
。这个估计
文章图片
将使用
TD-更新规则
我们将在接下来的部分中看到。
奖励和情节:代理在其整个生命周期中都从开始状态开始, 并根据其选择的动作以及代理所交互的环境从当前状态到下一个状态进行多次转换。在过渡过程中, 一个州的主体采取行动, 从环境中观察到回报, 然后过渡到另一个州。如果代理在任何时间点以一种终止状态结束, 则意味着无法进行进一步转换。据说这是一个情节的完成。
时差或TD更新:
时间差异或TD更新规则可以表示如下:
文章图片
代理与环境交互的每个时间步骤都会应用此更新规则以估计Q值。所用术语解释如下。 :
文章图片
:代理的当前状态。
文章图片
:当前操作已根据某些政策选择。
文章图片
:下一个州代表代理的结局。
文章图片
:要使用当前的Q值估算值来选择下一个最佳动作, 即, 在下一个状态下选择具有最大Q值的动作。
文章图片
:从环境中观察到的当前奖励以响应当前操作。
文章图片
(> 0和< = 1):未来奖励的折现因子。未来的重制不如当前的奖励有价值, 因此必须予以打折。由于Q值是对某个州的预期回报的估计, 因此折现规则也适用于此。
文章图片
:更新Q(S, A)估算值所采用的步长。
选择要使用的操作
-贪婪政策:
-greedy policy of是使用当前Q值估计来选择动作的非常简单的策略。它如下:
很有可能
文章图片
选择具有最高Q值的动作。
很有可能
文章图片
随机选择任何动作。
现在, 掌握所有必需的理论, 让我们举一个例子。我们将使用OpenAI的体育馆环境来训练我们的Q学习模型。
安装命令健身房–
pip install gym
在开始示例之前, 你将需要一些帮助程序代码以可视化算法的工作。在工作目录中将需要下载两个帮助文件。一个可以找到文件这里.
第1步 :导入所需的库。
import gym
import itertools
import matplotlib
import matplotlib.style
import numpy as np
import pandas as pd
import sysfrom collections import defaultdict
from windy_gridworld import WindyGridworldEnv
import plottingmatplotlib.style.use( 'ggplot' )
第2步 :
营造体育馆环境。
env = WindyGridworldEnv()
步骤#3:
使
-贪婪的政策。
def createEpsilonGreedyPolicy(Q, epsilon, num_actions):
"""
Creates an epsilon-greedy policy based
on a given Q-function and epsilon.Returns a function that takes the state
as an input and returns the probabilities
for each action in the form of a numpy array
of length of the action space(set of possible actions).
"""
def policyFunction(state):Action_probabilities = np.ones(num_actions, dtype = float ) * epsilon /num_actionsbest_action = np.argmax(Q[state])
Action_probabilities[best_action] + = ( 1.0 - epsilon)
return Action_probabilitiesreturn policyFunction
步骤4 :
建立Q学习模型。
def qLearning(env, num_episodes, discount_factor = 1.0 , alpha = 0.6 , epsilon = 0.1 ):
"""
Q-Learning algorithm: Off-policy TD control.
Finds the optimal greedy policy while improving
following an epsilon-greedy policy"""# Action value function
# A nested dictionary that maps
# state ->
(action ->
action-value).
Q = defaultdict( lambda : np.zeros(env.action_space.n))# Keeps track of useful statistics
stats = plotting.EpisodeStats(
episode_lengths = np.zeros(num_episodes), episode_rewards = np.zeros(num_episodes))# Create an epsilon greedy policy function
# appropriately for environment action space
policy = createEpsilonGreedyPolicy(Q, epsilon, env.action_space.n)# For every episode
for ith_episode in range (num_episodes):# Reset the environment and pick the first action
state = env.reset()for t in itertools.count():# get probabilities of all actions from current state
action_probabilities = policy(state)# choose action according to
# the probability distribution
action = np.random.choice(np.arange(
len (action_probabilities)), p = action_probabilities)# take action and get reward, transit to next state
next_state, reward, done, _ = env.step(action)# Update statistics
stats.episode_rewards[ith_episode] + = reward
stats.episode_lengths[ith_episode] = t# TD Update
best_next_action = np.argmax(Q[next_state])
td_target = reward + discount_factor * Q[next_state][best_next_action]
td_delta = td_target - Q[state][action]
Q[state][action] + = alpha * td_delta# done is True if episode terminated
if done:
breakstate = next_statereturn Q, stats
步骤#5:
训练模型。
Q, stats = qLearning(env, 1000 )
步骤#6:
绘制重要统计数据。
plotting.plot_episode_stats(stats)
文章图片
文章图片
文章图片
结论:
我们在情节奖励情节中看到情节奖励
递加
随着时间的推移, 最终
平稳
每个情节具有较高的奖励值, 这表示代理已学会通过在每个状态下表现最佳来最大化其在情节中获得的总奖励。
【人工智能(用Python进行Q学习示例)】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Python使用Pandas和XlsxWriter |S–3
- 算法设计(加权前缀搜索介绍和实现)
- Linux/Unix中的Wget命令用法介绍和示例
- 什么是WannaCry( WannaCry勒索软件如何工作?)
- Python每日一练|Python每日一练——第6天(冒泡排序算法【动图展示】)
- Python|Python操作excel(xlrd和xlwt)
- python|【自动测试不求人】python自动化测试对excel操作xlrd和xlwt库应用
- python|python中使用xlrd、xlwt操作excel表格详解
- Python|python操作excel(xlrd、xlwt、xlwings)