PPCG上最受欢迎的挑战类型之一是“山丘之王”。 在这些比赛中,为了简洁或速度而获得的积分不会被授予,而是由机器对人的战斗获得的。 挑战作者确定了多人游戏的规则,用户竞争编写最佳的“ AI”,与比赛中的其他提交者进行对抗。
KOTH的风格
KOTH有几种样式(可以重叠),其中最著名的样式如下:
- 一对一循环:最常见的格式,每个漫游器在1-v-1比赛中与彼此竞争。 示例:武士对决,RPLSS,BattleBots,以及下面列出的许多KOTH
- 小组赛:一对一的扩展,但显然每场比赛都有更多的球员。 每场比赛的球员人数是固定的。 示例:四人对峙
- 大型小组:所有机器人都一次参加一场大型比赛,而赢得最多游戏/平均得分最高的机器人则赢得了比赛。 示例:战略投票,切蛋糕,僵尸启示录
- 团队:用户分为多个团队,一个团队中的所有漫游器都可以协同工作。 示例:红色与蓝色
- 抽象游戏:没有“运动”的概念。包括棋盘游戏(国际象棋等),剪刀石头布,纸牌游戏等。示例:死亡商人,囚徒困境,穴居人决斗
- 竞技场:机器人在地图上竞争,他们必须导航。 通常涉及更多类似视频游戏的元素。 示例:饥饿游戏,创造狼
- 自定义语言:Bots必须使用特定的语言编写,这是一种核心的游戏机制。 控制器通常会解释这些自定义语言。 示例:Code Bots系列,Nano Core War
- 非对称:游戏具有两个不同的角色,例如攻击者vs.防御者,每个机器人都针对特定角色。 为每个攻击者和防御者对运行一个游戏。 示例:捉猫
- 角色创建:用户不仅可以编写自己的AI,还可以帮助他们确定机器人的游戏状态和能力。 通常有多种选择能力,从而导致多种策略。 示例:科德蒙,团契之战,培养皿
- 网络托管或堆栈摘录:无需下载和编译/运行控制器和机器人,而是可以通过网络浏览器查看比赛。 例如:机器人群,太空战
什么是控制器?
控制器是负责运行锦标赛的程序。 它处理内部游戏机制,与参赛者进行交流,并计算总体排名。 控制器由挑战作者专门针对特定挑战编写。 挑战作者还负责下载/运行所有提交,使用这些提交执行控制器的“正式运行”,并使用排行榜定期更新挑战。 KOTH风格是唯一一种需要参赛者和主持人之间如此紧密互动的风格。
如何举办KOTH
山丘之王比赛是最耗费人力的比赛。 与大多数类型的游戏(例如代码高尔夫)不同,KOTH主机的进入障碍很大。
- 想出一个KOTH的想法。 棋盘游戏和视频游戏是灵感的主要来源,尽管有时挑战作者的目标是寻求更多奇特的KOTH类型。 您应该尝试概述游戏的核心规则和目标。
- 尽快将其沙箱化。 KOTH需要大量的孵育时间。 在这段时间里,您应该寻求有关核心概念的反馈,同时还要完善游戏本身的所有规则。 完成此步骤后,您应该了解每个游戏回合的规则,理想情况下,可以假设在现实生活中进行一回合。
- 确定您的实现方式。 机器人可以用任何语言编写,并且控制器可以通过STDIN / OUT进行通信吗? 机器人会使用函数调用进行通信,以某种通用语言作为类编写吗? 每个人在速度和可访问性方面都有优点和缺点。
- 开始编写控制器。 通常,查看以前的控制器是如何编写的,和/或请求重用以前的KOTH的代码的权限通常很有帮助。 如果您不熟悉KOTH,那么这是查看进程间通信的好时间,如果那是您要走的路。
- 在编写控制器时,您将完成编写比赛的详细规则,包括沟通方式以及如何确定总体冠军。 此时,您的挑战规范应该看起来几乎完整,减去指向完成的控制器的链接。
- 一旦您完成了控制器,现在可能是时候查看比赛的结构,沟通方式和游戏规则了。 目前,您无需进行任何重大更改。
- 编写一些示例机器人,以尝试几种策略。 示例包括随机机器人,连续尝试相同移动组合的机器人,最小化其统计信息(如果适用)的机器人以及您尝试编写智能机器人的尝试。 这将测试您的控制器,但也会让您知道在进行比赛时的期望。 您应该注意所有您认为过大的策略,因为您仍有时间进行一些平衡。
- 控制器进入最终状态后,将其公开上传到某个文件托管站点,GitHub是最受欢迎的选择。 在您的规格中将链接附加到控制器。 此时,您应该设置比赛的开始/结束日期。
- 一旦您对规格进行了校对并感到满意,并准备举办比赛,就可以提出挑战。 一旦出现任何问题,您都应尝试澄清/编辑规范,以最大程度地减少人们开始编写机器人后的编辑量。 您还应该发布一些示例漫游器作为答案,以帮助推动比赛。
- 发布挑战后,您的工作还没有结束。 建议您尽可能多地“运行比赛”,以便人们知道他们目前的排名。 这个时期可以持续几个星期。
- 一旦过了两周并且新机器人的流量已经消失,您可以选择运行最终的比赛,最终的获胜者是比赛的总冠军。 许多KOTH从来没有正式的“决赛”。
写作技巧
如果您打算编写用于PPCG的KOTH,并且还没有阅读标签wiki,请这样做,因为它概述了挑战作者可能会遇到的几个常见陷阱。 其中的一些漏洞和其他漏洞也被“标准漏洞”所涵盖,您可能希望在挑战说明中明确提及这些漏洞。
- 您可能应该明确禁止各种形式的篡改控制器或与其他机器人进行交互。
- 您还应该禁止窃取策略(用户通过复制另一人的策略来编写机器人)或定位(用户将其他机器人的知识纳入其代码中,以便其机器人可以预测/识别其竞争对手)。 早在PPCG的早期,我就使用后一种策略来大扫除特定的KOTH。
- 弄清楚如何处理随机性。 如果涉及PRNG,则强烈考虑为生成器添加种子以确保可复制性。 还运行大量游戏(每个对决多次),以便每个单独的随机事件对整体排名的影响最小。 如果您使用不同的种子运行两次锦标赛并且排名明显不同,那么您可能没有运行足够的游戏来确定真正的获胜者。
在本元文章中介绍了一些挑战主机的提示。 对该主题的主要提示是:
- 根据玩家的回合顺序,确保游戏对玩家既无优势也不不利。 首先移动的机器人可能会对游戏产生更大的影响,而最后移动的机器人可能具有信息优势。 (链接到原始提示)
- 尝试尽可能包容新提交的内容。 理想情况下,只有一种语言的经验的人才能以他们知道的语言竞争。 此外,只要条目之间没有团队合作,就可以允许人们使用不同的策略提交多个机器人。 有时,语言和答案计数限制是不可避免的,甚至是挑战的核心组成部分。 (链接到原始提示)
- 考虑比赛的规模。 准备好提交5个到50个之间的任何内容。尤其是在进行大型竞技场战斗时,无论参与者多少,都应确保地图密度不会太小/太大。 (链接到原始提示)
主机资源
到目前为止,最好的资源是已经托管KOTH的人员。 询问并得到答复。 对于控制器编写,请考虑将其基于其他人的控制器。 值得一提的资源是Nathan Merrill的KoTHComm,它是KOTH的框架,可用于各种地图和锦标赛结构。
KOTH获胜秘诀
我向竞争对手推荐的一件事是在本地举办比赛,这样您就可以在提交机器人之前了解机器人的性能。 您甚至可以让大量的机器人相互竞争,因此您知道哪个机器人应该最强地参加比赛。 其他想法包括:
- 打破数学。 如果有任何方法可以计算“期望值”或确定纳什均衡,那就去做,因为这种知识对于找到好的策略非常有用。
- 遗传算法。 如果创建的机器人的策略由某些参数集合确定,则可以编写优化这些参数的遗传算法。
- 学习的机器人。 您可以使用统计信息和模式识别来预测对手最有可能采取的下一步行动。 只是要小心其他会对您起作用的机器人。
在这个封闭的问题中提到了一些针对竞争对手的提示。 特别是,请查看我有关纳什均衡的有用性的答案。
关于作者
PhiNotPi是PPCG的长期会员,并主持了多个KOTH。