Tìm giải pháp góc chính xác cho lập trình tuyến tính bằng phương pháp điểm bên trong


11

Thuật toán đơn giản đi một cách tham lam vào các góc của đa giác để tìm giải pháp tối ưu cho bài toán lập trình tuyến tính. Kết quả là, câu trả lời luôn là một góc của đa giác. Phương pháp điểm bên trong đi vào bên trong của polytope. Kết quả là, khi toàn bộ mặt phẳng của đa giác là tối ưu (nếu hàm mục tiêu chính xác song song với mặt phẳng), chúng ta có thể nhận được một giải pháp ở giữa mặt phẳng này.

Giả sử rằng chúng ta muốn tìm một góc của đa giác thay thế. Ví dụ: nếu chúng tôi muốn thực hiện khớp tối đa bằng cách giảm nó thành lập trình tuyến tính, chúng tôi không muốn nhận được câu trả lời bao gồm "kết hợp chứa 0,34% cạnh XY và 0,89% của cạnh AB và ...". Chúng tôi muốn nhận được câu trả lời với 0 và 1 (đơn giản sẽ cung cấp cho chúng tôi vì tất cả các góc bao gồm 0 và 1). Có cách nào để làm điều này với một phương pháp điểm bên trong đảm bảo tìm ra các giải pháp góc chính xác trong thời gian đa thức không? (ví dụ có lẽ chúng ta có thể sửa đổi hàm mục tiêu để ưu tiên các góc)


1
@JD: Tại sao bạn không đưa ra câu trả lời này?
Raphael

Câu trả lời:


6

Bạn có thể muốn đọc bài báo:

Sanjay Mehrotra, Về việc tìm kiếm một giải pháp đỉnh bằng các phương pháp điểm bên trong, Đại số tuyến tính và các ứng dụng của nó, Tập 152, ngày 1 tháng 7 năm 1991, Trang 233-253, ISSN 0024-3795, 10.1016 / 0024-3795 (91) 90277-4. liên kết bài viết


4

Mặc dù câu hỏi nói chung có ý nghĩa, thật kỳ lạ khi bạn chọn kết hợp tối đa làm ví dụ, bởi vì có nhiều thuật toán (lưu lượng tối đa để khớp bipartite tối đa, thuật toán của Edmonds cho kết hợp không lưỡng cực và thuật toán Hungary cho kết hợp lưỡng cực tối đa) tất cả sẽ cung cấp cho các giải pháp đỉnh số nguyên cho vấn đề.


Đó là nhiều hơn một lợi ích lý thuyết hơn là thực tế. Tuy nhiên, nhiều lần phương pháp điểm bên trong nhanh hơn đơn giản, vì vậy có thể có vấn đề trong đó đây là vấn đề thực tế;)
Jules

3

Đối với việc thiếu chi tiết, đây chỉ là một nhận xét dài hơn:

Thuật toán thời gian đa thức của Karmarkar không chỉ di chuyển gần rìa. Cuối cùng, nó tìm thấy một giải pháp cơ bản phù hợp (ví dụ như góc) là tối ưu bằng cách sử dụng sơ đồ thanh lọc . Bạn có thể sử dụng kỹ thuật này hoặc một kỹ thuật tương tự để di chuyển đến một góc từ mặt phẳng.


Tôi không thể làm được điều đó trong bài báo gốc của Karmarkar . Tài liệu tham khảo của tôi là "Lineare Optimierung und Netzwerkoptimierung" (tiếng Anh: Tối ưu hóa tuyến tính và mạng) của Hamacher và Klamroth có văn bản tiếng Đức và tiếng Anh cạnh nhau.


1

Vâng, có một phương pháp đơn giản và tôi đã triển khai nó trong C ++ để kết hợp tốc độ của các phương thức điểm bên trong với độ chính xác của các phương pháp đơn giản (sử dụng phép tinh chỉnh lặp lại của ma trận cơ sở tôi có thể đạt được độ chính xác của 1 phần trong 10 ^ 15 và tốt hơn về ma trận ràng buộc dày đặc với hơn 1000 biến và ràng buộc).

Chìa khóa là trong phương thức đơn giản mà bạn sử dụng. Giả sử rằng phương thức đơn giản có một cơ chế để tái cấu trúc một cơ sở (ví dụ sau khi các lỗi làm tròn tích lũy khiến nó cần thiết) và phương thức tái cấu trúc này chỉ đơn giản là tạo lại một ma trận nghịch đảo cơ sở cho một cơ sở chứa tất cả danh sách các biến cơ bản mong muốn. Hơn nữa, giả sử rằng ngay cả khi cơ sở mong muốn không thể được tạo lại đầy đủ, thuật toán đơn giản có thể tiếp tục từ cơ sở chứa 95% cơ sở đích, thì câu trả lời rất đơn giản.

Tất cả những gì bạn phải làm là lấy giải pháp từ phương pháp điểm bên trong của bạn, loại bỏ biến có giá trị giải pháp chính được ngụ ý bằng 0 bởi độ chùng bổ sung và đưa ra kích thước cơ bản trong bài toán đơn giản của b, lấy biến b trong phần bên trong giải pháp điểm có giá trị lớn nhất (hoặc nhiều như có giá trị khác không nếu giá trị đó nhỏ hơn b) và cấu trúc lại cơ sở đơn giản để chứa các biến b đó. Sau đó tiếp tục phương pháp đơn giản cho đến khi nó giải quyết. Vì bạn đang bắt đầu bài toán đơn giản gần kết thúc nên việc này thường rất nhanh.

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.