Оптимизация Python Scipy с нижними границами (вместо A_ub)

#python #optimization

#python #оптимизация

Вопрос:

Прошлой ночью я потратил около 4-5 часов на поиск Stack Overflow, просматривал документы scipy optimize и т. Д. И Не смог найти ответа на свою проблему. Мой вопрос в том, как мне установить нижние границы для уравнения оптимизации, когда опция, похоже, предназначена только для верхней границы? Пожалуйста, посмотрите мое уравнение и код ниже.

 import numpy as np
from scipy.optimize import linprog
from numpy.linalg import solve

c = np.array([4,7,5])
A = np.array([[4,1,10],[3,2,1],[0,4,5]])
b = np.array([10,12,20])

res = linprog(c,A_ub = A,b_ub = b)
print(res)
  

минимизация (4,7,5)

 ('Optimal value:', -0.0, 'nX:', array([ 0.,  0.,  0.]))
     fun: -0.0
 message: 'Optimization terminated successfully.'
     nit: 0
   slack: array([ 10.,  12.,  20.])
  status: 0
 success: True
       x: array([ 0.,  0.,  0.])
  

максимизация (-4, -7, -5)

 ('Optimal value:', -37.666666666666664, 'nX:', array([ 0.66666667,  5.            `    ,  0.        ]))`
     fun: -37.666666666666664
 message: 'Optimization terminated successfully.'
     nit: 2
   slack: array([ 2.33333333,  0.        ,  0.        ])
  status: 0
 success: True
       x: array([ 0.66666667,  5.        ,  0.        ])
  

Это дает мне ответ в первом, чтобы минимизировать x1, x2, x3, который, очевидно, показывает все нули. 2-й ответ максимизирует функцию, если каждый <=10,<=12,<=20 потому что очевидно, что это верхняя граница. Мне нужен наилучший возможный ответ, основанный на том, что >=10,>=12,>=20 минимизация по функции.

Извините, если это просто! Я потратил много часов на поиск в Интернете…

Ответ №1:

a'x >= b совпадает с -a'x <= -b . Т.е. умножьте >= неравенство на -1.

Комментарии:

1. Спасибо! Я такой плохой… Я изучаю историю, сейчас пытаюсь изучать математику =) Как я могу поддержать вас? У меня репутация менее 15… большое спасибо!

2. Не беспокойтесь об этом.