2013-04-19 25 views
7

Cố gắng sử dụng mô-đun tối ưu hóa của scipy để tìm tối thiểu hàm bằng cách sử dụng slsqp và tôi đang gặp phải một số vấn đề. Mã thực tế gọi hàm được hiển thị dưới đây:Lỗi scipy bằng mô-đun tối ưu hóa. Không chuyển đổi mảng thành 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 

Đối với một số lý do lỗi tôi nhận được là như sau:

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

Không khá chắc chắn những gì đang xảy ra HRE, nhưng tôi có thể đưa lên bất kỳ mã nào khác có thể hữu ích nếu nó hữu ích.

+0

Bạn có gặp lỗi tương tự với phiên bản 'scipy.optimize.fmin_slsqp' thay thế không? –

+0

Chính xác lỗi tương tự khi tôi sử dụng phiên bản đó. –

+1

Ví dụ thực sự đơn giản có phù hợp với bạn không? Ví dụ. 'def costFunction (x): retun x [0] ** 2 + x [1] ** 2', v.v. Ngoài ra, bạn đang sử dụng phiên bản scipy nào? –

Trả lời

0

Lỗi khó hiểu này xảy ra khi người dùng chỉ định hàm mục tiêu không trả về vô hướng. Một thông báo lỗi rõ ràng bây giờ được trả lại trong một bản vá bởi b-carter,

"Objective function must return a scalar" 

và các tài liệu được cập nhật, xem this chủ đề để thảo luận.

Các vấn đề liên quan