Я пытаюсь выяснить, что не так с моей реализацией, я ожидаю, что результат будет [5, 10]
, я не понимаю, как он получает [7.5, 7.5]
, x1
должен быть половиной x2
.Линейное программирование, неожиданное решение с ограничением равенства
from scipy.optimize import linprog
import numpy as np
c = [-1, -1]
A_eq = np.array([
[1, 0.5],
[1, -0.5],
])
b_eq = [15, 0]
x0_bounds = (0, None)
x1_bounds = (0, None)
res = linprog(
c,
A_eq=A_eq.transpose(),
b_eq=b_eq,
bounds=(x0_bounds, x1_bounds),
options={"disp": True})
print res.x
# =>
# Optimization terminated successfully.
# Current function value: -15.000000
# Iterations: 2
# [ 7.5 7.5]
Обновление от автора:
Как было сказано матрица транспонирования не требуется. Проблема была в самой матрице, для того, чтобы получить желаемый результат, который [5, 10]
, он должен быть:
A_eq = np.array([
[1, 1],
[1, -0.5],
])
Спасибо, оригинальный вопрос был без транспозиции матрицы, сделал это так бессознательно, вероятно, из-за позднего вечера, в основном выяснил, как достичь желаемого результата, первая строка в матрице должна быть '[1, 1]', спасибо еще раз. –
@RustyRobot приятно слышать, что вы узнали, где проблема. Добро пожаловать! :) –