Algorithm &引用;“面朝上”;纸牌算法

Algorithm &引用;“面朝上”;纸牌算法,algorithm,path-finding,brute-force,Algorithm,Path Finding,Brute Force,我正在设计一个程序,以尽可能高的得分方式解决纸牌游戏。 比赛按以下计分制计分: 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 t

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

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分仍然适用)

我找到了各种各样的策略指南,比如,但是这些指南是针对真正的纸牌游戏的,而这些游戏的桌牌是未知的

我希望创建一个算法来解决我所谓的“正面”纸牌游戏,在游戏开始之前,我已经掌握了纸牌组的知识编辑:从下面答案中给出的论文来看,这个游戏似乎被称为“深思熟虑的纸牌”

到目前为止,我的想法是:某种野蛮的强迫,所有可能的动作都被试过并得分;一个简单的算法,可以单独查看每一列,并尝试“最佳”移动它;最后是一种类似于寻路的算法,每一步都会被打分,找到最佳的“路径”


暴力强迫的问题是,你可以无限重复动作,这需要永远(字面上)的时间。用一个简单的算法,我不能做一些棘手的事情,比如重新排列两列来放置所有的红桃和球杆(例如)来释放一个单独的8颗红桃。在我看来,寻路是可行的,但我不知道这种实现是如何工作的。

你可能会发现下面的文章很有帮助(似乎一个研究团队已经完成了这项工作。)

实时搜索纸牌:

单人纸牌:人与机器


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

实时搜索纸牌:

单人纸牌:人与机器


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

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

如果这带来了合理的成功,那么下一步就是将分数分配给您可以在评估过程中使用的特定职位。(例如,“downcard”A从其桩顶的距离可以减去。)

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

诸如此类,你可以尝试很多,听起来很有趣,所以尽情享受吧


但是,如果所有这些都失败了,那就组织一场编码比赛。:)

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

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

如果这带来了合理的成功,那么下一步就是将分数分配给您可以在评估过程中使用的特定职位。(例如,“downcard”A从其桩顶的距离可以减去。)

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

诸如此类,你可以尝试很多,听起来很有趣,所以尽情享受吧


但是,如果所有这些都失败了,那就组织一场编码比赛。:)

你是想尽量减少甲板翻转的次数,还是只想找到一个解决方案?@6502,我想当OP说“以尽可能最有效的方式”时,他的意思可能是甲板翻转的次数被最小化了……很抱歉给你带来困惑。“可能的最有效方式”指的是得分最高的方式。你是想尽量减少甲板翻转的次数,还是只想找到一个解决方案?@6502,我想当OP说“可能的最有效方式”时,他可能是指甲板翻转的次数减到了最低……抱歉搞混了。我所说的“最有效的方式”是指得分最高的方式。