проблема с ограничениями в минимизации от scipy.optimize - PullRequest
0 голосов
/ 07 октября 2018

Я немного искал об этом и не смог решить эту проблему.Я работаю с функцией минимизации из scipy.optimize и продолжаю получать сообщение об ошибке:

'str' объект не может быть вызван.

Мой код сложен, поэтому япосмотрел простой пример онлайн, чтобы убедиться, что я все правильно вводил, и все равно получил ту же ошибку.Вот простой пример, который я нашел на youtube:

https://www.youtube.com/watch?v=cXHvC_FGx24

import numpy as np
from scipy.optimize import minimize

def objective(x):
    x1=x[0]
    x2=x[1]
    x3=x[2]
    x4=x[3]
    return x1*x4*(x1+x2+x3)+x3

def constraint1(x):
    return x[0]*x[1]*x[2]*x[3]-25

def constraint2(x):
    sum_sq = np.sum(np.square(x))
    return sum_sq-40


x0=[1,5,5,1]
b=(1, 5)
bnds = (b,b,b,b)
con1 = {'type':'ineq','fun':'constraint1'}
con2 = {'type':'eq','fun':'constraint2'}
cons=[con1,con2]

sol=minimize(objective, x0, method='SLSQP',bounds=bnds,constraints=cons)

Это код непосредственно из примера на youtube, который, кажется, правильно работает на чужоммашина, но не моя.Что я тут не так понял?

[РЕДАКТИРОВАТЬ: Если я уберу ограничения, то все работает нормально.Что плохого в том, как я ввожу функции ограничения?]

Большое спасибо за то время.

1 Ответ

0 голосов
/ 07 октября 2018

Ошибка в ваших ограничениях.Вы передаете строку вместо функций для ваших ограничений.Просто измените его на:

con1 = {'type':'ineq','fun': constraint1 }
con2 = {'type':'eq','fun': constraint2 }
cons=[con1,con2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...