我在寻找在某些规则下是否可以为战舰沉没部分编写有效的人工智能时遇到了一些麻烦。
规则是:
- 最短的船的长度甚至可以是 1。当游戏管理器给你要放置的船舶数组时,你会在一开始就知道它
- 船只不能重叠,但可以相邻
- 游戏经理会告诉您最后一杆是击中、击中还是未击中。没有关于您击中/沉没的船的长度的信息
好吧,我无法正式表达的是沉船的长度。一旦我击沉了一艘船,我就无法理解它的长度。
我想使用密度方法来根据游戏中静止船只的长度来估计射击位置,但如果没有系统来获取沉没船只的长度,我的密度永远不会变得“更智能”。目前,我只是保存每次点击的北/南/东/西位置,并在我的堆栈为空时考虑完成工作。当然,这非常耗时。
我尝试澄清我的问题:假设您有一个二维数组,您可以通过以下方式跟踪拍摄结果:
u = 未知点
m = 你在 x, y 上射击,游戏经理告诉你“未命中”
h = 你向 x, y 射击,游戏经理告诉你“击中”
s = 你向 x, y 射击,游戏经理告诉你“沉没”
假设棋盘是 5 * 5。一开始你有这样的:
1 2 3 4
1 u u u u
2 u u u u
3 u u u u
4 u u u u
假设您在 2、3 上射击,游戏管理器告诉您“击中”,现在您有:
1 2 3 4
1 u u u u
2 u u h u
3 u u u u
4 u u u u
好的,现在你开始环顾你的最后一个镜头。无论您使用密度方法还是从您击球的位置开始堆叠 N/S/E/W 点。假设你的算法得出了 3, 3。这次错过了:
1 2 3 4
1 u u u u
2 u u h u
3 u u m u
4 u u u u
所以现在你尝试 2, 2,结果很成功:
1 2 3 4
1 u u u u
2 u h h u
3 u u m u
4 u u u u
现在假设 2,1 游戏管理员告诉你“沉没”:
1 2 3 4
1 u u u u
2 s h h u
3 u u m u
4 u u u u
那么:知道船只可能是相邻的,你如何知道你刚刚击沉的船只的长度,而不需要对每一个北/南/东/西点进行拍摄?
例如,在这种情况下,您需要在 2,4 和 1,3 上射击才能几乎确定您击沉的东西,而且这会消耗大量资源。请参阅下面的马克·贝西示例:这种情况比我的情况更耗时且不确定。
所以问题很简单:没有什么比这种 N/S/E/W 耗时且不确定的方法更好的了吗?
希望它能澄清此事。
附注
我知道这个问题 https://stackoverflow.com/questions/1631414/what-is-the-best-battleship-ai,但我看不懂 C# 语言...几个月前才开始使用 java :)
附注2
我知道this http://www.datagenetics.com/blog/december32011/index.html太(参见最后的插图),据我所知,除了他认为最小长度= 2这一事实之外,事情看起来完全相同。我总是可以编写2种算法(如果我检测到最小长度> 1,则编写一种算法,如果检测到最小长度> 1,则再编写一种算法)如果最小长度= 1,则“消耗”,但我不明白他如何管理这个东西......看起来他只考虑密度......
附注3
为什么关闭?我正在寻找一种在条件下工作的算法...我给出了条件以及算法应该做什么。我该如何澄清呢?这种问题我该怎么表达呢? (抱歉问这个问题,无意争论,只是学习)