-2

我正在参加一个编程竞赛,目标是编写一个可以玩特定游戏的机器人。游戏的目标是获得一定数量的积分。您控制多艘飞艇,您可以四处移动,捕获岛屿并导航携带宝藏的无人机。您与一个对手比赛,回合同时发生,并且有时间限制。您可以在一回合内移动多艘船和无人机。您可以使用 Python、Java 或 C# 对您的机器人进行编程。确切的细节无关紧要,只是每艘船每轮大约有 15 个选项(移动和射击),总体而言,每轮大约有 10000 个不同的选项(飞艇运动和射击的不同配置) 直到现在我参加了这个比赛天真,并且没有做任何特别聪明的事情(例如,如果靠近敌人,射击)。我已经阅读了极小极大算法,我真的很想在这里应用它(或类似的东西),你可以假设我可以判断一个状态的值。我的问题是每一回合都有大量的选择——这会产生一个巨大的分支因素,让我无法深入。

问题 1:有没有更好、更适用的方法来解决这个问题?也许是深度学习或类似的东西?问题2:有没有办法最小化分支因子?我已经阅读了有关 alpha-beta 和类似算法的信息,但似乎没有任何作用。

任何帮助将非常感激

4

1 回答 1

0

对于这类问题,极小极大算法似乎很自然。首先,游戏将以抽象的方式建模,然后使用求解器找到从当前情况到最大化点数的游戏状态的路径。与极小极大类似的方法是 GOAP,它是在 1970 年代为名为 STRIPS 的机器人 Shakey 实施的。但是,GOAP 和 minimax 有两个问题:首先,需要游戏的抽象模型(可能在 PDDL 或游戏描述语言中),其次,状态空间太大。

一个更好的计划替代方案是使用行为树。那是一个描述代理行为的静态程序。不需要求解器,也不需要完整的游戏建模。相反,自下而上的方法与多次编辑-编译-运行迭代一起使用,以找到最佳行为树(测试驱动开发)。为了实现这种编程方法,必须首先实现所谓的“反应式规划器”,这是实时调度器的另一个词。那是一个将行为树映射到甘特图的模块,用于在特定时刻执行操作。作为介绍,unity3d 引擎是一个很好的起点,它具有开箱即用的完整行为树实现。

于 2017-01-16T15:38:40.540 回答