Làm thế nào để bắt đầu phương pháp Simplex từ một điểm nội bộ khả thi?


8

Tôi có một thuật toán tạo ra một giải pháp khả thi cho một vấn đề lập trình tuyến tính. Tuy nhiên, rất có thể đây không phải là một điểm góc. Điều này làm cho nó không phù hợp để sử dụng trực tiếp như một giải pháp khả thi ban đầu cho bộ giải Simplex bị ràng buộc. Làm thế nào tôi có thể tìm thấy một điểm góc từ giải pháp này mà tôi có thể sử dụng một cách hiệu quả?

Nói tóm lại, làm thế nào tôi có thể bắt đầu phương pháp Simplex từ một điểm nội bộ khả thi?


Có các thuật toán từ đi từ điểm nội bộ tối ưu đến giải pháp cơ bản tối ưu (được sử dụng để có được giải pháp cơ bản tối ưu sau khi thuật toán điểm bên trong hội tụ thành giải pháp không cơ bản tối ưu). Có lẽ bạn có thể sử dụng một cái gì đó như thế này, nhưng tại sao bạn muốn cung cấp một giải pháp ban đầu khả thi cho LP? Bạn có LP trong đó tính khả thi là một nút cổ chai?
user327301

Thuật toán tôi đề cập rằng tạo ra giải pháp khả thi trong thực tế chỉ tạo ra giải pháp đó dưới dạng sản phẩm phụ. Kết quả chính của nó là tập hợp các ràng buộc cho LP. Tôi chỉ muốn tận dụng tối đa giải pháp khả thi này, thay vì bỏ qua nó và sử dụng Giai đoạn 1.
Dylan

Bạn có chắc chắn rằng nó sẽ giúp? Bạn đã xem nhật ký của người giải quyết và xem bao nhiêu phần trăm thời gian dành cho việc tìm kiếm một giải pháp khả thi so với việc tìm một giải pháp tối ưu? Tôi nghi ngờ rằng điều này sẽ giúp ích, trừ khi bạn cung cấp các giải pháp ban đầu rất tốt cho một chương trình tuyến tính rất lớn hoặc rất dày đặc (nghĩa là khó khăn).
user327301

Bất kể nó có giúp ích gì không, tôi tò mò liệu nó có khả thi hay không. Có một cơ hội tốt rằng giải pháp khả thi ban đầu là gần tối ưu. LP rất dày đặc - số không có khả năng trong bất kỳ phần nào của tableau.
Dylan

1
Khi CPLEX sử dụng thuật toán điểm bên trong, nó thực hiện những gì tài liệu gọi là chéo để chuyển sang một giải pháp cơ bản. Tôi không biết gì về crossover, nhưng đó có thể là điểm khởi đầu để bạn tìm thứ gì đó. (Bây giờ bạn đang khiến tôi muốn chia sẻ lại kiến ​​thức LP của mình!)
user327301

Câu trả lời:


6

Mỗi cuốn sách về tối ưu hóa tuyến tính giải thích phương pháp đơn giản như một thuật toán hai giai đoạn: đầu tiên để tìm một góc khả thi làm điểm bắt đầu và thứ hai để tìm ra phương án tối ưu. Việc đầu tiên sử dụng một vấn đề kép. Hãy xem D. Bertsimas và JN Tsitsiklis: "Giới thiệu về tối ưu hóa tuyến tính" chẳng hạn.

Lý do người ta cần cách tiếp cận hai pha là vì thường khó tìm thấy bất kỳ điểm khả thi nào - trong không gian chiều cao, bộ khả thi rất nhỏ so với hộp đơn vị. Từ câu hỏi của bạn, có vẻ như bạn có một cách khác để tìm ít nhất một điểm khả thi và trong trường hợp đó có thể tạo ra một đỉnh của khối đa diện khả thi từ điểm này. Một ý tưởng sẽ là sử dụng cách tiếp cận sau: mỗi ràng buộc bất đẳng thức đại diện cho một nửa không gian được phân tách bằng một siêu phẳng. Cho điểm khả thi , tìm siêu phẳng gần nhất với n + 1 x *xn+1xvà đi qua ngã tư của họ. Theo trực giác, đỉnh này nên khả thi, mặc dù tôi sẽ thừa nhận rằng người ta sẽ cần phải suy nghĩ về điều này nhiều hơn một chút.


1
Thật không may, tất cả các thuật toán hai giai đoạn cho phương pháp đơn giản mà tôi đã tìm thấy mô tả "Giai đoạn 1", trong đó các biến nhân tạo được sử dụng để tìm một giải pháp khả thi cơ bản từ một giải pháp không khả thi cơ bản. Tuy nhiên, điều tôi muốn là tìm một giải pháp khả thi cơ bản từ một giải pháp khả thi không gây hại. Tôi có thiếu điều gì về "Giai đoạn 1" có thể áp dụng cho các giải pháp không gây hại không?
Dylan

Tôi không hiểu tại sao bạn cần điều đó. Tất cả những gì bạn cần cho giai đoạn 2 là bất kỳ đỉnh (một giải pháp khả thi cơ bản). Tại sao bạn lại quan tâm nơi giai đoạn 1 bắt đầu miễn là bạn biết nơi nó kết thúc?
Wolfgang Bangerth

Nhưng Giai đoạn 1 đòi hỏi một giải pháp cơ bản (không khả thi). Nếu tôi bằng cách nào đó có thể bắt đầu Giai đoạn 2 bằng một giải pháp khả thi không cơ bản, thì nó sẽ giải quyết nhanh hơn rất nhiều so với bắt đầu Giai đoạn 1 từ nguồn gốc.
Dylan

Nhưng giai đoạn 2 - phương pháp đơn giản thực tế - đi từ đỉnh này sang đỉnh của khối đa diện là tập hợp khả thi. Nó cần phải bắt đầu với một đỉnh, tức là một điểm khả thi cơ bản. Không có cách nào xung quanh nó. Giai đoạn 1 nhằm cung cấp cho bạn chính xác điểm bắt đầu như vậy. Tôi tưởng tượng rằng bạn thực sự có thể tăng tốc thuật toán nếu bạn có cách tạo một đỉnh của tập khả thi từ bất kỳ điểm khả thi nào khác, và tôi tưởng tượng rằng điều đó thậm chí sẽ rất khó khăn (chỉ chiếu vào các ràng buộc gần nhất ). Vấn đề nói chung là tìm thấy bất kỳ điểm khả thi nào cả. n+1
Wolfgang Bangerth

Nếu nó không quá khó, bạn có thể vui lòng nêu chi tiết không? Theo như tôi có thể thấy, khi bạn lần lượt chiếu vào từng ràng buộc, bạn có thể không hài lòng các ràng buộc trước đó. Vì vậy, làm thế nào để bạn chiếu lên tất cả các ràng buộc cùng một lúc? Đây là vấn đề tôi đang yêu cầu giải quyết. Không phải là trường hợp chung của việc tìm kiếm một điểm khả thi.
Dylan

4

Thật không may, giải pháp của Wolfgang Bangerth không được đảm bảo để hoạt động:

nhập mô tả hình ảnh ở đây

Đây là những gì bạn có thể làm thay vào đó: Chọn một hướng và di chuyển dọc theo nó cho đến khi bạn chạm vào một siêu phẳng. Chọn một hướng dọc theo siêu phẳng và di chuyển dọc theo nó cho đến khi bạn chạm vào một hướng khác. Chọn một hướng dọc theo giao điểm của hai siêu phẳng ... Sau khi bước, bạn sẽ có các ràng buộc hoạt động và bạn sẽ chọn một hướng dọc theo không gian hai chiều . Sau bước, bạn sẽ đến một đỉnh (giả sử tập hợp khả thi bị giới hạn).i ( n - i ) nii(ni)n


3

Thực tế có nhiều cách tiếp cận khác nhau cho giai đoạn I trong phương pháp đơn giản. Đặc biệt, có các thuật toán pha I sử dụng các phép lặp đơn giản prx đơn giản và các thuật toán pha I khác sử dụng các phép lặp đơn giản kép. Đây là một cách tiếp cận rất chung có thể dễ dàng được điều chỉnh để sử dụng một giải pháp khả thi đã biết. Phiên bản này sử dụng phương pháp đơn giản kép trong giai đoạn I và phương pháp đơn giản nguyên thủy trong giai đoạn II, nhưng có một biến thể sử dụng các lần lặp đơn giản nguyên thủy trong giai đoạn I và lặp lại đơn giản kép trong giai đoạn II mà tôi sẽ đề cập ở cuối. Cách tiếp cận mà tôi sẽ mô tả ở đây được thảo luận trong nhiều sách giáo khoa về lập trình tuyến tính. Ví dụ, xem văn bản của Robert Vanderbei's .

Giả sử rằng chúng ta đang giải quyết

maxcx

tùy thuộc vào

Ax=b

lxu

Trong đó có kích thước bằng . Để đơn giản, giả sử rằng các hàng của là độc lập tuyến tính (điều này có thể được thực hiện bằng hệ số tiết lộ thứ hạng.)m n AAmnA

  1. Chọn một cơ sở ban đầu. Đây là một bộ sưu tập của biến để các cột tương ứng của tạo thành một không ít ma trận . Các biến không quan trọng còn lại có thể được đặt thành giới hạn trên hoặc dưới của chúng (hoặc bằng 0 nếu một biến không có giới hạn nào cả.) A BmAB

Một cách dễ dàng để thực hiện điều này từ giải pháp ban đầu của bạn là chọn các biến cơ bản là các biến số xa nhất trong giới hạn của chúng trong giải pháp khả thi đã biết và sau đó xác minh rằng là số ít. Bạn có thể phải sửa đổi cơ sở để làm cho không đơn. Vấn đề ở đây là có nhiều cơ sở có thể, nhưng cái này có các biến cơ bản là các biến có vẻ đúng từ giải pháp khả thi của bạn. BBB

Giải các phương trình để thu được các giá trị của các biến cơ bản. Ax=b

  1. Giải pháp cơ bản mà bạn có được có khả năng là không thể thực hiện được theo nghĩa là một số biến số nguyên thủy nằm ngoài giới hạn của chúng. Nó cũng có khả năng là không khả thi theo nghĩa là một số chi phí giảm của các biến không cơ bản có dấu hiệu sai (ví dụ: các biến không bazơ ở giới hạn thấp hơn với chi phí giảm tích cực hoặc biến không bazơ ở giới hạn trên với chi phí giảm âm).

Chúng tôi sẽ khắc phục vấn đề này bằng cách thay đổi hàm mục tiêu thành một tính khả thi kép. Đối với mỗi biến không dao động ở giới hạn dưới của nó, trừ đi một đại lượng từ hệ số hàm mục tiêu. Đối với mỗi biến không quan trọng ở giới hạn trên của nó, thêm một đại lượng dương vào hệ số. Điều này đảm bảo rằng từ điển là khả thi kép. MMM

Điểm quan trọng của việc sửa đổi chức năng mục tiêu này là cố gắng làm việc theo hướng khả thi nguyên thủy nhưng cũng hướng tới sự tối ưu đối với chức năng mục tiêu ban đầu. Bạn muốn đủ lớn để bạn có tính khả thi kép, nhưng bạn muốn giữ ảnh hưởng nhiều nhất có thể từ hàm mục tiêu ban đầu. M

  1. Thực hiện các phương pháp đơn giản kép để có được một giải pháp cơ bản, cả khả thi nguyên thủy (tất cả các biến cơ bản trong boudns) và khả thi kép (tất cả các chi phí giảm đều có dấu hiệu mong muốn.) Giải pháp này là tối ưu cho vấn đề giai đoạn I.

  2. Thay thế hàm mục tiêu pha I đã sửa đổi bằng hàm mục tiêu ban đầu. Bây giờ bạn sẽ có một giải pháp cơ bản khả thi nguyên thủy (thay đổi chức năng mục tiêu không ảnh hưởng đến điều này) nhưng không khả thi kép. Thực hiện các bước lặp đơn giản nguyên thủy để lấy lại sự tối ưu.

Một cách thay thế rõ ràng cho cách tiếp cận này là sửa đổi phía bên phải b khi bắt đầu giai đoạn I, sử dụng các bước lặp đơn giản nguyên thủy trong giai đoạn I để đạt được sự tối ưu, sau đó đưa phía bên phải ban đầu trở lại cho giai đoạn II và sử dụng các bước lặp đơn giản kép trong giai đoạn II.


-3

Tôi đã tìm kiếm giải pháp cho câu hỏi tương tự: đối với một chương trình tuyến tính thưa thớt rất lớn, chỉ có phương pháp đơn giản được thử nghiệm, nhưng chỉ khi giải pháp 0 mặc định là khả thi. Có vẻ như thuật toán giai đoạn một (như trong linprog của Matlab) là xấu. Và mã nguồn giai đoạn một rất phức tạp để thay thế nó bằng thuật toán khác như thuật toán di truyền, do đó, một phương pháp xoay quanh là biến đổi tuyến tính của vấn đề ban đầu, để trong các phương sai mới, giải pháp khả thi ban đầu được cung cấp là 0, và điều này 0 sẽ được sử dụng bởi giai đoạn một mà không sử dụng phương thức riêng để tìm điểm bắt đầu khác.

Trong thử nghiệm phương pháp này, từng bước thông qua linprog.m, simplex.m, simplexpresolve.m và simplexphaseone.m, trong trường hợp chỉ sử dụng các ràng buộc bất đẳng thức, người ta xác nhận rằng 0 mặc định sẽ được sử dụng cho các biến ban đầu, trong đó các biến chùng sẽ có sự khác biệt. Vì vậy, việc chuyển đổi tuyến tính có thể lẻn x0 thành đơn giản, điều này cố tình ngăn người dùng cung cấp x0. Sau đó, bạn có thể thấy thông báo "Điểm bắt đầu mặc định là khả thi, bỏ qua Giai đoạn 1." Mặt khác, thông thường GA có thể tìm giải pháp gần với chương trình tuyến tính đến 0,01 phần trăm bằng cách sử dụng gấp đôi hoặc gấp ba lần, do đó, nó có thể không xứng đáng với những nỗ lực chuyển đổi tuyến tính của các ràng buộc, mục tiêu và giới hạn đó, đặc biệt là khi các ràng buộc được tạo ra một cách giả tạo .


Xin chào Frank và chào mừng bạn đến với Scicomp! Câu hỏi bạn đặt ra là hoàn toàn hợp lệ, nhưng vì nó không thực sự giải quyết câu hỏi ban đầu của OP, nên nó thực sự không thuộc về một "câu trả lời". Bạn thực sự nên xóa nó và đăng lại chi tiết hơn như một câu hỏi riêng biệt.
Paul

Đừng bận tâm: phương thức này là số tiền để đơn giản sử dụng x0 ban đầu được cung cấp sau khi dịch x0 thành 0, phương thức đơn giản ban đầu bỏ qua mọi x0 được cung cấp.
Frank
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.