2013-04-19 1 views
7

Пытаясь использовать модуль оптимизации scipy для поиска минимума функции с помощью slsqp, и я сталкиваюсь с некоторыми проблемами. Фактический код вызова функции приведен ниже:Исключительная ошибка с использованием модуля оптимизации. Ошибка преобразования массива в fortran

def minimizeWebEnergyLost(x, parameters): 
    """values = [theta, velocity]""" 
    firstTerm = lambda values: (x * values[1]**2/2.0) 
    sqrtTerm = lambda values: np.sqrt((parameters.gravity**2 * x**2)/(4 * values[1]**4 * np.cos(values[0])**4) + 1) 
    secondTerm = lambda values: (values[1]**4 * np.cos(values[0])**2)/parameters.gravity 
    arcsinhTerm = lambda values: np.arcsinh((parameters.gravity * x)/(2 * values[1]**2 * np.cos(values[0])**2)) 
    costFunction = lambda values: firstTerm(values)*sqrtTerm(values)+secondTerm(values)*arcsinhTerm(values) 
    bounds = ((-math.pi/2,math.pi/2),(0,parameters.maxSlingSpeed)) 
    minimum = minimize(costFunction, (pi/4, 20), method="SLSQP", bounds=bounds) 
    return minimum 

По какой-то причине ошибки я получаю следующим образом:

_slsqp.error: failed in converting 8th argument `g' of _slsqp.slsqp to C/Fortran array 

Не совсем уверен, что происходит HRE, но я могу поставить больше кода, который может быть полезен, если это поможет.

+0

Получаете ли вы ту же ошибку с версией 'scipy.optimize.fmin_slsqp'? –

+0

Точно такая же ошибка, когда я использую эту версию. –

+1

Действительно ли для вас работает простой пример? Например. 'def costFunction (x): retun x [0] ** 2 + x [1] ** 2' и т. д. Кроме того, какую версию scipy вы используете? –

ответ

0

Эта критическая ошибка возникает, когда пользовательская целевая функция не возвращает скаляр. Сообщение об ошибке ясно теперь возвращается в пластыре b-carter,

"Objective function must return a scalar" 

и документация обновляется, см this нити для обсуждения.

Смежные вопросы