Как указать хотя бы одну переменную решения, должна принимать минимальное значение в мякоти питона? - PullRequest
0 голосов
/ 25 июня 2018

Я решил основную проблему с помощью LP в python с 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)

Возвращает следующий ответ:

Status: Optimal
(1.0, 0.0, 1.0, 177385.0)

Здесь A = 1 и C = 1. Как я могу указать, что один из A, B, C должен принимать минимальное значение 2.

1 Ответ

0 голосов
/ 25 июня 2018

С некоторыми дополнительными бинарными переменными α, β, γ мы можем сформулировать:

A ≥ 2α 
B ≥ 2β
C ≥ 2γ
α+β+γ ≥ 1
α,β,γ ∈ {0,1} 

Это модели: «хотя бы один из A, B, C должен быть ≥ 2». Это простые линейные неравенства и могут быть реализованы непосредственно в Pulp.

...