
本文共 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 gymenv = 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 = 2new_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_SIZEprint(discrete_os_win_size) # 输出为[0.09, 0.007]
这将创建一个大小为20x20的Q表,适用于每个观测空间维度。我们可以使用numpy来初始化Q表:
import numpy as npq_table = np.random.uniform(low=-2, high=0, size=(DISCRETE_OS_SIZE + [env.action_space.n]))
这将创建一个20x20x3的Q表,每个状态和动作组合都有一个随机初始化的Q值。负值起始设置有意义,因为目标是在复杂度较高的环境中实现长时间的最优策略。
最后,Q表是我们的主card。我们将学习如何从中选择最优的行动。为了提高效率,我们需要在适当的时候选择探索或利用。
发表评论
最新留言
关于作者
