Tôi làm việc trong một phòng thí nghiệm tối ưu hóa toàn cầu các vấn đề hỗn hợp số nguyên và không lồi. Kinh nghiệm của tôi với các bộ giải tối ưu hóa nguồn mở là những cái tốt hơn thường được viết bằng ngôn ngữ được biên dịch và chúng có giá thấp hơn so với các gói tối ưu hóa thương mại.
Nếu bạn có thể hình thành vấn đề của mình như một hệ phương trình rõ ràng và cần một người giải miễn phí, thì cách tốt nhất của bạn có lẽ là IPOPT, như Aron nói. Những người giải quyết miễn phí khác có thể được tìm thấy trên trang web COIN-OR . Theo hiểu biết của tôi, các bộ giải phi tuyến không có các ràng buộc Python được cung cấp bởi các nhà phát triển; bất kỳ ràng buộc nào bạn tìm thấy sẽ là bên thứ ba. Để có được các giải pháp tốt, bạn cũng sẽ phải bọc bất kỳ bộ giải phi tuyến, lồi nào bạn tìm thấy trong các phương pháp tối ưu hóa toàn cầu ngẫu nhiên thích hợp hoặc trong thuật toán tối ưu hóa toàn cầu xác định như phân nhánh và liên kết. Ngoài ra, bạn có thể sử dụng Bonmin hoặc Couenne, cả hai đều là các bộ giải tối ưu hóa không lồi xác định, hoạt động tốt so với bộ giải hiện đại, BARON .
Nếu bạn có thể mua một bộ giải tối ưu hóa thương mại, bạn có thể xem xét việc xem xét ngôn ngữ mô hình hóa GAM , bao gồm một số bộ giải tối ưu hóa phi tuyến. Đặc biệt đề cập đến các giao diện cho bộ giải CONOPT, SNOPT và BARON. (CONOPT và SNOPT là các bộ giải lồi.) Một giải pháp loại bỏ mà tôi đã sử dụng trước đây là sử dụng các ràng buộc ngôn ngữ Fortran (hoặc Matlab) với GAM để viết tệp GAM và gọi GAM từ Fortran (hoặc Matlab) để tính toán giải pháp của một vấn đề tối ưu hóa. GAMS có các ràng buộc ngôn ngữ Python và một nhân viên hỗ trợ rất nhạy bén sẵn sàng giúp đỡ nếu có bất kỳ rắc rối nào. (Tuyên bố miễn trừ trách nhiệm: Tôi không có liên kết với GAM, nhưng phòng thí nghiệm của tôi có giấy phép GAM.) Người giải quyết thương mại không nên tệ hơnfmincon
; Thực tế, tôi sẽ ngạc nhiên nếu họ không tốt hơn nhiều. Nếu các vấn đề của bạn có kích thước đủ nhỏ, thì bạn thậm chí có thể không cần phải mua giấy phép GAM và giấy phép cho người giải quyết, bởi vì bản sao đánh giá của GAM có thể được tải xuống từ trang web của họ. Nếu không, có lẽ bạn sẽ muốn quyết định người mua nào sẽ mua cùng với giấy phép GAM. Điều đáng chú ý là BARON yêu cầu bộ giải lập trình tuyến tính số nguyên hỗn hợp và giấy phép cho hai bộ giải lập trình tuyến tính số nguyên hỗn hợp tốt nhất CPLEX và GUROBI là miễn phí cho các học giả, vì vậy bạn có thể thoát khỏi việc chỉ cần mua giao diện GAM hơn các giao diện và giấy phép người giải quyết, có thể giúp bạn tiết kiệm khá nhiều tiền.
Điểm này lặp đi lặp lại: đối với bất kỳ bộ giải tối ưu hóa không lồi xác định nào tôi đã đề cập ở trên, bạn cần có thể xây dựng mô hình như một bộ phương trình rõ ràng. Mặt khác, các thuật toán tối ưu hóa không lồi sẽ không hoạt động, bởi vì tất cả chúng đều dựa vào phân tích biểu tượng để xây dựng các thư giãn lồi cho các thuật toán giống như nhánh và liên kết.
CẬP NHẬT: Ban đầu, một suy nghĩ không xảy ra với tôi là bạn cũng có thể gọi Bộ công cụ để tối ưu hóa nâng cao ( TAO ) và PETSc sử dụng tao4py và petc4py , điều này sẽ có lợi ích tiềm năng bổ sung cho việc song song hóa dễ dàng hơn và tận dụng sự quen thuộc với PETSc và các công cụ ACTS .
CẬP NHẬT # 2: Dựa trên thông tin bổ sung mà bạn đã đề cập, các phương pháp lập trình bậc hai (SQP) tuần tự sẽ là lựa chọn tốt nhất của bạn. Các phương pháp SQP thường được coi là mạnh mẽ hơn các phương pháp điểm bên trong, nhưng có nhược điểm là yêu cầu các giải pháp tuyến tính dày đặc. Vì bạn quan tâm nhiều hơn đến sự mạnh mẽ hơn là tốc độ, nên SQP sẽ là lựa chọn tốt nhất của bạn. Tôi không thể tìm thấy một người giải quyết SQP tốt ngoài đó được viết bằng Python (và rõ ràng, Sven Leyffer cũng không thể làm được tại Argonne trong báo cáo kỹ thuật này ). Tôi đoán rằng các thuật toán được triển khai trong các gói như SciPy và OpenOpt có bộ xương cơ bản của một số thuật toán SQP được triển khai, nhưng không có các phương pháp phỏng đoán chuyên biệt mà các mã tiên tiến hơn sử dụng để khắc phục các vấn đề hội tụ. Bạn có thể thử NLopt, được viết bởi Steven Johnson tại MIT. Tôi không có hy vọng cao cho nó bởi vì nó không có bất kỳ danh tiếng nào mà tôi biết, nhưng Steven Johnson là một người thông minh, người viết phần mềm tốt (sau tất cả, anh ấy đã đồng viết FFTW). Nó thực hiện một phiên bản của SQP; Nếu đó là phần mềm tốt, hãy cho tôi biết.
Tôi đã hy vọng rằng TAO sẽ có một cái gì đó theo cách của một người giải quyết tối ưu hóa bị ràng buộc, nhưng nó không. Bạn chắc chắn có thể sử dụng những gì họ phải xây dựng lên; họ có rất nhiều thành phần ở đó Tuy nhiên, như bạn đã chỉ ra, sẽ rất nhiều việc để bạn làm điều đó và nếu bạn gặp phải rắc rối đó, bạn cũng có thể là một nhà phát triển TAO.
Với thông tin bổ sung đó, nhiều khả năng bạn sẽ nhận được kết quả tốt hơn khi gọi GAM từ Python (nếu đó hoàn toàn là một tùy chọn) hoặc cố gắng vá giao diện Python IPOPT. Vì IPOPT sử dụng phương pháp điểm bên trong, nên nó sẽ không mạnh mẽ, nhưng có lẽ việc triển khai phương pháp điểm bên trong của Andreas tốt hơn đáng kể so với triển khai SQP của Matlab, trong trường hợp đó, bạn có thể không hy sinh sự mạnh mẽ nào cả. Bạn sẽ phải chạy một số nghiên cứu trường hợp để biết chắc chắn.
Bạn đã nhận thức được mẹo để cải tổ các ràng buộc bất đẳng thức hợp lý như các ràng buộc bất đẳng thức đa thức (nó có trong sách của bạn); lý do điều này sẽ giúp BARON và một số người giải quyết khác không phải là vì nó có thể sử dụng phân tích thuật ngữ để tạo ra các bất đẳng thức hợp lệ bổ sung mà nó có thể sử dụng như các phép cắt để cải thiện và tăng tốc độ hội tụ của người giải.
Không bao gồm các ràng buộc GAM của Python và giao diện Python cho IPOPT, câu trả lời là không, không có bất kỳ bộ giải lập trình phi tuyến chất lượng cao nào cho Python. Có lẽ @Dominique sẽ thay đổi điều đó với NLPy.
CẬP NHẬT # 3: Nhiều nỗ lực hơn trong việc tìm kiếm một bộ giải dựa trên Python mang lại PyGMO , một tập hợp các ràng buộc Python với PaGMO, một bộ giải tối ưu hóa đa hướng toàn cầu dựa trên C ++. Mặc dù nó được tạo ra để tối ưu hóa đa mục tiêu, nó cũng có thể được sử dụng để lập trình phi tuyến mục tiêu duy nhất và có giao diện Python với IPOPT và SNOPT, trong số các bộ giải khác. Nó được phát triển trong Cơ quan Vũ trụ Châu Âu , vì vậy hy vọng có một cộng đồng đằng sau nó. Nó cũng được phát hành tương đối gần đây (ngày 24 tháng 11 năm 2011).