0

我正在设计一个程序,以尽可能高分的方式解决纸牌游戏。比赛按以下计分系统计分:

10 points for moving Aces to top
9 points for moving 2s to top
8 points for moving 3s to top
7 points for moving 4s to top
6 points for moving 5s to top
5 points for moving 6s to top
4 points for moving 7s to top
3 points for moving 8s to top
2 points for moving 9s to top
1 points for moving 10s or face-cards to top
2 points for freeing a "downcard" (face-down card on the table)
2 points for moving a card from the deck to the table
-2 points deducted for moving a card from the top to the table
-20 points deducted for flipping over the deck
Putting a card back to the top after moving it from the top to the table does not give double points.

牌组中的牌一次翻转一张,玩家可以无限次翻转牌组(但是,-20 分扣除仍然适用)。

我找到了各种策略指南,例如Windows Solitaire Game 的 Klondike 策略指南,但这些指南适用于桌牌未知的真实纸牌游戏。

我正在寻找一种算法来解决我所谓的“面朝上”纸牌游戏,在这种游戏中,我在发牌之前就已经了解了套牌。编辑:从下面答案中给出的论文来看,这个游戏似乎被称为“深思熟虑的纸牌”。

到目前为止,我的想法是:某种蛮力,尝试所有可能的动作并得分;一个简单的算法,单独查看每一列并尝试它可以的“最佳”移动;最后是某种类似于寻路的算法,对每一步进行评分并找到最佳“路径”。

蛮力的问题在于它会永远(字面意思)因为你可以无限地重复移动。使用简单的算法,我不能做一些棘手的事情,比如重新排列两列来放置所有的红心和梅花(例如)来释放一个单独的 8 个红心。从我所见,寻路将起作用,但我对这种实现如何工作感到迷茫。

4

2 回答 2

4

您可能会发现以下论文很有帮助(似乎这已经由一个研究团队完成了。)

实时搜索纸牌:

纸牌:人与机器

于 2011-01-31T00:42:30.430 回答
1

我要尝试的第一件事是一个简单的固定步长前瞻算法,在每一步,我都会分析所有可能的n步骤,然后选择总分最高的那个。

在同一系列的伪随机包上玩不同的值,n看看(如果有的话)分数如何通过增加它来提高。

如果这带来了合理的成功,那么下一步就是将分数分配给您可以在评估过程中使用的某些位置。(例如,可以减去“下牌”A 与他们的牌堆顶部的距离。)

下一步可能是自适应搜索,您首先向前看固定数量的步骤,然后仅进一步扩展移动树的有希望的叶子。(基本上是修剪。)

等等,你可以尝试很多,听起来很有趣,所以尽情享受吧。

但是,如果一切都失败了,请组织一次编码比赛。:)

于 2011-01-31T00:42:53.007 回答