使用强化学习选择最接近原点的点

我正在尝试使用强化学习从一组给定的点中反复选择最接近原点的点,直到达到一个复杂的(且不相关的)结束条件。(这是我主要问题的简化版。)

一个包含可能点的二维数组被传递给强化学习算法,该算法会选择它认为最理想的点。

A [1,  10]B [100, 0]C [30, 30]D [5,   7]E [20, 50]

在这种情况下,D将是真正的最佳选择。(算法理想情况下应输出3,范围从04。)

然而,每当我训练算法时,它似乎并没有学会“概念”,而是仅仅学会了选择,比如说,C通常是最好的选择,所以它总是选择那个。

import numpy as npimport rl.core as krlclass FindOriginEnv(krl.Env):    def observe(self):        return np.array([            [np.random.randint(100), np.random.randint(100)] for _ in range(5)        ])    def step(self, action):        observation = self.observe()        done = np.random.rand() < 0.01  # eventually        reward = 1 if done else 0        return observation, reward, done, {}    # ...

我应该如何修改我的算法,使其真正学会它试图实现的目标?

  • 观察形状?
  • 奖励函数?
  • 动作选择?

欢迎提供Keras代码,但不是必需的;纯粹的算法解释也将非常有帮助。


回答:

根据你的描述勾勒出MDP,有几个问题需要注意:

  • 你的观察函数似乎返回了5个点,这意味着一个状态可以是[0,99]范围内10个整数的任何配置。这将有100^10种可能的状态!你的状态空间需要小得多。目前,observe似乎是在生成可能的动作,而不是状态观察。

  • 你建议从[0,4]中选择动作,其中每个动作本质上是指向可供代理选择的点数组的索引。这种动作空间的定义不足以让代理区分你希望它做到的(较小幅度的点更好),因为你仅根据点的索引来行动!如果你想稍微调整一下这个公式以使其工作,你可以定义一个动作为选择一个二维点,每个维度在[0,99]范围内。这意味着你将有100^2种可能的动作,但为了保持多项选择的特性,你将限制代理在给定步骤中从其当前状态的子集中选择(5个可能的动作)。

  • 最后,奖励函数在终止前给出零奖励,这意味着你允许大量可能的最优策略。本质上,任何终止的策略,无论这一集花了多长时间,都是最优的!如果你想鼓励快速终止的策略,你应该在每个步骤给代理一个小的负面奖励。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注