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
相关产品推荐
相关产品推荐

