7

scipy の最適化モジュールを使用して、slsqp を使用して関数の最小値を見つけようとしていますが、いくつかの問題が発生しています。関数を呼び出す実際のコードを以下に示します。

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

何が起こっているのかよくわかりませんが、役に立ちそうなコードを追加できます。

4

1 に答える 1

0

この不可解なエラーは、ユーザーが指定した目的関数がスカラーを返さない場合に発生します。b-carterによるパッチで明確なエラー メッセージが返されるようになりました。

"Objective function must return a scalar" 

およびドキュメントが更新されました。議論については、このスレッドを参照してください。

于 2016-11-03T10:25:04.007 に答える