Работа вам нужна срочно. Не волнуйтесь, уложимся!
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Реши с помощью Python
Дано линейное оптимизационное задание:
Функция цели:
F = 5x_1 + 4x_2 - 3x_3 + 4x_4 + 2x_5
Ограничения:
\begin{cases} x_1 + 2x_2 + 3x_3 - x_4 - 2x_5 = 26, \ 2x_1 + 5x_2 + 3x_3 + 2x_4 - 3x_5 = 62, \ 2x_1 + 6x_2 + 5x_3 + x_4 - 3x_5 = 66, \ x_j \geq 0, \quad j = \overline{1,5}. \end{cases}
Решим задачу с помощью Python, используя библиотеку scipy.optimize
.
from scipy.optimize import linprog
# Коэффициенты целевой функции (коэффициенты при x)
c = [-5, -4, 3, -4, -2] # Так как scipy.optimize.minimize минимизирует, берем отрицательные коэффициенты
# Коэффициенты ограничений
A_eq = [
[1, 2, 3, -1, -2],
[2, 5, 3, 2, -3],
[2, 6, 5, 1, -3]
]
# Правая часть ограничений
b_eq = [26, 62, 66]
# Границы переменных (все переменные неотрицательные)
x_bounds = [(0, None)] * 5
# Решение задачи
res = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=x_bounds, method='highs')
# Вывод результатов
if res.success:
print("Оптимальное решение найдено:")
print("Значения переменных:", res.x)
print("Оптимальное значение F:", -res.fun) # Берем с минусом, так как минимизировали -F
else:
print("Решение не найдено.")
linprog
выполняет минимизацию, мы берем отрицательные коэффициенты.linprog
с методом highs
.Этот код найдет оптимальное решение задачи линейного программирования.