Cuốn sách tốt nhất về thực hiện Phương pháp Simplex?


14

Tôi quan tâm đến việc triển khai SM cho nhiệm vụ LP, tuy nhiên tôi đã nghe về những cạm bẫy có thể xảy ra: Cuốn sách của Cormen nói rằng có thể có dữ liệu đầu vào sẽ khiến việc triển khai ngây thơ hành xử theo thời gian theo cấp số nhân. Tôi cũng đã nghe nói rằng việc triển khai ngây thơ có thể lặp lại đối với một số loại dữ liệu.

Có một cuốn sách / giấy / nguồn giải thích các sắc thái của việc triển khai thực tế của SM không?

Cảm ơn trước.


Câu trả lời:


13

Tôi đặc biệt khuyến nghị bài báo của Bixby, "cha đẻ" của CPLEX, rằng các cuộc khảo sát không chỉ về việc thực hiện các khía cạnh của thuật toán đơn giản (đã sửa đổi): Robert E. Bixby , Giải quyết các chương trình tuyến tính trong thế giới thực: Thập kỷ và nhiều tiến bộ , hoạt động Nghiên cứu (50) 2002, 3-15 .


12

Thuật toán đơn giản không có trong P. CLRS do đó nói rằng, mặc dù trong thực tế, nó hoạt động "tốt", có một số đầu vào khiến thuật toán chạy theo thời gian theo cấp số nhân. Điều này liên quan chặt chẽ đến thuật toán, không liên quan đến việc thực hiện nó: bạn sẽ phải đối mặt với điều này một cách độc lập về cách bạn thực hiện chính xác thuật toán. Tuy nhiên, LP là ở P. Điều này đã được Khachian chứng minh vào năm 1979, tuy nhiên thuật toán ellipsoid của ông không thực tế. Ngày nay, phương pháp điểm nội thất được sử dụng rộng rãi. Người đầu tiên được Karmarkar phát hiện vào năm 1984.

Nếu bạn quan tâm đến việc triển khai thực tế, hãy xem:

GUROBI, miễn phí cho sử dụng học tập, hiện là trình tối ưu hóa tốt nhất hiện có (cả phiên bản song song và bộ nhớ chia sẻ):

http://www.gurobi.com

thư viện GLPK:

http://www.gnu.org/software/glpk/

đây là một dự án nguồn mở, cung cấp các triển khai cho:

  • phương pháp đơn giản và kép
  • phương pháp điểm nội bộ kép
  • phương pháp cắt cành
  • người dịch cho GNU MathProg
  • giao diện chương trình ứng dụng (API)
  • bộ giải LP / MIP độc lập

12
Thật. Tôi thực sự khuyên bạn KHÔNG nên cố gắng tự thực hiện Simplex, trừ khi đó là toàn bộ vấn đề của bài tập. Nếu bạn chỉ muốn sử dụng nó, các phương pháp kệ tốt hơn nhiều. Ngoài ra, CPLEX là miễn phí cho sử dụng học tập nếu phù hợp với bạn.
Suresh Venkat

1
Có bất kỳ triển khai LP nguồn mở phân tán (như MPI) nào không?
Tomek Tarczynski

3
@Tomek LP hoàn thành P và không có khả năng song song hiệu quả.
Marcus Ritt

@Tomek: Simphony cung cấp một phiên bản phân tán hiện đang chạy trong bất kỳ môi trường nào được hỗ trợ bởi giao thức truyền tin nhắn PVM (MPI chưa được hỗ trợ). Mã nguồn tương tự cũng có thể được biên dịch cho các kiến ​​trúc bộ nhớ dùng chung bằng bất kỳ trình biên dịch tuân thủ OpenMP nào .. Xem Branchandcut.org và trang web COIN-OR có liên quan mạnh: coin-or.org
Massimo Cafaro

9
CPLEX có lẽ là triển khai LP tốt nhất hiện có (đó là lý do tại sao mọi người trả rất nhiều cho nó), nhưng hầu như tất cả các triển khai được sử dụng rộng rãi sẽ làm tốt hơn bất kỳ thứ gì bạn tự lập trình. Điều này bao gồm các gói Toán học, Maple và MATLAB. Có rất nhiều triển khai xung quanh, bao gồm một số triển khai miễn phí khá tốt (QSopt, đối với một, miễn phí nếu bạn không định sử dụng nó cho mục đích thương mại), vì vậy tự lập trình nó chỉ đáng giá cho trải nghiệm học tập.
Peter Shor

9

Cuốn sách Lập trình tuyến tính của Vanderbei trải qua nhiều chi tiết cấp thấp ... Nhưng như các câu trả lời / nhận xét khác đã đề xuất, thực hiện trình giải LP là một công việc khó khăn và vô ơn. Tắt bộ giải có lẽ là cách để đi ... (Ngoài ra còn có một số bộ giải LP nguồn mở ...)


6

Nó không chỉ là những triển khai ngây thơ mà đôi khi hành xử theo thời gian theo cấp số nhân. Trong thực tế, tôi nghĩ rằng tất cả các quy tắc xác định và ngẫu nhiên đã biết đều có đầu vào trường hợp xấu nhất siêu đa thức. Hầu hết các đầu vào được biết tạo ra hành vi trong trường hợp xấu nhất này có cấu trúc cao, một câu hỏi liên quan:

Cấu trúc của các trường hợp bệnh lý cho các thuật toán đơn giản

Tuy nhiên, trong thực tế SM hoạt động tốt. Điều này đã được chính thức hóa bằng việc giới thiệu phân tích được làm mịn , về cơ bản là phân tích trường hợp xấu nhất với các đầu vào hơi nhiễu. Theo phân tích này, SM là polytime, nói cách khác, đối với mọi đầu vào (ngay cả những bệnh lý), có một nhiễu loạn nhỏ cho phép thuật toán thực hiện tốt. Cái nhìn sâu sắc này đã được chuyển đổi thành một thuật toán ngẫu nhiên thực hiện trong đa thời gian. Tuy nhiên, theo tôi hiểu, vẫn còn một số tranh luận về việc liệu thuật toán này có đủ điều kiện là thuật toán đơn giản 'đúng' hay không. Tôi cũng không biết liệu các gói tiêu chuẩn có triển khai thứ gì đó hay không, nhưng bạn sẽ có thể tìm thấy một số triển khai nếu bạn tìm kiếm xung quanh, vì kết quả đã hơn 5 năm tuổi.


1

Bạn có thể kiểm tra Luenberger, Ye, Lập trình tuyến tính và phi tuyến, tái bản lần 3. Điều đó có vẻ khá toàn diện, nhưng tôi chưa thể nói đủ để trả lời câu hỏi của bạn.

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.