考虑以下情况:
我们可以预测谁将完成第一,第二和最后?构建者是否应该遵循任何算法来完成他们的工作?
以下是该问题的一个实际例子:
让我们说:
builder 1 has: b2 b5 b8 b9
builder 2 has: b1 b11
builder 3 has: b3 b4 b6 b7 b10 b12
构建器1和构建器2必须等待构建器3放置b4 构建器3将放置b4,并将其位置返回构建器1。
wall: b4
建造者1将不得不提出b5,因为他没有其他选择。
wall: b4 b5
建造者2将跟随,但他不能放置他的积木,他将不得不等待b2或b10 建造者3现在有两个选择:b3或b6,他必须选择一个帮助他先完成的选项。
wall: b4 b5 b6
建筑师1无所事事,他将转向建造者2 构建器2仍在等待安装b2或b10 建造者3必须放置b7。
wall: b4 b5 b6 b7
构建器1现在将放置b8。
wall: b4 b5 b6 b7 b8
建筑商2仍在耐心等待......
建筑商3被迫放下b3,因为没有其他选择,他希望建筑师2可以放置b9 ......但他的希望消失了!
wall: b3 b4 b5 b6 b7 b8
建设者1现在完全掌管,感到非常高兴!但他很困惑!在认为他认为b2可能允许他继续阻止更多数量的积木之后,这反过来增加了他的机会。
wall: b2 b3 b4 b5 b6 b7 b8
建设者2说:终于!一些动作!和地方b1。
wall: b1 b2 b3 b4 b5 b6 b7 b8
建筑师3失去了成为第一的希望! 建造者1现在将安装他的最后一个街区并带着最大的回报回家!
wall: b1 b2 b3 b4 b5 b6 b7 b8 b9
建造者2将等待......
建设者3遗憾地放置b10
建设者2放置b11并带着第二个奖励回家......
任何已知的解决此类问题的算法?
答案 0 :(得分:3)
乍一看,球员的力量是他的最高和最低区块所跨越的范围的函数。在您的示例游戏中,我们可以看到Builder 1完全支配Builder 2。
Builder 1: 2 ----------- 9
Builder 2: 1 ----------------- 11
Builder 3: 3 --------------- 12
Start position: ^^
由于比赛在b4开始,最重要的部分是高端。例如,Builder 3有b3,它可以防止其他两个动作(b2和b1);但是,这不是非常具有决定性的。 b3块阻止b2和b1的能力仅与b5一样强大,后者阻止了b6和b7。
真正的力量位于上图右侧。这意味着具有上述初始起始范围的游戏通常会如下所示:Builder 1,Builder 2,然后是Builder 3.
至于玩家策略,这是一个公认的投机指南:坚持你最强大的作品,意味着那些阻止其他玩家进行最大数量动作的作品。在此策略中,您所持有的每件作品都可以根据其阻止的其他动作的数量进行分数。
例如,假设墙位于b3-b4-b5并且您持有b2,b6和b9。你可以玩b2或b6。你如何评价你的作品?
b2 score = 1 (prevents b1)
b9 score = 3 (prevents b10, b11, b12)
b6 score = 2 (prevents b7, b8)
请注意,b6因防止b10及更高而无法获得荣誉,因为b9正在做这项工作(Matthieu M.也提出了这一点)。在这种情况下,您应该首先尝试播放b2,因为它会让您将其他玩家的风险降至最低。
其他答案提出了一些有趣的想法,不想阻止你自己的进步,建议你先玩b6。但我不认为通过加速向b9的运动可以获得任何好处。你想尽可能长时间地延迟b9,因为它是一个能让你获得最大保险(从概率的角度来看)阻止其他玩家完成的部分。
<强>更新强>
我写了一个Perl模拟来测试一些简单的玩家策略。我开始怀疑球员战略是否无关紧要。我尝试了以下几点:(a)挑选最高的块; (b)挑选最低区块; (c)我推荐的选择最安全区块的策略(防止其他人移动最多的区块)。我通过给第一名获得3分,第二名获得2分,第三名获得1分来评估策略。这些策略中没有一个比随机选择表现得更好(或更差)。
当然,人们可以制定玩家选择影响结果的场景。例如,如果块像这样分发,则玩家3将获得第一或第二位。
b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12
2 1 3 1 3 2 2 2 2 2 2 2
然而,从概率的角度来看,结果的这种变化可以简化为以下内容:除非他选择与仅剩下一个区块的球员相邻的区块,否则球员3将获胜。换句话说,确切的结果是投掷硬币。
所以这里有一个问题:任何人都可以提供一个既没有预定也没有投掷硬币的结果?我尝试了大约15分钟然后感到无聊。
答案 1 :(得分:2)
答案 2 :(得分:1)
考虑一下你是否有B3,B7和B11。假设B3和B7目前都是合法的举动。 (你处于一个相当不错的位置。因为你没有B12或B1,你不能排在第三位。)
选择B3意味着您只打开B1和B2,因此这是FM战略下的最佳举措。
然而,如果不放置B7,你就会推迟B10的最终比赛,这对你来说是必要的。 B7可能是一个更好的举措。
答案 3 :(得分:1)
由于我还没有精确度,让我们从(合理的)假设开始,如果你可以玩,那么你必须这样做。很高兴防止游戏卡住。
由于规则,您可以进行0,1或2次移动。您只能选择何时进入2
移动解决方案。
<强> 1。决策树
与许多游戏一样,查看所发生情况的最简单方法是跟踪所有可能移动的树,然后探索此树以做出决定。由于没有太多的决定,树不应该那么大。
例如,请考虑我们处于以下状态:
wall = [3, ..., 8]
b1 = [2,9]
b2 = [1,11]
b3 = [10,12]
而b1
转向播放。
b1[2] -> b2[1] -> b3[] -> b1[9] (1st) -> b3[10] -> b2[11] (2nd) -> b3[12]
or
b1[9] -> b2[] -> b3[10] -> b1[2] (1st) -> b2[1] -> b3[] -> b2[11] (2nd) -> b3[12]
or
b2[11] -> b3[12] (2nd) -> b2[1]
所以基本上我们在树的一部分有两个选择。
b1
可以在2
和9
b2
可以在1
和11
我们可以通过列出玩家将获得的位置来总结选择的后果,显然是在每个玩家选择的无偏见的一方中,以获得最佳位置。
所以,让我们表达树的简化版本(我们只显示选择):
b1[2] -> [1,2,3]
b1[9] -> b2[1] -> [1,2,3]
b1[9] -> b2[11] -> [1,3,2]
现在我们可以根据给定的玩家应用缩小视图。
对于b1
,树看起来像:
[2,9] -> [1,1] (both are equivalent)
对于b2
,它看起来像:
[1,11] -> [2,3]
对于b3
,永远不会有选择......
<强> 2。可能的结果
当然,玩家不会得到这棵树,因为他们不知道其他人有什么,但作为观察者,它可以让你在聚会的不同阶段研究各种可能的结果。
请注意,例如,在此子树上,我们有2个选项,第二个选择以第一个为条件。如果我们Pi(x in {x,y})
表示玩家i
在面对x
和x
之间的选择时选择y
的可能性,那么我们可以表达每个结果的概率
P([1,2,3]) = P1(2 in {2,9}) + P1(9 in {2,9}) * P2(1 in {1,11})
P([1,3,2]) = P1(9 in {2,9}) * P2(11 in {1,11})
第3。球员策略
从我们在这里看到的情况来看,最好的策略似乎是尝试阻止尽可能多的部分:即在1
和11
之间进行选择时,你最好玩{{因为1
阻止1件,它不会阻止任何人。但是这只适用于2件。
当你实际拥有一个碎片列表时,我们需要一些更通用的东西。
例如,如果你持有11
并且墙应该是{3, 9, 11}
你应该摆出什么?显然,[4, ..., 8]
会阻挡比3
更少的碎片,但9
阻挡了您自己的碎片!
就个人而言,在这种情况下我会选择9
,因为无论如何我需要放置9
块11
块少于11
(带{{} 1}}我有可能先终止,3
不太可能......)。
我想我可以给手中的每件作品给出一个分数,具体取决于他们阻挡的件数:
3
虽然11
仅归因于3 -> 2
9 -> 1
11 -> 1
吗?因为它只阻止9
,因为我持有1
:)
然后我会先打出最低分(如果我有选择)。