Оптимизация функции с использованием пакета Scipy - PullRequest
1 голос
/ 05 августа 2020

Мне дана целевая функция, которую мне нужно максимизировать, используя нелинейный оптимизатор в Python. Я понимаю, что многие оптимизаторы написаны как минимизации, но у меня возникают проблемы с настройкой параметров, учитывая, что у меня есть несколько ограничений неравенство . Я проверил корни своей целевой функции с помощью оптимизатора Wolfram Alpha и получил x = 1,86121 и y = 1,07457.

Я также планирую проверить эти корни и найти множители Лагранжа, используя подход Лагранжа. Кто-нибудь знает, как настроить эту проблему оптимизации с помощью Scipy.optimize. Я считаю, что мне нужно установить ограничения как отдельные функции, но я не знаю, как это сделать. Спасибо.

Целевая функция: развернуть 5-x ^ 2-xy-3y ^ 2

Возможны ограничения: x> = 0, y> = 0 и xy> = 2

1 Ответ

2 голосов
/ 05 августа 2020
import numpy as np
import scipy.optimize

def obj(x):
    return -1 * (5 - x[0]**2 - x[0]*x[1] - 3*x[1]**2)

def cons(x):
    return x[0]*x[1] - 2

result = scipy.optimize.minimize(fun = obj, x0 = [1, 1], bounds=[(0, np.inf), (0, np.inf)], constraints={"fun": cons, "type": "ineq"})

Проверить это .

...