Locked. This question and its answers are locked,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
战舰!
早在2003年(那时我才17岁),我参加了Battleship AI编码比赛。即使我输掉了比赛,我仍然从中获得很多乐趣并从中学到了很多。
现在,我想复活这场比赛,以寻找最好的战舰AI。
这是the framework, now hosted on Bitbucket。
获胜者将获得+450荣誉! 比赛将于于2009年11月17日举行。 17日晚零时之前不接受任何输入或编辑。 (中部标准时间)
尽早提交参赛作品,这样您就不会错过任何机会!
要保留此目标,请遵循比赛的精神。
游戏规则:
在10x10的网格上进行游戏。 每个参赛者将把5艘船(长度分别为2、3、3、4、5)布置在各自的网格上。 没有船可以重叠,但它们可以相邻。 然后,竞争对手轮流向对手射击。
游戏的一种变体允许每排射击多发一枪,每艘幸存飞船射击一发。 如果击球落下,命中或未击中,对手将通知竞争对手。 当任何一位玩家的所有飞船沉没时,游戏结束。
比赛规则:
竞争的精神是找到最佳的战舰算法。 任何违反比赛精神的赛事将被取消参赛资格。 干扰对手违反了比赛的精神。 在以下限制下可以使用多线程:
轮到您时,最多可以运行一个线程。 (但是,任何数量的线程都可以处于“挂起”状态)。 除了“正常”之外,没有其他线程可以运行。 鉴于以上两个限制,在轮到您时,将确保至少有3个专用CPU内核。 每个游戏在主线程上分配给每个竞争对手1秒的CPU时间限制。 用完时间将导致当前游戏失败。 任何未处理的异常都将导致当前游戏的失败。 允许网络访问和磁盘访问,但是您可能会发现时间限制过高。但是,添加了一些设置和拆卸方法以减轻时间负担。 代码应作为答案发布在堆栈溢出中,或者如果链接太大,则链接。 条目的最大总大小(未压缩)为1 MB。 正式地,.Net 2.0/3.5是唯一的框架要求。 您的条目必须实现IBattleshipOpponent接口(interface)。
评分:
101场比赛中最好的51场比赛是比赛的获胜者。 所有竞争对手将以循环赛的方式进行比赛。 然后,最好的一半竞争者将参加双重淘汰赛以确定获胜者。 (实际上,两个的最小乘方大于或等于一半。) 我将在比赛中使用TournamentApi框架。 结果将发布在这里。 如果您提交多个条目,则只有得分最高的条目才有资格获得双盲。
祝好运!玩得开心!
编辑1:
感谢Freed,他在
编辑2:
由于将统计信息持久保存到磁盘等方面引起了极大的兴趣,因此,我添加了一些非定时的设置和拆卸事件,这些事件应该提供所需的功能。这是的最新更改。这就是说:接口(interface)已被修改以添加功能,但是它们不需要任何主体。请下载该框架的更新版本。
编辑3:
错误修复1:仅在超时的情况下才调用
错误修正2:如果引擎在每场比赛中都超时,那么比赛将永远不会结束。
请下载该框架的更新版本。
编辑4:
比赛结果: 跟踪命中率大于0的飞船的所有可能位置。该列表永远不会超过〜30K,因此可以完全保留,这与所有船只的所有可能位置列表(很大)不同。 GetShot算法分为两部分,一部分生成随机镜头,另一部分生成随机镜头。
试图击沉已经被击中的飞船。如果有可能击沉所有命中船只的位置(从上面的列表中),我们将进行随机射击。否则,我们尝试通过选择一个可以消除大部分可能位置(加权)的射击位置来完成下沉船只的任务。 对于随机射击,根据未沉没的飞船之一重叠位置的可能性,计算最佳射击位置。 自适应算法,将船只放置在对手在统计上不太可能射击的位置。 自适应算法,该算法更喜欢在对手在统计上更有可能放置其船只的位置射击。 place船大多不互相接触。
战舰!
早在2003年(那时我才17岁),我参加了Battleship AI编码比赛。即使我输掉了比赛,我仍然从中获得很多乐趣并从中学到了很多。
现在,我想复活这场比赛,以寻找最好的战舰AI。
这是the framework, now hosted on Bitbucket。
获胜者将获得+450荣誉! 比赛将于于2009年11月17日举行。 17日晚零时之前不接受任何输入或编辑。 (中部标准时间)
尽早提交参赛作品,这样您就不会错过任何机会!
要保留此目标,请遵循比赛的精神。
游戏规则:
比赛规则:
评分:
祝好运!玩得开心!
编辑1:
感谢Freed,他在
Ship.IsValid
函数中发现错误。已修复。请下载该框架的更新版本。编辑2:
由于将统计信息持久保存到磁盘等方面引起了极大的兴趣,因此,我添加了一些非定时的设置和拆卸事件,这些事件应该提供所需的功能。这是的最新更改。这就是说:接口(interface)已被修改以添加功能,但是它们不需要任何主体。请下载该框架的更新版本。
编辑3:
错误修复1:仅在超时的情况下才调用
GameWon
和GameLost
。错误修正2:如果引擎在每场比赛中都超时,那么比赛将永远不会结束。
请下载该框架的更新版本。
编辑4:
比赛结果:
最佳答案
我赞成每场比赛做更多比赛的议案。做50场比赛只是掷硬币。我需要做1000场比赛才能在测试算法之间取得合理的区分。
下载Dreadnought 1.2。
策略:
试图击沉已经被击中的飞船。如果有可能击沉所有命中船只的位置(从上面的列表中),我们将进行随机射击。否则,我们尝试通过选择一个可以消除大部分可能位置(加权)的射击位置来完成下沉船只的任务。
关于c# - 最好的战舰AI是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1631414/
10-12 03:21