我试图使用强化学习来反复选择一组给定点的原点的最近点,直到达到复杂(和不相关)的结束条件。 (这是我主要问题的简化。)
将包含可能点的二维数组传递给强化学习算法,该算法可以选择它认为最理想的点。
A [1, 10]
B [100, 0]
C [30, 30]
D [5, 7]
E [20, 50]
在这种情况下,D
将是真正的最佳选择。 (理想情况下,算法应从3
到0
范围内输出4
。)
然而,每当我训练算法时,它似乎都不知道“概念”是什么,而只是选择,比如C
通常是最好的选择,所以它应该总是选择它。
import numpy as np
import rl.core as krl
class 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代码将不胜感激,但不是必需的;纯粹的算法解释也非常有用。
答案 0 :(得分:2)
从描述中勾画出MDP,有一些问题:
您的观察函数似乎返回5个点,因此这意味着状态可以是[0,99]中10个整数的任何配置。这是100 ^ 10个可能的状态!你的州空间需要小得多。如上所述,observe
似乎正在产生可能的行动,而不是状态观察。
您建议您从[0,4]中选择操作,其中每个操作基本上都是代理可用点数的索引。动作空间的这个定义并没有给代理提供足够的信息来区分你说你喜欢的东西(较小的分数点更好),因为你只根据分数的指数行事!如果您想稍微调整配方以使其工作,您可以定义一个动作来选择每个尺寸为[0,99]的2D点。这意味着您将有100 ^ 2个可能的操作,但为了维护多选方案,您可以限制代理根据其当前状态在给定步骤(5个可能的操作)中选择子集。
最后,奖励函数在终止前给予零奖励意味着您允许大量可能的最优策略。从本质上讲,任何终止的政策,无论剧集花了多长时间,都是最佳的!如果您希望鼓励快速终止的政策,您应该在每一步都给予代理商一个小的负面奖励。