2013-04-19 8 views
7

scipyの最適化モジュールを使用して、slsqpを使用して最小限の関数を見つけようとしましたが、いくつかの問題があります。関数を呼び出す実際のコードを以下に示します。最適化モジュールを使用したScipyエラー。配列を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 

何らかの理由で、次のように私は取得していますエラーは次のとおりです。HREに何が起こっているのか

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

かなりわからないが、私は我慢することができますそれが役立つ場合に役立つかもしれないコードはこれ以上ありません。

+0

代わりに 'scipy.optimize.fmin_slsqp'バージョンで同じエラーが発生しますか? –

+0

そのバージョンを使用するとまったく同じエラーが発生します。 –

+1

本当に簡単な例があなたに適していますか?例えば。 'def costFunction(x):retun x [0] ** 2 + x [1] ** 2'など。また、どのscipyのバージョンを使用していますか? –

答えて

0

ユーザが指定した目的関数がスカラを返さない場合に発生するこの不明瞭なエラーです。明確なエラーメッセージが今

"Objective function must return a scalar" 

b-carterによってパッチに返され、文書は議論のthisスレッドを参照、更新されます。

関連する問題