-
27-10-2019 - |
题
我正在设计一种程序,以尽可能高的得分来解决单人纸牌游戏。 游戏在以下得分系统上得分: 通用标签
来自卡组的卡每次被翻转一次,并且允许玩家无限次翻转卡组(但是,-20分扣除仍然适用)。
我找到了各种策略指南,例如《 Windows纸牌游戏的克朗代克策略指南》 ,但是这些指南适用于不知道桌牌的真实单人纸牌游戏。
我正在寻找一种算法来解决所谓的“面朝上”单人纸牌游戏,在此之前我已经知道了套牌。 编辑:从下面答案中给出的论文来看,该游戏似乎被称为“体贴纸牌”。
到目前为止,我的想法是:某种蛮力逼迫,尝试并得分所有可能的动作;一种简单的算法,可以单独查看每一列并尝试“可以”进行的最佳移动;最后是一种类似于寻路的算法,在该算法中,对每一步进行评分并找到最佳的“路径”。
蛮力逼迫的问题在于,它将无限长(字面意义),因为您可以无限次重复动作。使用简单的算法,我无法完成一些棘手的事情,例如重新排列两列以放置所有的红心和球棒(例如)以释放仅8个红心。据我所知,寻路将起作用,但是我却迷失了这种实现方式。
解决方案
您可能会发现以下论文很有帮助(看来这已经由研究团队完成了。)
实时搜索纸牌:
其他提示
我要尝试的第一件事是一个朴素的固定步骤超前算法,其中在每一步中,我都会分析所有可能的n
步骤,然后选择导致最高总得分的方法。
在相同系列的伪随机数据包上使用不同的n
值来进行测试,并查看通过增加分数如何(如果有的话)提高分数。
如果这能带来合理的成功,则下一步是将点分配给您在评估过程中可以使用的某些位置。(例如,可以减去'downcard'ace到桩顶的距离。)
下一步可能是自适应搜索,在该搜索中,您首先要预见固定数量的步骤,然后再进一步扩展移动树的有希望的叶子。(基本上是修剪)。
以此类推,有很多可以尝试的方法,听起来很有趣,所以请尽情享受。
但是,如果其他所有方法都失败,请组织一场编码比赛。:)