PuLP в Python не находит максимум - PullRequest
0 голосов
/ 03 ноября 2018

Я уже давно пользуюсь приведенным ниже кодом, и он всегда мог найти максимум / мин, кроме как сейчас.

Я получаю одну угловую точку: x = 168, y = 192, цель = 3288

Но есть угловая точка, которая является истинным максимумом: x = 0, y = 304, цель = 3344

Что я делаю неправильно, что делает этот код неспособным найти x, y, который действительно максимизирует цель?

from pulp import LpVariable, LpProblem, LpMaximize, LpStatus, value, LpMinimize

# declare your variables
x = LpVariable("y1", 0, None)
y = LpVariable("y2", 0, None)

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

# defines the constraints
prob += 1/2*x+3/4*y == 228
prob += 1/2*x+1/4*y == 132

# defines the objective function to maximize
prob += 7*x+11*y

# solve the problem
status = prob.solve()
LpStatus[status]
# print the results
print('x={0},y={1}.'.format(round(value(x)),round(value(y))))
print("The objective is ${}.".format(round(value(prob.objective))))

1 Ответ

0 голосов
/ 03 ноября 2018

Рассмотрим ограничение prob += 1/2*x+1/4*y == 132.
Если вы установите x=0 и y=304, это ограничение будет нарушено (76 ≠ 132).
Чтобы проверить решение, вы можете просто добавить ограничения:

prob+= x == 0
prob+= y == 304

status = prob.solve()
print(LpStatus[status])

который выводит Невозможно .

...