如何在 Java 中制作强化学习代理?

How do I make a reinforcement learning agent in Java?

我有一个挑战,我的老师让我在 18x24 的网格上击败他的士兵军队,在棋盘上放置随机障碍物。游戏是回合制的,我有一支由 50 名士兵组成的军队,每个士兵都需要在他们的回合移动或攻击。

我的问题是我只能创建 class 的士兵在这种环境中战斗。目前,我有一种方法可以通过查看每个团队还剩下多少士兵来评估棋盘位置,并执行 yourTeam - enemyTeam 以获得当前分数,并且我有一种方法可以为士兵产生合法的移动。

我想知道如何使用我可以访问的内容在 Java 中创建强化学习代理。如果您知道执行此操作的任何方法或任何可能有帮助的资源,那就太好了。感谢您的帮助!

Java 不是进行大量数学计算的好语言(这是您需要为 RL 做的)。您可以尝试实施 Q-Learning、价值迭代或策略迭代算法,但我会避免在此处使用神经 networks/modern 深度 RL 方法进行任何操作,因为您的工作量会急剧增加。

关于您的问题,如果您要实施一种老式算法。想想你的状态和行动space。我非常担心你的行动规模 space,即使每个士兵的移动次数很少(比如说 3 - 攻击,向上移动,向下移动),50 名士兵的行动 space 将是非常大 - 50^3,即使这么多也很难处理,更多(甚至 4 或 5)会让你深入学习 RL 中的一些复杂主题。

其他问题是 - 定义良好的奖励信号,有效地 运行(可能数百万)模拟游戏。

简短的回答是,这不是一件可以掉以轻心的事情,即使对于在该领域有经验的人来说,这也是具有挑战性和耗时的,并且使用 Java 是一个禁忌(Python 更好)。鉴于您可能很快就会找到一个好的解决方案,我建议您尝试一种不同的方法——也许基于计划,或者硬编码一个合理的策略。

如果您仍想继续阅读该主题,这里有一些很好的资源:

  • 强化学习简介(Sutton & Barto) - 任何版本都可以
  • 人工智能:现代方法(Russel 和 Norvig)中的部分章节

希望这对您有所帮助,抱歉,这可能不是您希望得到的答案!