2013-04-19 23 views
7

slsqp kullanarak bir fonksiyonun minimum bulmak için scipy en optimize modülü kullanmak çalışıyorum ve ben bazı sorunlarla çalıştırıyorum FORTRAN için. aşağıdaki gibi alıyorum hatadır NedenseOptimizasyon modülünü kullanarak Scipy hatası. Başarısızlık dönüştürme dizi

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 

: işlevini çağırarak gerçek kod aşağıda gösterilmiştir İHE'ye neler oldukça emin değil

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

ama koyabilirsiniz Yardım ederse faydalı olabilecek başka bir kod.

+0

Aynı hatayı "scipy.optimize.fmin_slsqp" sürümü yerine alıyor musunuz? –

+0

Bu sürümü kullandığımda tam olarak aynı hata. –

+1

Gerçekten basit bir örnek sizin için çalışıyor mu? Örneğin. 'def costFunction (x): retun x [0] ** 2 + x [1] ** 2' vb. Ayrıca, hangi scipy sürümünü kullanıyorsunuz? –

cevap

0

Bu kripto hatası, kullanıcı tarafından belirtilen amaç işlevi skaler döndürmezse oluşur. Net bir hata mesajı artık

"Objective function must return a scalar" 

, b-carter tarafından bir yama döndürülür ve dokümantasyon tartışma için this iplik bkz güncellenir.