我正在参加一个编程竞赛,目标是编写一个可以玩特定游戏的机器人。 游戏的目标是获得一定数量的积分。你可以控制多个飞艇,你移动,捕捉岛屿和导航携带宝藏的无人机。你对抗一个对手,同时转弯,并且有一个时间限制。您可以一次移动多个船只和无人机。您可以使用Python,Java或C#对机器人进行编程。 确切的细节并不重要,只是每艘船每回合有大约15个选项(移动和射击),而且每回合你有大约10000个不同的选项(飞艇运动和射击的不同配置) 到目前为止,我天真地接近了这场比赛,并没有做过任何特别聪明的事情(例如,如果靠近敌人,射击)。我已经读过有关minimax算法的内容,我真的想在这里应用它(或类似的东西),你可以假设我可以告诉一个状态的值。我的问题是每个回合的大量选项 - 这创造了一个令人兴奋的分支因素,不会让我变得非常深。
问题1:这个问题有更好,更适用的方法吗?也许是深度学习或类似的东西? 问题2:有没有办法最小化分支因子?我读过有关alpha-beta和类似算法的文章,但似乎没有任何工作。
非常感谢任何帮助
答案 0 :(得分:0)
minimax算法对于这些问题似乎很自然。首先,游戏将以抽象方式建模,然后使用求解器来查找从当前情况到游戏状态的路径,从而最大化点数。与minimax类似的方法是GOAP,它是在1970年代以机器人名为STRIPS的Shakey实现的。但是,GOAP和minimax有两个问题:首先,需要一个抽象的游戏模型(可能是PDDL或游戏描述语言),其次是状态空间要大。
规划的更好选择是使用行为树。这是一个描述代理行为的静态程序。不需要求解器,也不需要完整的游戏建模。相反,自下而上的方法与多个编辑 - 编译 - 运行迭代一起用于查找最佳行为树(测试驱动开发)。为了实现这样的编程方法,一个所谓的“反应计划者”#34;必须首先实现,这是实时调度程序的另一个词。这是一个模块,它将行为树映射到甘特图上,以便在特定时刻执行操作。作为介绍,unity3d引擎是一个很好的起点,它具有开箱即用的完整行为实现。