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

井字棋Minimax算法逻辑问题:类型错误排查求助

问题分析与解决

错误TypeError: '<' not supported between instances of 'tuple' and 'float'的根源是:max_value和min_value函数的返回值逻辑错误。这两个函数本该返回当前状态下的最优效用值用于递归比较,但你现在让它们返回了new_action(坐标元组),导致递归时用元组和浮点数(v的初始值)进行大小比较,触发类型错误。

修正后的代码

def minimax(state):
    def max_value(state):
        if terminal(state):
            return (utility(state), None)  # 终端状态返回(效用值, 无动作)
        v = float('-inf')
        best_action = None
        for action in actions(state):
            # 递归获取子状态的最优效用值
            child_val, _ = min_value(result(state, action))
            if child_val > v:
                v = child_val
                best_action = action
        return (v, best_action)  # 返回(最优效用值, 对应动作)
        
    def min_value(state):
        if terminal(state):
            return (utility(state), None)
        v = float('inf')
        best_action = None
        for action in actions(state):
            child_val, _ = max_value(result(state, action))
            if child_val < v:
                v = child_val
                best_action = action
        return (v, best_action)

    if terminal(state):
        return None

    # 根据当前玩家调用对应函数,提取最优动作返回
    if player(state) == X:
        _, best_action = max_value(state)
    else:
        _, best_action = min_value(state)
    return best_action

关键修改说明

  • 让max_value和min_value返回**(效用值, 动作)**的元组,既满足递归时的效用值比较需求,又能记录当前状态的最优动作。
  • 递归调用时,只提取子状态的效用值参与大小比较,避免元组和浮点数的类型冲突。
  • 外层minimax函数最终只返回最优动作,符合AI调用时需要获取落子坐标的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:52:41