蚂蚁的战斗策略

2024-02-01

这个问题是指谷歌赞助的人工智能挑战 http://aichallenge.org/,每隔几个月举行一次的竞赛,参赛者需要提交一个能够自主与其他机器人玩家玩游戏的机器人。刚刚结束的比赛名为“蚂蚁”,您可以阅读其所有规范here http://aichallenge.org/specification.php, 如果你感兴趣。

我的问题是针对某一方面的ants: 作战策略 http://aichallenge.org/specification_battle.php.

问题

给定一个离散坐标网格[如棋盘],并假设每个玩家都有一定数量的蚂蚁,它们在每个回合可以:

  1. 保持静止
  2. 向东/向北/向西/向南移动,

...如果范围内的敌方蚂蚁周围的敌人数量少于(或相同),则蚂蚁将被敌方蚂蚁杀死[相当于:“如果敌方蚂蚁在范围内,则蚂蚁将杀死敌方蚂蚁”范围被比目标更多(或相同)的敌人包围”]

一个直观的例子:

在这种情况下,黄色蚂蚁将向西移动,而橙色蚂蚁无法移开[蓝色瓷砖被阻挡],将有两只黄色蚂蚁“在范围内”并会死亡(如果解释仍然不清楚,我邀请您参观上面的链接 http://aichallenge.org/specification_battle.php查看更多示例和解释场景)。

问题

我的问题主要是关于复杂性。我对这个问题进行了广泛的思考,但我仍然无法想出一种可接受的方法来在合理的时间内计算最佳的一组动作。在我看来,为了为我的蚂蚁找到最佳的可能动作集,我应该评估每种可能情况的结果,但由于战斗可能非常拥挤,这意味着计算时间将呈指数级增长(5^n,其中 n 是涉及的蚂蚁数量)。

这种方法的另一个限制是正在研究的解决方案并没有提高其有效性按比例计算所花费的时间,因此,任意中断其执行可能会给您带来不可接受的解决方案.

我怀疑通过一些几何考虑可以找到一个好的解决方案结合线性代数,(也许计算蚂蚁群的一些“重心”?)但我无法通过这方面的“直觉”水平......

所以,我的问题实际上可以归结为:

应该如何解决这个问题,以便在现代机器上在大约 50-100 毫秒的计算时间内找到[接近]最佳解决方案(该数字是根据官方竞赛规则得出的)?

如果您对这个问题感兴趣并且需要一些灵感,我强烈建议您观看一些可用的内容比赛重播 http://aichallenge.org/games.php.


我认为你的问题可以通过扭转问题来解决。 您可以计算棋盘上每个离散位置的最佳候选移动,而不是计算每只蚂蚁的最佳移动。

  • +1 表示保存位置
  • +2 表示导致敌人死亡的地方
  • 必死的位置-1分

这将以线性方式扩展——但在不提供最佳个人运动方面需要进行一些权衡。

也许值得一试:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蚂蚁的战斗策略 的相关文章

  • 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

    输入是正整数或空整数的数组 A 和另一个整数 K 我们应该将 A 划分为 K 个连续元素块 我所说的 划分 是指 A 的每个元素都属于某个块 并且 2 个不同的块不包含任何共同元素 我们将块的总和定义为该块的元素的总和 目标是在 K 个块中
  • 单词预测算法

    我确信有一篇关于此问题的帖子 但我找不到提出这个确切问题的帖子 考虑以下 我们有字典可供使用 我们收到了许多单词段落 我希望能够根据此输入预测句子中的下一个单词 假设我们有几个句子 例如 你好 我的名字是汤姆 他的名字是杰瑞 他去了没有水的
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 哪种算法可以有效地找到路径一定距离内的一组点?

    给定一组点s 一组 x y 坐标 和由连接一组点的线段组成的路径l 描述一种有效的算法 可用于从s在指定距离内d路径的l 其实际应用可能是查找沿城市之间的公路旅行路径 10 英里内任意位置的餐馆列表 For example in the f
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4
  • 我使用仅大小写不同于其类型的变量名是不道德的吗?

    例如 采用这段代码 var person new Person 或者对于 Python 爱好者来说 person Person 我经常被告知这有多糟糕 但还没有看到这两行代码不道德的例子 对我来说 人就是一个人 试图给它起另一个名字是浪费时
  • 期望最大化算法的数值示例[重复]

    这个问题在这里已经有答案了 由于我不确定给出的公式 有人可以提供 EM 算法的简单数字示例吗 一个非常简单的具有 4 或 5 个笛卡尔坐标的坐标就可以了 那这个呢 http en wikibooks org wiki Data Mining
  • 多项式时间复杂度中的负系数

    假设某些算法具有多项式时间复杂度T n 是否有可能任何一项的系数为负 直观上 答案似乎是明显的 否 因为任何算法都没有任何部分可以减少先前步骤所花费的现有时间 但我想确定一下 当谈论多项式复杂度时 只有次数最高的系数才有效 但我认为你可以有
  • 是否可以证明序列是否是随机的?

    考虑以下输入 1 1 2 3 5 8 这不是随机的 2 4 8 16 32 这都不是 4 1 2 11 5 9 这个看起来像随机序列 我想问是否有这样的算法来证明输入是否是随机的 不 没有这样的证明 如果你有完全随机的数字 则每个长度为 n
  • 循环中的递归算法复杂度(运行时间)

    我想了解您对如何检测以下递归算法的 T n 运行时间 的意见 Charm 是一种用于发现事务数据库中频繁闭项集的算法 频繁闭项集列表是在一组交易 tids 中多次出现的频繁项 例如面包和牛奶是经常一起购买的物品 它们是通过将索引为 i 的当
  • 根据位置计算组合

    我在解决这个问题时遇到了麻烦 创建一个函数 给定字符集 C 可以生成第 N 个组合 或者返回给定起始位置 Ns 和结束位置 Ne 以及组合的最大长度 Mx 的一系列组合 一个具体的例子 令 C A B C 我们知道不同的组合将如下所示 假设
  • 查找重叠间隔序列中最大和的算法

    我试图解决的问题在数轴上有一个间隔列表 每个间隔都有一个预定义的分数 我需要返回最大可能的总分 问题是间隔重叠 并且重叠间隔中我只能使用一个 这是一个例子 Intervals Score 0 5 15 4 9 18 10 15 12 8 2
  • 如何找到给定顶点的所有多边形?

    我有一个顶点列表 并且我知道它们之间的连接 我试图找到顶点的所有多边形形状 这些多边形形状不应重叠 我做了一些研究 我认为如果我可以顺时针 或逆时针 没有区别 遍历顶点 我可以检测多边形形状 因此 我寻找顺时针遍历顶点的解决方案 我发现了一
  • 变量的多个值介于 0 和数字序言之间

    所以我一直在尝试自学序言 我认为我进展顺利 然而 我有点坚持我正在尝试的这一种方法 toN N A A 等于 0 到 N 1 之间的整数值 按升序生成 所以 toN 5 A 将是 A 0 A 1 A 2 A 3 A 4 我对序言还很陌生 所
  • 证明字符串算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • 将 RGB 转换为灰度/强度

    当从 RGB 转换为灰度时 据说应该对 R G 和 B 通道应用特定的权重 这些权重是 0 2989 0 5870 0 1140 据说这是因为人类对这三种颜色的感知 感受不同 有时也有人说这些是用于计算 NTSC 信号的值 但是 我在网上没
  • 使用按键重新排列字符串

    我想使用Pythonrandomly根据给定的键重新排列字符串的各个部分 我还想用相同的密钥恢复原始字符串 def rearrange key data pass def restore key rearranged data pass 效
  • 检测重复文件

    我想检测目录树中的重复文件 当发现两个相同的文件时 将仅保留其中一个重复文件 并删除其余的重复文件以节省磁盘空间 重复是指具有相同内容的文件 但文件名和路径可能不同 我正在考虑为此目的使用哈希算法 但不同的文件有可能具有相同的哈希值 因此我
  • 平均值大于或等于 k ​​的最长连续子数组

    考虑一个包含 N 个整数的数组 找到最长的连续子数组 使其元素的平均值大于 或等于 给定数字 k 显而易见的答案具有 O n 2 复杂度 我们可以做得更好吗 我们可以通过在 O n 时间内从所有值中减去 k 将这个问题简化为 sum gt

随机推荐

  • 抽象代数和编程[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我要开始学习抽象代数 群 环等 我有兴趣了解任何编程语言 如果有的话 可以帮助我学习 尝试我在理论上学到
  • 如何删除 QPixmap 周围的额外边距?

    我画一个QRectF in the paint我的班级的功能并设置QPixmap作为它的刷子 我从包含此的类构建一个对象QRectF 当我将此项目放入场景并设置场景背景时 会出现 QRectF 它也发生在一个QPixmap我添加到场景中 我
  • 如何模拟 JTextField 上的单击?相当于 JButton doClick()?

    我正在开发一个 Java 项目 需要让按键模拟 JTextField 上的单击 我正在寻找相当于 JButton doClick 方法 我试图让按键 enter 执行与单击 JTextField 完全相同的功能 不确定要提供哪些其他信息 提
  • 将焦点设置到 uwp 中的文本框[重复]

    这个问题在这里已经有答案了 我有一个具有 textBox 元素的通用 Windows 平台项目 我想在单击单选按钮时将焦点设置到它 在单选按钮单击事件中 我可以说 txtBoxID IsEnabled true txtBoxID Text
  • 在 Sprite Kit 中显示像素艺术的最佳方式是什么?

    我很好奇如何为我的游戏展示像素艺术 现在我只是调整大小SKScene to be sceneWithSize CGSizeMake 256 192 这是正确的方法还是有更好的方法来完成此类任务 首先 使用场景的默认大小 您不需要缩放或更改它
  • 如何使用 Swift 进行倒计时

    我在制作计时器应用程序时遇到了困难 所以我想现在我解决了它 我可以帮助其他面临问题的人 所以基本上这个应用程序从当前时间倒计时到特定日期 由于堆栈溢出允许采用问答格式 我希望这可以帮助您 请参阅评论以获取解释 使用计时器计算的倒计时和前导零
  • 删除字符串中除字母以外的所有字符

    如果我有一个字符串 ja v a 如何删除所有非字母字符以输出 java 我努力了str str replaceAll W 但无济于事 你能试试这个吗 System out println ja v a replaceAll a zA Z
  • Android 上的点对点音频通话:语音中断和延迟(接收数据包延迟)增加

    我正在尝试在 Android 上建立点对点音频通话 我使用 Android 手机和平板电脑进行通信 但在收到大约 40 个数据包后 手机几乎停止接收数据包 然后突然收到一些数据包并播放它们 依此类推 但等待时间增加 同样 平板电脑最初接收数
  • Robot Framework调用的测试如何将信息返回到控制台

    我有一个调用 python 方法的机器人框架测试套件 我希望 python 方法能够将消息返回到控制台而不会导致测试失败 具体来说 我正在尝试计算一个过程的时间 我可以使用 raise 将消息返回到控制台 但同时测试失败 def doSom
  • Spring-mvc控制器和异常处理

    想问您一个有关 spring mvc 控制器的最佳实践问题 请查看下面的代码 Autowired SomeService service RequestMapping public ResponseBody Response createS
  • 将文本添加到 android 可绘制 xml

    我正在尝试使用 android 可绘制 xml
  • 访问网络应用程序中文件的内容而不上传

    据我所知 如果不先上传到服务器 然后重新下载给用户 就不可能在网络应用程序中访问用户计算机上的文件内容 除非使用某种插件 Flash等 理想情况下 用户将文件直接上传到本地存储 然后脚本将有机会处理 显示 验证 过滤 而无需用户等待上传 即
  • Spring:如何在Web应用程序和独立程序中获取应用程序上下文

    我是 Spring 框架的新手 我们想在Web应用程序中引入它 3 1 目前在Web层使用struts 在业务层使用服务外观和业务对象 在持久层使用自编写的JDBC DAO 所有这些都是紧密耦合的 我创建了几个 xml 配置 其中一个用于
  • Python pandas 从一列字符串的数据选择中过滤掉 nan

    不使用groupby我如何过滤掉数据而不NaN 假设我有一个客户将填写的矩阵 N A n a 或其任何变体和其他变体将其留空 import pandas as pd import numpy as np df pd DataFrame mo
  • 将大文件读入 R

    我是 R 的新手 但我知道它会因 大 文件而窒息 我正在尝试读取 200MB 的数据文件 我已经尝试过 csv 格式 并将其转换为制表符分隔的 txt 但在这两种情况下 我在文件加载之前就用完了 4GB RAM R 使用 4GB 或内存来加
  • VirtualBox 上的 Android x86:Android 已连接但不在线

    我正在尝试使用 Oracle VirtualBox 配置 Android x86 运行机器 以便它可以与 Eclipse 一起使用 我在使我的虚拟机 在线 时遇到一些麻烦 我通过在 Android 终端模拟器中键入以下内容将手机连接到 ad
  • 检查元组中的元组中是否存在元素

    我有一个元组列表 如下所示 CODES apple reddelicious caramel sweetsticky banana yellowfruit 检查该元组中是否存在值的最佳方法是什么 例如我希望能够说 apple in CODE
  • 清理 PHP 中的文件路径

    我希望确保我的小程序的安全 以便潜在的恶意用户无法查看服务器上的敏感文件 path home gsmcms public html central app webroot GET file if file exists path echo
  • Azure DevOps 管道中存在不明确的参数“HEAD^”

    我在网上看到很多示例如何在 CI 中的 Azure DevOps 管道期间获取更改文件 只需使用简单的代码 changedFiles git diff name status HEAD HEAD 但是当我尝试在 yaml 管道中使用它时出现
  • 蚂蚁的战斗策略

    这个问题是指谷歌赞助的人工智能挑战 http aichallenge org 每隔几个月举行一次的竞赛 参赛者需要提交一个能够自主与其他机器人玩家玩游戏的机器人 刚刚结束的比赛名为 蚂蚁 您可以阅读其所有规范here http aichal