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

LP变量声明为Binary但求解结果为Continuous的修复方案求助

问题根因

你当前求解的是带二进制变量的混合整数线性规划(MILP)问题,出现二进制变量输出连续值的核心原因如下:

  • 默认调用了仅支持纯线性规划(LP)的求解器,求解器自动放松了整数约束,将声明为Binary的变量当做连续变量处理
  • 整数容忍度参数设置过松,求解器未强制要求整数变量严格取0/1值
  • 你提供的关联约束逻辑本身没有语法错误,不会导致二进制变量类型失效

修复方案

1. 显式指定支持MILP的求解器

PuLP自带的CBC求解器支持整数规划,你需要在求解时显式调用,避免调用到仅支持LP的求解器,替换原有的求解代码即可:

# 替换原prob.solve()为以下内容
solver = pulp.PULP_CBC_CMD(msg=False)
prob.solve(solver)

求解完成后先确认求解状态是否正常:

print("求解状态:", pulp.LpStatus[prob.status])

如果状态不是Optimal,说明问题本身无解或求解未完成,也会导致变量输出异常值。

2. 调整整数容忍度(可选)

如果求解后仍出现极小偏离0/1的浮点值(比如1e-6、0.999999),可以收紧整数容忍度阈值:

solver = pulp.PULP_CBC_CMD(msg=False, options=["--integerTolerance 1e-9"])
prob.solve(solver)

3. 变量定义简化(可选)

Binary类型变量默认上下界就是0和1,不需要额外声明lowBound=0,可以简化定义代码:

assignments = LpVariable.dicts("assignments",[(week,day,room,nurse,length) for week in weeks for day in days for room in 
                                              operating_rooms for nurse in nurses for length in shift_lengths], cat='Binary')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:18:03