Phần mềm nhanh nhất (nguồn mở) để giải quyết vấn đề lập trình số nguyên hỗn hợp là gì


14

Tôi có một vấn đề lập trình số nguyên hỗn hợp. Và tôi hiện đang sử dụng GLPK làm người giải quyết. Nhưng tôi thấy rằng GLPK tốt cho vấn đề Lập trình tuyến tính, nhưng đối với lập trình Integer Integer, nó đòi hỏi thời gian lâu hơn nhiều, do đó không đáp ứng yêu cầu của chúng tôi. Tôi đang tìm kiếm phần mềm khác. Có công cụ nguồn mở tốt nào khác để giải quyết vấn đề lập trình số nguyên hỗn hợp với tốc độ nhanh không? Cảm ơn!


Bạn đã thấy những so sánh với SCIP chưa?
Ali

Câu trả lời:


14

Nếu bạn muốn một cái gì đó nguồn mở, có lẽ bạn muốn thử mã CBC của COIN (họ cũng có một vài bộ giải MILP khác, như khung chi nhánh và giá, hoặc SYMPHONY).

Gurobi và CPLEX sẽ nhanh hơn đáng kể và kể từ cuộc họp INFORMS 2011 hoặc 2012, Gurobi đã nhanh hơn CPLEX (mặc dù các số liệu về hiệu suất tất nhiên phụ thuộc vào vấn đề). Trong các MILP đã giải quyết trong luận án của tôi, Gurobi nhanh hơn khoảng 15 - 100 lần so với CBC và CPLEX cũng nhanh như Gurobi, nhưng chậm hơn một chút (như nhanh hơn 12-80 lần).

Mặc dù hiệu suất trong trường hợp xấu nhất thực sự là theo cấp số nhân, thời gian thực hiện sẽ phụ thuộc rất nhiều vào cấu trúc vấn đề. Không chắc là bạn sẽ có thể giải quyết một MILP với hàng triệu biến trừ khi bạn khai thác cấu trúc đặc biệt (có thể nếu đó là một chương trình ngẫu nhiên có thể phân tách thành nhiều vấn đề nhỏ hơn nhiều), nhưng hoàn toàn có thể giải quyết các MILP không cần thiết với hàng ngàn các biến trong dưới một phút. (Tất nhiên, những vấn đề này cũng có thể mất một giờ hoặc hơn để giải quyết.)

Như Brian Borchers lưu ý, CPLEX và Gurobi đều có sẵn giấy phép miễn phí cho một số nhà nghiên cứu, một trong hai gói phần mềm này thực sự sẽ là tốt nhất để sử dụng làm công cụ giải quyết MILP cho mục đích chung.


6

Các bài toán lập trình tuyến tính số nguyên hỗn hợp khó giải quyết hơn nhiều so với các bài toán lập trình tuyến tính. Về độ phức tạp tính toán, LP có thể được giải quyết trong thời gian đa thức trong khi giải quyết MILP là một vấn đề NP-Hard. Các thuật toán đã biết để giải quyết MILP có độ phức tạp trường hợp xấu nhất theo cấp số nhân.

Có các gói phần mềm khác để lập trình tuyến tính số nguyên hỗn hợp mà bạn có thể xem xét, bao gồm SCIP (miễn phí cho sử dụng học tập), CPLEX (thương mại nhưng có tùy chọn cấp phép học thuật) và GUROBI (cũng thương mại với tùy chọn cấp phép học thuật.) Một hoặc nhiều trong số các gói này có thể nhanh hơn đáng kể so với GLPK về các vấn đề của bạn, nhưng đừng hy vọng bất kỳ gói nào trong số chúng có khả năng giải quyết MILP nhanh như khi chúng giải quyết các LP có kích thước tương tự.


4

Nếu bạn muốn thử một loạt các bộ giải khác nhau, hãy thử khung mô hình JuMP của Julia . Nó cho phép bạn viết mô hình của mình dưới dạng mô hình JuMP, sau đó tắt bộ giải với một dòng mã. Ví dụ: đối với các sự cố MILP, bạn có thể chọn từ các bộ giải Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi và MOSEK. Bởi vì điều này, nếu bạn viết nó trong JuMP, bạn có thể thử tất cả các bộ giải mà Geoff đã đề cập và xem những gì hoạt động mà không phải viết một loạt mã. Các bài kiểm tra cá nhân của riêng bạn sẽ là nguồn kiến ​​thức tốt nhất cho các thuật toán nhanh nhất cho các vấn đề của bạn.


Liệu khuôn khổ JuMP có thêm nhiều chi phí không?
ness101

1
Không, JuMP được thực hiện thông qua các macro vì vậy nó ở thời gian biên dịch. Trên thực tế, những gì JuMP sử dụng macro để viết lại mã và sử dụng tự động hóa để tính toán các hàm hiệu quả cho độ dốc, Jacobian và Hessian, do đó, sẽ nhanh hơn trong trường hợp bạn không cung cấp dạng phân tích cho gradient / Jacobian / Hessian. Bạn thực sự có thể kiểm tra thông qua @code_llvmđể kiểm tra mã lắp ráp kết quả để thấy rằng mã keo về cơ bản không có gì (điều này cũng là do Julia ngây thơ sử dụng các con trỏ hàm và các mảng bit giống như C / Fortran).
Chris Rackauckas

@ChrisRackauckas Bộ giải nào hoạt động tốt hơn cho các bài toán phi tuyến với các ràng buộc phi tuyến?
skan

Đó là một câu hỏi hoàn toàn khác có lẽ không nên hỏi trong bình luận, nhưng tôi có xu hướng sử dụng JuMP với NLopt hoặc IPOPT tùy thuộc vào các ràng buộc bắt buộc và liệu tôi cần tối ưu hóa toàn cầu hay cục bộ.
Chris Rackauckas

3

Theo đề xuất của người khác, tôi đã sử dụng GAM (thương mại) cho nhiều dự án. Nó rất thẳng về phía trước; tất cả những gì bạn phải làm là đặt công thức toán học cho vấn đề của bạn. Nó chọn các biến, các ràng buộc, các hàm mục tiêu và tất cả các dữ liệu đầu vào. Sau đó, nó cung cấp một loạt các bộ giải (tối ưu hóa) cho mọi trường hợp. Tùy thuộc vào trường hợp của bạn, bạn thêm người giải quyết tinh vi hơn.

Chắc chắn, EASY là đáng xem. Khung nguồn mở.

Thuật ngữ "nhanh" là rất mơ hồ! Bạn cần phải được cụ thể hơn; Nhanh về số lần lặp? số lượng đánh giá? thời gian trôi qua? sự kết hợp của những?

Tuy nhiên, nếu bạn không tìm kiếm một phần mềm và bạn chỉ muốn giải quyết vấn đề, tôi có thể đề nghị sử dụng trình tối ưu hóa toàn cầu NSGA-II, một trình tối ưu hóa nguồn mở có uy tín và hiệu suất rất cao.

Nếu bạn cung cấp thêm thông tin, tôi có thể hướng dẫn chính xác.


1
Bạn cần nghiêm túc xem xét [openMDAO] [1], được phát triển / hỗ trợ bởi NASA và nó khá linh hoạt!
T3rmInAt0r
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.