Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java制作强化学习代理?_Java_Reinforcement Learning_Multi Agent - Fatal编程技术网

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

如何用Java制作强化学习代理?,java,reinforcement-learning,multi-agent,Java,Reinforcement Learning,Multi Agent,我有一个挑战,我的老师给了我一个挑战,在18x24的网格上击败他的士兵军队,在棋盘上放置随机障碍物。游戏是回合制的,我有一支50人的军队,每个人都需要在回合中移动或攻击 我的问题是,我只能创建一个在这种环境下作战的士兵等级。目前,我有一种方法,通过查看每个团队剩下多少士兵来评估董事会的位置,并且你的团队-我的团队是否能够获得当前的分数,我有一种方法可以为士兵提供合法的移动 我想知道我将如何用Java创建一个强化学习代理。如果你知道做这件事的任何方法或任何可能有帮助的资源,那就太好了。谢谢你的帮助

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

我的问题是,我只能创建一个在这种环境下作战的士兵等级。目前,我有一种方法,通过查看每个团队剩下多少士兵来评估董事会的位置,并且你的团队-我的团队是否能够获得当前的分数,我有一种方法可以为士兵提供合法的移动


我想知道我将如何用Java创建一个强化学习代理。如果你知道做这件事的任何方法或任何可能有帮助的资源,那就太好了。谢谢你的帮助

Java不是一种好的语言,不适合进行大量的数学计算(这是RL需要做的)。您可以尝试实施Q-学习、价值迭代或策略迭代算法,但我不会在这里使用神经网络/现代深度RL方法,因为您的工作量将大幅增加

关于你的问题,如果你要实现一个老式的算法。想想你的状态和行动空间。我非常担心你的行动空间的大小,即使每个士兵都有少量的动作(比如说3次进攻,上移,下移),50名士兵的行动空间也会非常大——50^3,即使是这么多也很难处理,再多(甚至4或5次)也会让你深入到RL中的一些复杂话题

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

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

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

  • 强化学习介绍(萨顿和巴托)-任何版本都可以
  • 《人工智能:现代方法》精选章节(罗素和诺维格)

希望这有帮助,很抱歉,这可能不是我们所希望的答案

谢谢你的快速回复。我知道java中的RL会很糟糕,但他的AI非常好,我想不出任何方法来硬编码算法。但是,其他算法,如minimax,在计算上过于昂贵,所以我不知道如何解决它。有没有硬编码的策略想法?“Java是一个禁忌(Python更好)。”我在很多地方读到Python显然更适合ML/RL任务,但我不明白为什么会这样?我假设Java的运行速度比Python快得多,因为Python需要被解释…@PLEXATIC原因是有很多好的Python库是用C语言编写的——Numpy、Tensorflow、Pytorch等等——为什么它们是用Python而不是Java构建的?1.使用JVM比Cython更困难。2.Python是一种很好的原型语言3。Java是强类型的(这对科学计算几乎没有好处)。我们不在乎python的速度慢,因为主要的繁重计算是用C语言执行的。可能还有其他原因,这是一个很好的起点。@BenMoskowitz RL通常在计算上非常昂贵,与minimax一样或更贵。你知道你的老师采取什么方法吗?有一些方法可以降低极大极小深度限制的复杂性。还有一些方法可以处理较大的行动空间,例如,以巧妙的方式将士兵分组,以便他们共享相同的行动。也许减少行动空间的Q-学习是一种方法。我不能帮助硬编码的策略,因为我不知道他在使用什么策略,对不起!“希望这能有所帮助。”我的老师故意没有告诉我们他是如何实施的。我肯定会看看minimax的深度限制,但我想我会避免Q-learning,因为我很难在Java中找到任何好的实现,并且由于涉及的计算复杂性。我也在考虑其他策略,比如*。有什么想法吗?