强化学习入门系列1
发布日期:2021-05-20 09:15:19 浏览次数:23 分类:精选文章

本文共 1480 字,大约阅读时间需要 4 分钟。

写在前面

Q-Learning介绍和Q表

欢迎来到强化学习教程。在这一部分,我们将关注Q学习。Q-Learning是一种无模型的机器学习形式,在某些意义上,人工智能“代理”不需要知道或拥有它所处环境的模型。相同的算法可以在各种环境中使用。

对于给定的环境,我们将其分解为“状态”和“操作”。状态是环境中我们可观察到的信息和采样结果,而操作是代理根据观察做出的选择。在本教程的其余部分,我们将使用具体的环境例子来展示Q-Learning是如何工作的。

虽然我们的代理实际上不需要了解环境的具体模型,但在学习Q-Learning的过程中,了解其工作原理对您来说是有帮助的。我们将与OpenAI的gym合作,特别是在“MountainCar-v0”环境中。通过pip install gym,您可以轻松获取这个环境。

让我们了解这个环境。在大多数基本的强化学习环境中,工作流程是非常相似的。要初始化环境,您可以执行gym.make("MountainCar-v0"),然后重置环境状态,开始循环执行env.step(ACTION)。让我们看看这个环境:

import gym
env = gym.make("MountainCar-v0")
print(env.action_space.n) # 输出应该是3,表示有3个可选动作

对于不同的环境,可以查询它们支持的操作数。在本例中,我们有三个动作:0表示向左推,1表示不动,2表示向右推。这些信息在Q-Learning中并不重要,因为AI模型不需要知道这些具体含义。最终的目标是帮助它选择合适的行动并学习合适的状态奖励分配。

接下来,我们观察状态:

state = env.reset()
print(state)

这将返回一个数组,例如[-0.27508804, -0.00268013]。在每一步,我们执行一个动作并更新状态和奖励:

action = 2
new_state, reward, done, _ = env.step(action)
print(reward, new_state)

在我们的例子中,奖励一直是-1,这意味着每次行动都带有负面惩罚。状态信息显示出车辆的位置和速度。我们注意到速度是负的,表示车辆在向左移动。

这些观察值是我们了解环境的一种方式。为了高效地应用Q-Learning,我们需要将这些连续的观察值转换为离散的值。我们采用以下方法:

DISCRETE_OS_SIZE = [20, 20]
discrete_os_win_size = (env.observation_space.high - env.observation_space.low) / DISCRETE_OS_SIZE
print(discrete_os_win_size) # 输出为[0.09, 0.007]

这将创建一个大小为20x20的Q表,适用于每个观测空间维度。我们可以使用numpy来初始化Q表:

import numpy as np
q_table = np.random.uniform(low=-2, high=0, size=(DISCRETE_OS_SIZE + [env.action_space.n]))

这将创建一个20x20x3的Q表,每个状态和动作组合都有一个随机初始化的Q值。负值起始设置有意义,因为目标是在复杂度较高的环境中实现长时间的最优策略。

最后,Q表是我们的主card。我们将学习如何从中选择最优的行动。为了提高效率,我们需要在适当的时候选择探索或利用。

上一篇:强化学习入门系列2
下一篇:基于carla和python的自动驾驶仿真系列4

发表评论

最新留言

很好
[***.229.124.182]2025年05月05日 11时30分05秒