2008-09-08 38 views
27

Có một giải pháp thay thế nguồn mở nào cho chức năng fmincon của MATLAB để tối ưu hóa tuyến tính bị hạn chế không? Tôi đang viết lại một chương trình MATLAB để sử dụng Python/NumPy/SciPy và đây là hàm duy nhất mà tôi không tìm thấy tương đương. Một giải pháp dựa trên NumPy sẽ là lý tưởng, nhưng bất kỳ ngôn ngữ nào cũng sẽ làm được.Nguồn mở thay thế cho chức năng fmincon của MATLAB?

+0

Bạn đã thử Jmodelica chưa? Nó là một triển khai mã nguồn mở của ngôn ngữ Modelica bên cạnh OpenModelica. Tôi nghĩ Modelica cũng có trình bao bọc Python. Gói Jmodelica đi kèm với một công cụ tối ưu hóa được gọi là Optimica nếu tôi không nhầm. – Foad

Trả lời

26

Sự cố của bạn có bị lồi không? Tuyến tính? Phi tuyến tính? Tôi đồng ý rằng SciPy.optimize có thể sẽ thực hiện công việc, nhưng fmincon là một loại bazooka để giải quyết các vấn đề tối ưu hóa, và bạn sẽ tốt hơn nếu bạn có thể hạn chế nó theo một trong các loại dưới đây (ở mức độ khó giải quyết ngày càng tăng) hiệu quả)

tuyến tính Chương trình (LP) Quadratic Chương trình (QP) lồi Chương trình bậc hai bậc hai-Constrained (QCQP) Chương trình Cone Nhì (SOCP) Semidefinite Chương trình (SDP) Non-Linear lồi vấn đề phi Vấn đề lồi

Ngoài ra còn có các vấn đề về tổ hợp như Chương trình tuyến tính hỗn hợp-Integer (MILP), nhưng bạn không có nam giới tion bất kỳ loại ràng buộc tích hợp nào, đủ để nói rằng chúng rơi vào một lớp khác nhau của các vấn đề.

Gói CVXOpt sẽ hữu ích cho bạn nếu vấn đề của bạn bị lồi.

Nếu vấn đề của bạn không lồi, bạn cần phải lựa chọn giữa việc tìm kiếm giải pháp cục bộ hoặc giải pháp toàn cầu. Nhiều công cụ giải quyết lồi lõm 'hoạt động' trong một miền không lồi. Việc tìm kiếm một xấp xỉ tốt cho giải pháp toàn cầu sẽ yêu cầu một số thuật toán mô phỏng hoặc giải mã di truyền mô phỏng. Việc tìm ra giải pháp toàn cầu sẽ yêu cầu liệt kê tất cả các giải pháp cục bộ hoặc chiến lược tổ hợp như Branch and Bound.

1

Có một chương trình được gọi là SciLab là bản sao MATLAB.

Tôi chưa từng sử dụng nó, nhưng nó là nguồn mở và có thể có chức năng bạn đang tìm kiếm.

0

Tôi không biết nếu nó ở đó, nhưng có một phân phối python gọi là Enthought có thể có những gì bạn đang tìm kiếm. Nó được thiết kế đặc biệt để phân tích dữ liệu có hơn 60 thư viện bổ sung.

+1

Hai người khác đã thêm các liên kết không chắc chắn liệu đề xuất của họ có áp dụng những gì mà người đăng ban đầu muốn hay không. Tại sao các phiếu bầu xuống. Một bình luận sẽ được tốt đẹp ở đây. – wcm

13

Gói Python mã nguồn mở, SciPy, có một tập hợp lớn các thói quen tối ưu hóa bao gồm một số cho các vấn đề đa biến với các ràng buộc (đó là điều mà tôi nghĩ là fmincon). Một khi bạn đã cài đặt scipy gõ lệnh sau tại Python command prompt

giúp đỡ (scipy.optimize)

Các tài liệu kết quả là rộng lớn và bao gồm những điều sau đây mà tôi tin rằng có thể được sử dụng cho bạn.

Constrained Optimizers (multivariate) 

    fmin_l_bfgs_b -- Zhu, Byrd, and Nocedal's L-BFGS-B constrained optimizer 
         (if you use this please quote their papers -- see help) 

    fmin_tnc  -- Truncated Newton Code originally written by Stephen Nash and 
         adapted to C by Jean-Sebastien Roy. 

    fmin_cobyla -- Constrained Optimization BY Linear Approximation 
1

Hãy xem http://www.aemdesign.com/downloadfsqp.htm.

Ở đó bạn sẽ tìm thấy mã C cung cấp chức năng giống như fmincon. (Tuy nhiên, sử dụng thuật toán khác. Bạn có thể đọc hướng dẫn nếu bạn quan tâm đến chi tiết.)

Đó là mã nguồn mở nhưng không phải theo GPL.

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