scipy.optimize.minimize возвращает решение, которое не удовлетворяет ограничениям проблемы.Зачем? - PullRequest
0 голосов
/ 24 декабря 2018

scipy.optimize.minimize создает решение, которое не удовлетворяет ограничениям, но в отчете говорится, что оптимизация успешно завершена.

Цель: (x [0] - 3) ** 2 + (x [1] - 2) ** 2

Ограничение: x [0] + x [1]<= 4 </p>

Правильное решение должно быть [2,5, 1,5]

Ответ от функции [3,2]

Я пробовал разные методы оптимизации.Пробовал без методов.Пробовал вариации по синтаксису.

Вот код (кажется, что он очень простой):

import numpy as np
from scipy import optimize

def f(x):
    return (x[0] - 3)**2 + (x[1] - 2)**2

def con(x):
    return sum(x)-4 

x0 = np.array([0, 0])
res=optimize.minimize(f, x0, method="SLSQP",constraints={"fun": con, "type": "ineq"}, options={'disp':True}) 
print(res)
print(sum(res.x)-4)

1 Ответ

0 голосов
/ 25 декабря 2018

ineq - это неравенство> = 0.Я предположил (основываясь на примерах, которые я видел), что это неравенство <= 0.Действительно, приведенный ниже код после исправления этой неверной интерпретации дает правильный ответ. </p>

import numpy as np from scipy import optimize

def f (x): return (x [0] -3) ** 2 + (x [1] - 2) ** 2

def con (x): вернуть 4-сумму (x)

x0 = np.array ([0, 0]) res = optimize.minimize (f, x0, method = "SLSQP", constraints = {"fun": con, "type": "ineq"}, options = {'disp': True}) print (res) print (sum (res.x) -4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...