Ограничение неизвестного типа, переданное функции

#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 того же модуля, для других вариантов эта проблема не встречается