这个问题是关于我创建的计算机对手的一种方法,该方法目前正在或计划在几种计算机游戏中使用。
背景
去年,试图改善一个名为“扫雷舰国旗”游戏中的电脑对手时(简短描述:扫雷的回合制多人游戏版本,你必须采取比对手更多的地雷),我强烈地改变了我的算法的工作方式。我没有使用if-else-if-else这样的方法,而是使用一组具有指定权重的“得分手”来确定最佳动作。
您可能会认为对于Minesweeper Flags这样的游戏,仅是举手投足可以最大程度地夺取地雷,但这并不是那么简单。计算机将采取哪种动作通常取决于当前游戏状态下该特定动作的几个功能。功能示例:
- 这个举动得分的概率是多少?
- 在这里向我的对手透露任何信息的可能性是多少?
系统说明
系统基本上是这样的:
- “预得分者”:对当前游戏状态进行了一些预分析(就扫雷标志而言,通常是:计算所有概率)
- “得分手”:要求一组普通的得分手为每个可能的动作确定得分,每个得分手根据自己的标准应用得分。计分员可以检查进行的预分析的结果。
- 将上述步骤中计算出的分数相加,并设置为移动分数。
- 这些移动将根据其得分进行排序和排名,以便所有具有相同得分的移动都获得相同的排名。
- “后记分员”:以上结果可以发送到“后记分员”,后者可以根据后记分员自己的规则以所需的任何方式修改任何字段的分数。
当结合一堆前得分手,得分手(及其权重)和后得分手时,这就是我所说的得分配置。
结果示例
这是分数被应用于扫雷旗帜的一个例子。这是得分的地图:
这是实际分数配置的输出。它显示了可能移动的等级,其中1是最佳等级,并以白色突出显示:
由于编写了高度灵活的代码,这种针对AI的方法也可以插入其他游戏中。
的优点和缺点
以下是我可以想到的该系统的一些优点和缺点
优点
- 为AI创建很多不同的配置非常容易。
- 可以与遗传算法一起使用:每个计分员都有一个相关的权重,该权重可以成为基因。
- 使用某些工具,可以检查为什么做出特定动作,以及哪些得分手对该动作负责
- 使用工具,可以创建可能动作的总体得分/等级的地图(如上面的屏幕截图)
- 通过将分数应用于人类的演奏方式,可以创建一个“ #AI_Mirror”,尝试做出人们认为会做出的动作
缺点
- 要“正确地”调整乐谱配置以使AI尽可能发挥出色,将非常困难。
问题
我在这里构建的系统在AI世界中广为人知吗?真正的AI术语又叫什么?
这种方法有意义吗?或者您会推荐其他方法吗?
有哪些方法可以使调整分数配置的过程变得更容易?
关于最后一个问题,我知道使用遗传算法的可能性,也对SARSA有所了解(我确实认为我的评分员类似于该站点对具有权重的特征的描述,但根据我的理解,这并不是我所创建的这里)。我认为SARSA的问题在于,直到游戏结束,您才知道奖励,最好的举动通常是根本不给予奖励(地雷)的举动。您当前获胜的机会取决于当前比分(您和您的对手选了多少枚地雷)以及当前地图的外观。
这个问题最初发布在现已停产的人工智能网站上。
用于此方法的(Java)代码现已发布在Code Review上。