#python #scipy #constraints #minimize
#python #scipy #ограничения #свернуть
Вопрос:
Привет, я решаю проблему минимизации, и я хотел попробовать 'trust-constr'
метод с помощью функции scipy optimize.minimize
, чтобы сравнить его с результатами ‘SLSQP’. К сожалению, я не знаю, почему, когда я устанавливаю свой метод 'trust-constr'
, он сообщает мне, что :
Передается ошибка constraint
значения неизвестного типа.
Код следующий:
con1 = {'type':'eq', 'fun': eq2}
con2 = {'type':'ineq', 'fun' : ieq_bck2}
con3 = {'type':'ineq', 'fun' : ineq_rb2}
con4 = {'type':'ineq', 'fun' : ls2}
con = ([con1, con2, con3, con4])
scipy.optimize.minimize(fitness2, opt, method = 'trust-constr', jac =
'cs', hess = h1, constraints = con)
Есть идеи, как это решить?
Ответ №1:
Согласно документации Scipy, ваша переменная con
должна быть словарем. Существует также пример, con должен быть чем-то вроде:
cons = ({'type': 'ineq', 'fun': lambda x: x[0] - 2 * x[1] 2},
{'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] 6},
{'type': 'ineq', 'fun': lambda x: -x[0] 2 * x[1] 2})
Итак, в вашем случае сделайте это:
con = (con1, con2, con3, con4)
Комментарии:
1. по-прежнему не работает, даже если я делаю это таким образом, появляется то же сообщение об ошибке
2. хорошо, тогда можете ли вы дополнить свой вопрос минимальным примером кода, который я могу воспроизвести?
3. Я обнаружил проблему, для случая ‘trust-constr’ вам нужно создать ограничения через функцию LinearConstraint того же модуля, для других вариантов эта проблема не встречается