Pyomo运输问题如何添加约束实现配送中心单工厂供货
Pyomo运输模型单源供货约束实现方案
给原有线性规划模型补充二进制决策变量与配套约束,将模型转为混合整数规划,即可实现每个配送中心仅由单家工厂供货的业务规则,具体修改步骤如下:
核心修改逻辑
单源供货规则的本质是为每个配送中心做0-1供货方选择:
- 新增二进制变量标记「某工厂是否为某配送中心的唯一供货方」
- 约束每个配送中心只能选中1家供货工厂
- 强制非选中工厂到对应配送中心的运输量为0
具体代码修改
1. 新增二进制决策变量
在原有连续运输量变量model.x的定义后,添加0-1类型的供货标记变量:
# 二进制变量:y[i,j]=1 表示工厂i为配送中心j的供货方,0表示不供货 model.y = Var(model.i, model.j, domain=Binary)
2. 添加单源选择约束
保证每个配送中心有且仅有1家供货工厂:
# 约束规则:每个配送中心仅能选择1家工厂供货 def single_source_constraint(model, j): return sum(model.y[i, j] for i in model.i) == 1 model.single_source = Constraint(model.j, rule=single_source_constraint)
3. 绑定运输量与供货标记
通过大M法建立运输量和供货标记的关联:如果某工厂未被选中为配送中心供货,则对应路径的运输量必须为0。这里大M取对应配送中心的需求量即可,边界最紧、求解效率最高:
# 约束规则:非供货工厂到配送中心的运输量强制为0 def x_y_link_constraint(model, i, j): return model.x[i, j] <= model.b[j] * model.y[i, j] model.x_y_link = Constraint(model.i, model.j, rule=x_y_link_constraint)
运行说明
- 原有代码使用的
glpk求解器原生支持混合整数规划,无需更换求解器,直接运行即可 - 原有产能约束、需求约束、目标函数均不需要修改,模型会自动在单源供货的可行域内寻找总成本最低的方案
- 按给出的参数计算,修改后DC3将由Factory B独家供货(Factory C剩余产能仅1300件,无法满足DC3的1800件需求),不会再出现多工厂共同供货的情况
内容的提问来源于stack exchange,提问作者Hookstark
相关产品推荐
相关产品推荐

