个性化阅读
专注于IT技术分析

人工智能:用Python进行Q学习示例

先决条件:强化学习

强化学习简要地讲, 是学习过程的一种范式, 其中学习代理通过在环境中不断交互来学习超时地在特定环境中表现最佳。代理在学习过程中会经历所处环境中的各种不同情况。这些情况称为状态。处于该状态的代理可以从一组允许的操作中进行选择, 这些操作可以获取不同的奖励(或罚款)。学习代理人加班学习使这些奖励最大化, 以便在其处于任何给定状态时表现最佳。

Q学习是强化学习的基本形式, 它使用Q值(也称为动作值)来迭代地改善学习代理的行为。

Q值或操作值:

为状态和动作定义了Q值。

Q(S,A)

估计采取行动有多好

一种

在该状态

小号

。这个估计

Q(S,A)

将使用

TD-更新规则

我们将在接下来的部分中看到。

奖励和情节:代理在其整个生命周期中都从开始状态开始, 并根据其选择的动作以及代理所交互的环境从当前状态到下一个状态进行多次转换。在过渡过程中, 一个州的主体采取行动, 从环境中观察到回报, 然后过渡到另一个州。如果代理在任何时间点以一种终止状态结束, 则意味着无法进行进一步转换。据说这是一个情节的完成。

时差或TD更新:

时间差异或TD更新规则可以表示如下:

用Python进行Q学习1

代理与环境交互的每个时间步骤都会应用此更新规则以估计Q值。所用术语解释如下。 :

小号

:代理的当前状态。

一种

:当前操作已根据某些政策选择。

S'

:下一个州代表代理的结局。

A'

:要使用当前的Q值估算值来选择下一个最佳动作, 即, 在下一个状态下选择具有最大Q值的动作。

[R

:从环境中观察到的当前奖励以响应当前操作。

$ \ gamma $

(> 0和<= 1):未来奖励的折现因子。未来的重制不如当前的奖励有价值, 因此必须予以打折。由于Q值是对某个州的预期回报的估计, 因此折现规则也适用于此。

$ \ alpha $

:更新Q(S, A)估算值所采用的步长。

选择要使用的操作

-贪婪政策:

-greedy policy of是使用当前Q值估计来选择动作的非常简单的策略。它如下:

很有可能

(1-$ \ epsilon $)

选择具有最高Q值的动作。

很有可能

($ \ epsilon $)

随机选择任何动作。

现在, 掌握所有必需的理论, 让我们举一个例子。我们将使用OpenAI的体育馆环境来训练我们的Q学习模型。

安装命令健身房–

pip install gym

在开始示例之前, 你将需要一些帮助程序代码以可视化算法的工作。在工作目录中将需要下载两个帮助文件。一个可以找到文件这里.

第1步 :导入所需的库。

import gym
import itertools
import matplotlib
import matplotlib.style
import numpy as np
import pandas as pd
import sys
  
  
from collections import defaultdict
from windy_gridworld import WindyGridworldEnv
import plotting
  
matplotlib.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_actions
                  
         best_action = np.argmax(Q[state])
         Action_probabilities[best_action] + = ( 1.0 - epsilon)
         return Action_probabilities
   
     return 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:
                 break
                   
             state = next_state
       
     return Q, stats

步骤#5:

训练模型。

Q, stats = qLearning(env, 1000 )

步骤#6:

绘制重要统计数据。

plotting.plot_episode_stats(stats)
用Python进行Q学习2
用Python进行Q学习3
用Python进行Q学习4

结论:

我们在情节奖励情节中看到情节奖励

递加

随着时间的推移, 最终

平稳

每个情节具有较高的奖励值, 这表示代理已学会通过在每个状态下表现最佳来最大化其在情节中获得的总奖励。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


赞(0) 打赏
未经允许不得转载:srcmini » 人工智能:用Python进行Q学习示例
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏