编辑:这是一个天真的算法,模拟人类有意识的思维过程,与搜索所有可能性的人工智能相比,它的结果非常微弱,因为它只向前看一块砖。它是在答复时间表的早期提交的。
我改进了算法,打败了游戏!它可能会因为临近结束时的简单厄运而失败(你被迫向下移动,这是你永远不应该做的,并且在你最高的位置会出现一个瓦片。只需保持最上面的一行填满,这样向左移动不会打破模式),但基本上你最终有一个固定的部分和一个移动的部分可以玩。这是您的目标:
这是我默认选择的模型。
1024 512 256 128
8 16 32 64
4 2 x x
x x x x
所选的角是任意的,你基本上不会按一个键(禁止的移动),如果按了,你会再次按相反的键并尝试修复它。对于未来的平铺,模型总是希望下一个随机平铺为2,并出现在当前模型的相反侧(当第一行不完整时,在右下角,第一行完成后,在左下角)。
算法来了。大约80%的人获胜(似乎总是可以用更“专业”的人工智能技术获胜,但我对此并不确定。)
initiateModel();
while(!game_over)
{
checkCornerChosen(); // Unimplemented, but it might be an improvement to change the reference point
for each 3 possible move:
evaluateResult()
execute move with best score
if no move is available, execute forbidden move and undo, recalculateModel()
}
evaluateResult() {
calculatesBestCurrentModel()
calculates distance to chosen model
stores result
}
calculateBestCurrentModel() {
(according to the current highest tile acheived and their distribution)
}
关于缺失步骤的几点提示。在这里:
由于运气更接近预期模型,模型发生了变化。人工智能试图实现的模型是
512 256 128 x
X X x x
X X x x
x x x x
实现这一目标的链条变成了:
512 256 64 O
8 16 32 O
4 x x x
x x x x
O代表禁区。。。
因此,它将向右,然后再向右,然后(向右或向右,取决于4创建的位置),然后继续完成链,直到它得到:
因此,现在模型和链又回到了:
512 256 128 64
4 8 16 32
X X x x
x x x x
第二个指针,它运气不好,它的主要位置已经被占据。它很可能会失败,但仍能实现:
这里的模型和链是:
O 1024 512 256
O O O 128
8 16 32 64
4 x x x
当它设法达到128时,它将再次获得一整行:
O 1024 512 256
x x 128 128
x x x x
x x x x