You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面向1-8明牌凑15卡牌游戏的Bot开发最优算法咨询

该卡牌游戏最优获胜算法实现方案

前置建模

首先预计算所有1-8范围内3数之和为15的获胜三元组,作为所有决策的判断基准:

{1,6,8}, {2,5,8}, {2,6,7}, {3,4,8}, {3,5,7}, {4,5,6}

该对局为完全信息博弈,所有卡牌状态对双方透明,总状态空间极小(仅560种抽牌阶段结束后的手牌组合),可结合预计算规则+极小极大剪枝实现最优决策。

分阶段决策策略

1. 抽牌阶段(双方手牌均不足3张)

按优先级从高到低执行操作:

  • 最高优先级:如果拿取某张公共牌后自己直接凑齐获胜三元组,直接拿取该卡牌获胜
  • 次优先级:截断对手获胜路径:如果对手已有2张手牌,且存在唯一公共牌可与这2张凑成获胜组合,优先拿取该卡牌
  • 第三优先级:优先拿取出现在更多获胜组合中的高频卡牌,卡牌出现频次预计算结果:
    • 5:出现在3个获胜组合(最高频)
    • 2、6、8:各出现在2个获胜组合
    • 1、3、4、7:各出现在1个获胜组合
      高频卡牌可大幅提升后续凑出获胜组合的概率

2. 交换阶段(双方均持有3张手牌)

每回合需用1张手牌交换1张公共桌面牌,桌面固定剩余2张卡牌,按优先级从高到低执行操作:

  • 最高优先级:如果存在某组交换操作后自己手牌直接凑齐获胜三元组,直接执行该交换
  • 次优先级:截断对手获胜路径:如果对手交换某张桌面牌即可获胜,优先将该桌面牌换到自己手中
  • 第三优先级:执行交换后最大化自身潜在获胜路径数:计算交换后,自己手牌的二元组能和剩余可用卡牌(未被对手持有的卡牌)凑成获胜三元组的数量,选择该数值最大的交换方案
  • 最低优先级:所有操作收益相同时,优先将高频卡牌换到自己手中,压缩对手的获胜空间

核心工具伪代码

# 预定义所有获胜组合
WIN_COMBOS = [{1,6,8}, {2,5,8}, {2,6,7}, {3,4,8}, {3,5,7}, {4,5,6}]

# 判断当前手牌是否满足获胜条件
def is_win(hand: set) -> bool:
    return any(combo.issubset(hand) for combo in WIN_COMBOS)

# 计算当前手牌的可达成获胜路径数量
def count_win_paths(hand: set, available_cards: set) -> int:
    path_count = 0
    for combo in WIN_COMBOS:
        missing_card = combo - hand
        if len(missing_card) == 1 and missing_card.pop() in available_cards:
            path_count += 1
    return path_count

平局兜底策略

若双方均采用最优策略进入循环,可引入深度为5的极小极大剪枝算法遍历所有后续操作,选择能让己方最快获胜、对手最慢获胜的路径,完全覆盖30回合的限制要求。

内容的提问来源于stack exchange,提问作者mohammad javad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:45:03