Минимизируйте целевую функцию, используя PuLP - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть это уравнение

-0.19430381 * clo + 0.02507341 * vam + 0.13574366 * sla + 0.01667444 * so = 10

Мне нужно найти минимальные значенияКло, Вам, Шла и так, чтобы решить это уравнение.Я использовал PuLP, чтобы найти значения.

# declare your variables
clo = LpVariable("clo", 65, 80)
vam = LpVariable("vam", 63, 90)
sla = LpVariable("sla", 70, 80)
so = LpVariable("so", 75, 85)

# defines the problem
prob = LpProblem("problem", LpMinimize)

Целевая функция и ограничения записываются как

# defines the objective function to minimize
prob += -0.19430381*clo + 0.02507341*vam +  0.13574366*sla + 0.01667444*so-10 

#define Constraints
prob+= clo>=65
prob+= clo<=80
prob+= vam>=63
prob+= vam<=90
prob+= sla>=71
prob+= sla<=80
prob+= so>=75
prob+= so<=85

Когда я решаю с помощью решателя по умолчанию, он принимает значение верхней границы:80 для clo, пока он принимает нижнее граничное значение для всех остальных переменных.Значение целевой функции отрицательно.

print (pulp.value(prob.objective))
-13.21204077

Я хочу, чтобы значение этой целевой функции было равно 0. В таких случаях мне нужно найти значение всех параметров.Значения параметров также могут быть в плавающей точке.

1 Ответ

0 голосов
/ 11 февраля 2019

Проблема, как описано, не решаема.

Вы хотели бы достичь следующего ограничения равенства:

-0.19430381 * clo + 0.02507341 * vam + 0.13574366 * sla + 0.01667444* so == 10

С учетом следующих верхних и нижних границ переменных:

clo = LpVariable("clo", 65, 80)
vam = LpVariable("vam", 63, 90)
sla = LpVariable("sla", 70, 80)
so = LpVariable("so", 75, 85)

Рассмотрим ограничение равенства, если мы хотим сделать правуюмаксимально возможная сторона с учетом границ ограничения, мы бы выбрали vam, sla, so как можно больше, а clo - как можно меньше (так как он имеет отрицательный коэффициент в левой части).

Настройка: clo=65; vam=90; sla=80; so=85 мы получаем результат левой части ограничения равенства как: 1.9036794499999987.Любая другая комбинация значений (в пределах верхних / нижних границ) приведет к меньшей левой части - поэтому ограничение равенства не может быть выполнено, оно никогда не будет равно требуемой правой части 10.

...