Giải thích chi nhánh và giới hạn


9

Tôi có một bài kiểm tra về chi nhánh và thuật toán ràng buộc . Về mặt lý thuyết, tôi hiểu thuật toán này hoạt động như thế nào nhưng tôi không thể tìm thấy các ví dụ minh họa cách thực hiện thuật toán này.

Tôi đã tìm thấy một số ví dụ như ví dụ này nhưng tôi vẫn bối rối về nó. Tôi cũng đã tìm kiếm vấn đề nhân viên bán hàng du lịch và tôi không thể hiểu nó.

Những gì tôi cần là một số vấn đề và làm thế nào những vấn đề này có thể giải quyết bằng cách sử dụng chi nhánh và ràng buộc.


1
Điều gì là khó hiểu? bạn đã thử quay lại trước đó chưa?

Yup, tôi đã thử nó. Vấn đề với B & B là nếu tôi gặp vấn đề có thể giải quyết bằng B & B, tôi không biết làm thế nào tôi có thể có giới hạn dưới cho mỗi nút và cũng là cách tôi có thể có được hàm mục tiêu. Ngoài ra, giá trị đầu tiên của bestsofar mà tôi so sánh với mỗi ràng buộc thấp hơn là gì?
MR.NASS

2
@ MR.NASS Tôi không chắc chính xác những gì bạn đang nói trong bình luận cuối cùng của bạn. Hãy để tôi cố gắng giải thích. B & B là một phương pháp để cắt tỉa cây tìm kiếm. Nó có thể được áp dụng cho các vấn đề phải tối ưu hóa một chức năng khách quan. Nó thường được áp dụng cho các vấn đề tối ưu hóa kết hợp hoặc rời rạc. Ở mỗi bước, bạn cố gắng tìm giới hạn dưới của hàm mục tiêu cho tất cả các giải pháp có thể còn lại. Nếu giới hạn dưới cao hơn giải pháp tốt nhất hiện tại, bạn có thể dừng tìm kiếm và quay lại (cắt tỉa cây tìm kiếm), vì không thể có giải pháp nào có điểm thấp hơn.
George

2
Thông thường người ta giải quyết một phiên bản thoải mái của vấn đề để có được một giới hạn thấp hơn. Đối với các chương trình Integer hỗn hợp, đây thường là thư giãn Lập trình tuyến tính.
Chọn

2
@ MR.NASS Điều này phụ thuộc vào chức năng mục tiêu. Như Sid nói, bạn thường giải quyết một phiên bản thoải mái của vấn đề đã cho. Thông thường, người ta muốn sử dụng một phiên bản thoải mái, đưa ra một xấp xỉ tốt cho vấn đề ban đầu và có thể được giải quyết một cách hiệu quả. Lưu ý rằng phiên bản thoải mái phải đưa ra giới hạn dưới cao nhất là giới hạn dưới thực sự để hoạt động chính xác. Một ví dụ khác: giả sử bạn muốn giải quyết MAXSAT bằng phương pháp B & B. Đối với một phép gán một phần cho trước, bạn có thể dễ dàng tính toán các mệnh đề thỏa mãn. Một giới hạn trên (vì đây là vấn đề tối đa hóa) ...
George

Câu trả lời:


10

Hãy áp dụng Branch and Bound cho Knapsack , hy vọng điều này sẽ làm cho khái niệm rõ ràng với bạn.

Chúng tôi có mục, được dán nhãn đến . là giá trị của th mục, và trọng lượng của nó. Chúng tôi cố gắng lắp chúng vào một chiếc ba lô có thể chứa tổng trọng lượng lên tới và chúng tôi cố gắng tối đa hóa tổng giá trị của vật phẩm chúng tôi đặt trong chiếc ba lô.1 n v i i w i Tn1nviiwiT

Cách tiếp cận backtrack thông thường là cơ sở của chúng tôi. Trước tiên, chúng tôi đặt vào gói, sau đó giải quyết vấn đề cho các mục còn lại bằng đệ quy. Sau đó, chúng tôi xóa khỏi gói và giải quyết vấn đề cho các mục lại và chúng tôi trả lại cấu hình tốt nhất mà chúng tôi đã tìm thấy. n - 1 v 1 n - 1v1n1v1n1

Việc quay lại này là phần 'Chi nhánh' của Chi nhánh và Giới hạn. Bạn phân nhánh (trong trường hợp Knapsack) hai trường hợp: 'mục là một phần của giải pháp' và 'mục không phải là một phần của giải pháp'. Bạn có thể hình dung đây là một cây nhị phân, trong đó con trái là một trường hợp và con phải là trường hợp khác. Cây này là cây tìm kiếm (hoặc không gian tìm kiếm ): độ sâu của nó là và do đó nó có các nút . Do đó, thuật toán có số mũ theo thời gian chạy theo số lượng vật phẩm.i n O ( 2 n )iinO(2n)

Bây giờ chúng ta đến phần 'Giới hạn': chúng tôi cố gắng tìm các tiêu chí sao cho có thể nói 'cấu hình này không bao giờ hoạt động, vì vậy chúng tôi có thể không bận tâm đến việc tính toán này'. Một ví dụ về tiêu chí như vậy là 'trọng lượng của các vật phẩm chúng tôi đã đặt trong ba lô vượt quá ': nếu chúng tôi đã thêm, giả sử, vật phẩm đầu tiên vào ba lô và do đó đã đầy, có không có điểm nào cố gắng đưa các vật phẩm đến trong ba lô, nhưng cũng không có lý do gì để cố gắng khớp bất kỳ tập hợp con nào của cho đến trong ba lô, vì nó đã đầy, vì vậy nó đã đầy chúng tôi lưu khoảng trường hợp. Một ví dụ khác là 'n / 2 n / 2 + 1 n n / 2 + 1 n 2 n / 2Tn/2n/2+1nn/2+1n2n/2ngay cả khi tôi đặt tất cả các mục còn lại, giá trị của các mục tôi đã đặt sẽ không vượt quá cấu hình tốt nhất tôi đã tìm thấy cho đến nay '.

Các tiêu chí này về cơ bản cắt bỏ các phần của cây tìm kiếm: tại một số nút, bạn nói, ví dụ 'cây con bên trái sẽ không cho tôi cấu hình tốt hơn, vì X', vì vậy bạn quên đi cây con đó và bạn không khám phá nó. Một cây con có chiều sâu mà bạn cắt ra theo cách này giúp bạn tiết kiệm các nút , có thể tăng một chút tốc độ nếu bạn may mắn.O ( 2 ngày )dO(2d)

Lưu ý rằng điều này được gọi là ' Bounding ' bởi vì nó thường liên quan đến một số loại thấp hơn hoặc trên ràng buộc: đối với tiêu chí ' ngay cả khi tôi đưa vào tất cả các mục còn lại, giá trị của các mặt hàng tôi đã đưa vào sẽ không vượt quá cấu hình tốt nhất Tôi đã tìm thấy cho đến nay ', giá trị của cấu hình tốt nhất của bạn cho đến nay là giới hạn thấp hơn đối với cấu hình tốt nhất, do đó, bất cứ điều gì sẽ không bao giờ vượt qua giới hạn thấp hơn này đều thất bại.

Bạn có thể làm cho phần 'Bounding' phức tạp như bạn muốn. Ví dụ, các vấn đề lập trình số nguyên thường được giải quyết bằng cách sử dụng thư giãn: bạn thư giãn chương trình của mình thành chương trình tuyến tính, bạn có thể giải quyết trong thời gian đa thức, và sau đó bạn có thể loại bỏ rất nhiều trường hợp cho các biến nhị phân của bạn sẽ không bao giờ giải quyết được. Sau đó bạn phân nhánh trên các tùy chọn còn lại.

Lưu ý rằng Branch and Bound thường chỉ giúp bạn tăng tốc độ trong thực tế, nhưng không phải trên lý thuyết: thật khó để nói chính xác có bao nhiêu cây tìm kiếm bị cắt bằng cách sử dụng phương pháp phỏng đoán của bạn. Điều này được chứng thực bằng số lượng heuristic khác nhau được sử dụng trong thực tế về các vấn đề như vậy. Nếu bạn không may mắn, cây tìm kiếm còn lại vẫn rất lớn ngay cả với rất nhiều ràng buộc.


4

Xem xét lập kế hoạch , nhiệm vụ phân công công việc với thời lượng và thời hạn nhất định cho máy móc. Chúng tôi giả định thời gian rời rạc. Nhiều vấn đề như vậy là NP (O) -hard.

Cụ thể, câu trả lời này sẽ nói về , đó là chúng tôi lên lịch1riLmax

  • trên một máy
  • vấn đề với ngày phát hành và chúng tôi
  • giảm thiểu độ trễ tối đa , đó là sự khác biệt tối đa giữa thời hạn và thời gian hoàn thành so với tất cả các công việc.Lmax

Phiên bản quyết định của vấn đề này là NP-hard; điều này có thể được nhìn thấy bằng cách giảm từ 3PARTATION .

Thật thú vị, nếu chúng tôi cho phép sự ưu tiên , đó là trao đổi các công việc đang hoạt động, vấn đề có thể được giải quyết trong thời gian bậc hai trước ngày hết hạn đầu tiên (vào ngày đáo hạn đã sửa đổi). Dễ dàng thấy rằng giải pháp tối ưu của biến thể này có thể không tệ hơn giải pháp tối ưu của vấn đề ban đầu.

Bây giờ, để áp dụng Branch & Bound cho vấn đề này, chúng tôi cần sửa một số tham số:

  • Chúng tôi tính toán các giới hạn thấp hơn bằng cách cho phép quyền ưu tiên và sử dụng EDD.
  • Chúng tôi chi nhánh bằng cách sửa chữa tất cả các công việc đột xuất như công việc tiếp theo.
  • Chúng tôi đi đến đứa trẻ với nhỏ hơn ràng buộc đầu tiên.

Bạn phải làm điều này cho mọi ứng dụng của B & B.


Để biết ví dụ cụ thể, hãy xem xét trường hợp này của :1riLmax

i1234pi4265ri0135di8121110

với thời gian xử lý công việc, ngày phát hành và ngày hạn.piridi

Thực hiện B & B như quy định ở trên, điều này xảy ra:

thuật toán
GIF này không lặp. Tải lại nó trong một tab mới để xem từ đầu.
[ nguồn ] [ phiên bản tĩnh ]

Lưu ý rằng trong số 41 nút, chỉ có bốn nút được truy cập đúng và chỉ có mười nút được tính thấp hơ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.