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

Python MIP调用Gurobi添加二进制变量时报TypeError错误如何解决

问题原因
  1. 底层参数类型不匹配:Gurobi的C接口GRBaddvar要求变量类型参数为单个字符的bytes值(二进制对应b'B'、整数对应b'I'、连续变量对应b'C'),但python-mip适配层直接对传入的BINARY常量做encode,若常量值为字符串"BINARY",encode后得到的是长度为6的bytes,不符合接口要求触发报错。
  2. 版本兼容bug:该问题为python-mip 1.15.x版本适配Gurobi 9.5及以上版本的已知问题,官方未在该分支修复。
    注:报错堆栈指向name参数行是cffi参数校验的顺序显示偏差,实际问题出在vtype参数不符合要求
可行解决方案
  • 方案1:替换变量类型入参为单字符
    直接传入单字符表示变量类型,无需使用python-mip自带的类型常量,修改后的代码如下:
    m = Model(sense=MAXIMIZE, solver_name=GRB)
    
    x = m.add_var()
    n = 10
    # 用单字符'B'代替BINARY常量
    y = [ m.add_var(var_type='B') for i in range(n) ]
    
    同理整数变量传var_type='I',连续变量传var_type='C'即可。
  • 方案2:修改本地适配代码
    打开报错提示的mip/gurobi.py文件,找到add_var函数中的vtype = var_type.encode("utf-8")行,替换为如下内容:
    type_mapping = {
        "BINARY": b"B",
        "INTEGER": b"I",
        "CONTINUOUS": b"C",
        "B": b"B",
        "I": b"I",
        "C": b"C"
    }
    vtype = type_mapping.get(var_type, b"C")
    
    直接将变量类型映射为Gurobi要求的单字符bytes,无需encode处理。
  • 方案3:降级python-mip版本
    安装无该兼容bug的1.14.0版本:
    pip install python-mip==1.14.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:04