【问题标题】:Logical OR constraint in PulPPulP 中的逻辑或约束
【发布时间】:2022-11-05 00:06:20
【问题描述】:
我是纸浆新手。下面是优化问题。
假设 x11、x12、x13 是 FG1 的单位,分别装载在中型卡车 1、小型卡车和中型卡车 2 上。类似地,将 x21,x22,x23 视为变量,分别表示要装载在中型卡车 1、小型卡车和中型卡车 2 上的 FG2 单元。
此处的目标是将两种产品的总数量 = 2011(FG1 = 900,FG2 = 1111)分配到 2 辆中型卡车和 1 辆小型卡车中。提到的面积、体积和重量有一些限制。
还有一个额外的限制,如果 FG1 必须装载在任何卡车上,如果不是 0,最小数量应该是 60。意味着负载大于或等于 60 或 0。我无法弄清楚如何建模这样约束。请建议。
代码在评论中提到。
【问题讨论】:
标签:
python
mathematical-optimization
pulp
【解决方案1】:
!pip install PulP
from pulp import LpMinimize, LpProblem, LpStatus, lpSum, LpVariable
!apt-get install -y -qq glpk-utils
import pulp as pl
solver = pl.GLPK_CMD()
model = LpProblem(name="load_receipts", sense=LpMinimize)
x11 = LpVariable(name="x11", lowBound=0, cat='Continuous')
x12 = LpVariable(name="x12", lowBound=0, cat='Continuous')
x13 = LpVariable(name="x13", lowBound=0, cat='Continuous')
x21 = LpVariable(name="x21", lowBound=0, cat='Continuous')
x22 = LpVariable(name="x22", lowBound=0, cat='Continuous')
x23 = LpVariable(name="x23", lowBound=0, cat='Continuous')
model += (0.5*x11 + 0.333333*x21 <= 400)
model += (0.5*x12 + 0.333333*x22 <= 200)
model += (0.5*x13 + 0.333333*x23 <= 400)
model += (0.25*x11 + 0.142857*x21 <= 200)
model += (0.25*x12 + 0.142857*x22 <= 100)
model += (0.25*x13 + 0.142857*x23 <= 200)
model += (0.001*x11 + 0.000125*x21 <= 50)
model += (0.001*x12 + 0.000125*x22 <= 25)
model += (0.001*x13 + 0.000125*x23 <= 50)
model += (x11 + x12 + x13 + x21 + x22 + x23 - 2011 == 0)
model += (x11 + x12 + x13 == 900)
model += (x21 + x22 + x23 == 1111)
model += x11 + x12 + x13 + x21 + x22 + x23-2011
status = model.solve(solver)
print(f"status: {model.status}, {LpStatus[model.status]}")
for var in model.variables():
print(f"{var.name}: {var.value()}")