如何指定至少一个决策变量应在 python 纸浆中取最小值?
How to specify at least one decision variable should take minimum value in python pulp?
我在 python 的 LP 帮助下用 PULP 解决了基本问题。现在我想再添加一个条件约束来指定至少一个决策变量应取最小值 2。
prob = LpProblem("Minimizing cost", LpMinimize)
A = LpVariable("A", lowBound=0, cat='Integer')
B = LpVariable("B", lowBound=0, cat='Integer')
C = LpVariable("C", lowBound=0, cat='Integer')
prob += 44550*A +70570*B + 132835*C
prob += 1.014996087*A + 2.029992174*B + 4.060195806*C >= 5
prob += A+B+C <= 50
status = prob.solve()
print('Status:', LpStatus[status])
value(A), value(B), value(C), value(prob.objective)
Returns以下回答:
Status: Optimal
(1.0, 0.0, 1.0, 177385.0)
这里A=1,C=1。
如何指定A、B、C其中之一取最小值2.
有了一些额外的二进制变量 α,β,γ 我们可以制定:
A ≥ 2α
B ≥ 2β
C ≥ 2γ
α+β+γ ≥ 1
α,β,γ ∈ {0,1}
此型号:"at least one of A,B,C should be ≥ 2"。这些是简单的线性不等式,可以直接在 Pulp 中实现。
我在 python 的 LP 帮助下用 PULP 解决了基本问题。现在我想再添加一个条件约束来指定至少一个决策变量应取最小值 2。
prob = LpProblem("Minimizing cost", LpMinimize)
A = LpVariable("A", lowBound=0, cat='Integer')
B = LpVariable("B", lowBound=0, cat='Integer')
C = LpVariable("C", lowBound=0, cat='Integer')
prob += 44550*A +70570*B + 132835*C
prob += 1.014996087*A + 2.029992174*B + 4.060195806*C >= 5
prob += A+B+C <= 50
status = prob.solve()
print('Status:', LpStatus[status])
value(A), value(B), value(C), value(prob.objective)
Returns以下回答:
Status: Optimal
(1.0, 0.0, 1.0, 177385.0)
这里A=1,C=1。 如何指定A、B、C其中之一取最小值2.
有了一些额外的二进制变量 α,β,γ 我们可以制定:
A ≥ 2α
B ≥ 2β
C ≥ 2γ
α+β+γ ≥ 1
α,β,γ ∈ {0,1}
此型号:"at least one of A,B,C should be ≥ 2"。这些是简单的线性不等式,可以直接在 Pulp 中实现。