Super Mario chảy trong NP?


15

Một phần mở rộng cổ điển của bài toán luồng cực đại là bài toán "dòng chảy tối đa theo thời gian": bạn được cung cấp một sơ đồ, hai nút được phân biệt là nguồn và phần chìm, trong đó mỗi cung có hai tham số, công suất trên mỗi -unit-time và một sự chậm trễ. Bạn cũng được đưa ra một giới hạn thời gian . Mục đích là để tính toán một dòng chảy theo thời gian mà được số tiền tối đa của vật liệu từ nguồn đến chìm theo thời gian T . Một luồng có giá trị tối đa có thể được tính trong thời gian đa thức bằng cách giảm cổ điển thông minh thành luồng tối đa chi phí tối thiểu.TT

Tôi quan tâm đến một phần mở rộng cho mô hình này, nơi các cạnh có tham số "vòng đời" thứ ba. Nếu một hồ quang có tuổi thọ , và t là thời điểm sớm nhất mà dòng chảy tích cực sẽ được gửi thông qua các vòng cung, sau đó chúng tôi tiêu diệt các arc lúc t + . Bạn có thể nghĩ về điều này giống như các nền tảng trong Super Mario Brothers bị mất / bị phá hủy ngay sau khi bạn bước lên chúng, hoặc bạn có thể nghĩ chúng là pin cần thiết để cung cấp năng lượng cho các cạnh, không thể tắt sau khi chúng được bật . ( Chỉnh sửa :) Vấn đề quyết định là, khi cũng được đưa ra một giá trị luồng B ràng buộc thấp hơntt+B , liệu người ta có thể lên lịch một luồng đáp ứng cả hai chân trời thời gian giới hạn trên và giá trị luồng bị ràng buộc thấp hơn.

Cho đến nay tôi có thể thấy rằng vấn đề này rất mạnh NP-hard (thông qua 3 phân vùng). Nhưng, tôi thực sự không biết liệu nó có trong NP hay không: có đảm bảo nào về cách thể hiện một giải pháp gọn nhẹ không? Trong phiên bản cổ điển, một số loại luồng tối ưu đặc biệt được sử dụng để khắc phục vấn đề này.

Lưu ý: mô hình ở trên không được xác định rõ ràng một chút, vì bạn có thể cho phép hoặc không cho phép dự trữ luồng tại các nút và bạn có thể có mô hình thời gian rời rạc hoặc liên tục. Giải quyết câu hỏi cho bất kỳ mô hình nào trong số này sẽ là tuyệt vời.


1
Tôi không chắc là tôi hiểu. Tại sao có một vấn đề trong việc thể hiện một kế hoạch dòng chảy cụ thể một cách gọn gàng và xác minh rằng tổng lưu lượng ít nhất là F trong thời gian poly?
Suresh Venkat

3
Bạn có thể nghĩ làm thế nào để chứng minh rằng đầu ra của một vấn đề tối ưu hóa, mà đầu ra của nó là một luồng thời gian, có thể được kiểm tra độ tối ưu trong thời gian poly. Tuy nhiên, thường người ta chỉ ra rằng các vấn đề quyết định chỉ có câu trả lời có / không có trong NP và các vấn đề tối ưu hóa tối đa hóa một số chức năng như dòng chảy thường được chuyển thành vấn đề quyết định bằng cách thêm giá trị B ràng buộc thấp hơn vào đầu vào và vấn đề quyết định trở thành "Có giải pháp nào có giá trị ít nhất là B không?"
andy_fingerhut

Suresh: giả sử trong mô hình rời rạc, cách tự nhiên để thể hiện sơ đồ dòng chảy lấy số nguyên cho mỗi cung, nhưng đây không phải là đa thức, nó chỉ là đa thức giả trong kích thước đầu vào. Trong mô hình liên tục tương tự, tôi không thấy cách nén này. T
daveagp

Andy: Bạn nói đúng, về mặt chính thức, tốt hơn là tôi nên nói đây là một vấn đề quyết định bằng cách có một giá trị ràng buộc thấp hơn ngoài một khoảng thời gian, đó là điều mà chúng ta có thể hỏi liệu nó có nằm trong NP không.
daveagp

1
@daveagp: Bạn đã thử độ cứng PSPACE, ví dụ như giảm QBF cho vấn đề của bạn?
Yoshio Okamoto

Câu trả lời:


13

Lâu lắm rồi nhưng tôi khá chắc là vấn đề này ở P.

Tôi đã viết luận án tiến sĩ về vấn đề này vào năm 1995. Xem "Thuật toán dòng chảy mạng động hiệu quả" của Bruce Hoppe nộp cho phòng Cornell CS. Trực tuyến tại http: //dspace.l Library.cornell.edu/bitstream/1813/7181/1/95-1524.pdf

Xem Chương 8 "Phần mở rộng" phần 8.1 về "cạnh sinh tử"


3
"Đó là một đêm tối và bão tố. Jack nằm bất động trong cabin của mình - bất động ngoại trừ dạ dày, đang quay cuồng trong ruột như một chuyến đi lễ hội điên rồ ..." (trang xiii, nơi tác giả thảo luận về các ứng dụng thực tế).
Neal Young

Trích dẫn hay, Neal! :) BTW daveagp đưa ra một quan điểm tốt về việc cần không gian giả đa thức để lưu trữ "dòng chảy" trả lời câu hỏi quyết định. Làm thế nào để không chỉ tìm thấy luồng tối ưu mà còn thể hiện luồng đó trong P là chương 1-7 của luận án của tôi
Bruce Hoppe

Thông minh! Cuối cùng tôi đã đọc tất cả điều này. Khi chúng tôi khắc phục luồng đầu tiên chạm vào cạnh, chứng minh tính khả thi của mạng với thời gian bắt đầu và kết thúc là ở P (giả sử cho phép giữ lại), và do đó, vấn đề ban đầu là ở NP: chứng chỉ có kích thước đa thức của chúng tôi liệt kê thời gian bắt đầu cho mỗi cạnh. Super Mario do đó chảy NP-hoàn toàn. Câu hỏi ngẫu nhiên: việc cấm nắm giữ có thay đổi gì không? Có một thuật toán gần đúng tốt?
daveagp

2

EDIT: câu trả lời là SAI. Tôi đã đưa ra giả định ngầm (ngớ ngẩn) rằng khi một luồng đường dẫn bắt đầu tại thời điểm s và kết thúc tại thời điểm t và đi qua cạnh e, nó sẽ chặn cạnh e trong khoảng thời gian này. Tuy nhiên, điều này là không đúng sự thật. Xem *.

Lưu ý: Có lẽ cách tiếp cận này là không cần thiết phức tạp hoặc không chính xác. Mặc dù tôi đã cố gắng xác minh và viết nó một cách cẩn thận - tôi đã không dành thời gian lớn cho nó.

Giả sử 'dự trữ' không được phép, ví dụ, luồng phải được chuyển ngay lập tức. Gọi là số cạnh và N chiều dài đầu vào. Tôi đã không chỉ định thời gian liên tục hoặc rời rạc, vì tôi đã không xem xét nó. Nó nên hoạt động cho những suy nghĩ rời rạc, liên tục tôi chắc chắn lưu ý.mN

Sau đó, chúng ta có thể mô tả giải pháp dưới dạng một tập hợp các "đường dẫn" từ nguồn đến chìm. Luồng đường dẫn là một bộ tứ bao gồm các phần sau: Một đường dẫn P đơn giản từ nguồn đến chìm; Thời gian bắt đầu của dòng chảy s ; Lượng dòng chảy qua đường dẫn a ; Tỷ lệ thông lượng r(P,s,a,r)Psar .

Đặt một giải pháp được đưa ra bởi một tập hợp của các luồng đường dẫn. Chúng tôi có thể xác minh xem giải pháp được cung cấp bởi các luồng đường dẫn này có chính xác trong đa thức thời gian trong | F | N :F|F|N

  • Đối với mọi cạnh và một thời điểm t , hãy cộng tốc độ thông lượng của tất cả các luồng đường đi qua e tại thời điểm t . Mỗi luồng đường dẫn có thời gian bắt đầu và kết thúc, do đó chúng ta chỉ cần xem xét các thời điểm khi luồng đường dẫn bắt đầu hoặc kết thúc (giữa các thời điểm này không có gì thay đổi liên quan đến luồng đường đi qua cạnh e .etete
  • Đối với mỗi luồng đường dẫn, chúng tôi có thể xác minh xem tất cả luồng chảy có đến bồn rửa trước thời gian .T
  • Đối với mọi cạnh, chúng ta có thể xác minh xem một luồng đường đi qua sau khi nó đã bị phá hủy hay chưa.
  • Giới hạn dưới của luồng chúng ta có thể kiểm tra một cách đơn giản, bằng cách thêm số lượng luồng của đường dẫn dòng chảy.B

Bây giờ, chúng ta 'chỉ' cần phải chứng minh rằng số lượng các đường dẫn chảy là đa thức trong .N

Đối với một giải pháp nhất định, chúng ta có thể xác định thời gian một dòng chảy đi qua một cạnh và khi cạnh đó bị phá hủy. Chuyển vấn đề này thành một vấn đề với một giải pháp tương đương: có các giới hạn cứng ở mỗi cạnh khi nó có thể được sử dụng và khi không - thời gian bắt đầu và kết thúc. Đặt biểu thị tập hợp tất cả các thời gian này.{t1,...,tk}

Xem xét một số giải pháp không gọn và (ban đầu) một tập hợp các luồng đường dẫn trống. Ý tưởng là chúng ta lặp đi lặp lại tìm một luồng đường dẫn trong giải pháp không gọn, loại bỏ nó và lưu trữ nó trong tập hợp các luồng đường dẫn của chúng ta.

Tìm dòng chảy bắt đầu và kết thúc giữa t j , i < jtitji<j nhưng không kết thúc giữa bất kỳ t q như vậy [ t p , t q ] [ t i , t j ] . Gọi F i , j là tập hợp các luồng đường dẫn giữa t jt j với các thuộc tính như mô tả ở trên.tptq[tp,tq][ti,tj]Fi,jtjtj

Giả sử rằng chúng tôi đã loại bỏ tất cả các luồng đường dẫn cho tất cả các khoảng nhỏ hơn . Tham lam tìm dòng chảy bắt đầu và kết thúc trong [ t i , t j ] . Khi chúng tôi tìm thấy một, loại bỏ luồng này khỏi giải pháp và điều chỉnh tốc độ thông lượng của các đỉnh tương ứng và lượng dòng gửi từ nguồn cũng bị chìm. Đối với luồng đường dẫn này, chúng tôi tối đa hóa thông lượng. Điều này có nghĩa là đối với ít nhất một cạnh, chúng tôi đã đạt được tốc độ thông lượng tối đa hoặc sau khi loại bỏ luồng đường dẫn này, không còn dòng chảy nào trên cạnh này nữa. Lưu ý rằng điều này giữ trong khoảng thời gian [ t i + 1 , t[i,j][ti,tj]. Trong cả hai trường hợp, không có dòng chảy nào đi qua cạnh này và chúng ta có thể kết luận rằng | F s , t | m.[ti+1,tj1]|Fs,t|m

(*) Tại sao yêu cầu trước đó là đúng? Chà, mọi luồng đường dẫn khác trong bắt đầu trước t i + 1 và kết thúc sau t j - 1 . Do đó, phải trùng lặp về thời gian mà họ sử dụng một cạnh nhất định. Vì thông lượng được tối đa hóa cho luồng đường dẫn, nên phải có một cạnh nơi nó chặt chẽ.Fti,tjti+1tj1

Từ này sau đó cho một số c không đổi và tuyên bố rằng nó nằm trong NP.i,j[k]|Fi,j|cm3c


Đối với tôi, sự phân rã có vẻ bị lỗi, tôi sẽ cố gắng đưa ra một ví dụ minh họa. Giả sử mạng chỉ là một nguồn-> cạnh chìm của dung lượng 100, độ trễ 0, tuổi thọ 100. Bây giờ hãy xem xét lịch biểu luồng này: trong khoảng thời gian [0, 1) gửi luồng với tốc độ 1; trong [1, 2) với tỷ lệ 2, v.v ... lên tới tỷ lệ 100 trong [99, 100). Bất kỳ nhu cầu phân tách nào> = 100 đường dẫn - mâu thuẫn với yêu cầu của bạn khi tôi hiểu nó. Tôi nên đề cập rằng Ford và Fulkerson tránh trở ngại này trong giải pháp cổ điển của họ (không có tuổi thọ) bằng cách xem xét một loại giải pháp tối ưu cụ thể, không phải là một giải pháp tùy tiện.
daveagp

Điều này có lẽ có thể tránh được bằng cách tối đa hóa 'tuổi thọ' của dòng chảy, nhưng có một vấn đề khác trong bằng chứng, tôi đã chỉnh sửa nó để làm cho nó rõ ràng.
Ruub

1

Theo cách tôi hiểu, bạn sẽ chỉ cần lưu trữ một số trên mỗi cung, đại diện cho thời điểm mà luồng bắt đầu được gửi qua cung. Đó là giả định rằng sau đó, hồ quang được hiển thị không thể sử dụng. Nếu, nếu không, hồ quang có thể được sử dụng lại sau khi nó ngừng được sử dụng, thì nó nên có các giải pháp gần tùy ý với các giải pháp để dòng chảy tối đa theo thời gian (vì dòng chảy có thể ngừng được gửi trong một khoảng thời gian nhỏ tùy ý và sau đó bắt đầu được bơm lại ).


Tôi không thể hiểu yêu cầu của bạn là gì.
Tsuyoshi Ito

Tôi không nghĩ rằng điều này là chính xác. Ví dụ, hãy tưởng tượng một mạng có ba nút, s nguồn, đầu cuối t và một nút v khác, với ba cung a1 = (s, v), a2 = (s, v), a3 = (v, t). Công suất của các cung là tất cả 1 và thời gian di chuyển được đặt thành 0 cho a1 và a3 và 100 cho a2. Tuổi thọ là 1 cho a1 và 1000 cho a2 và a3. Sau đó, tại thời điểm 0, người ta có thể gửi một đơn vị luồng qua a1 và a3 từ s đến t và bắt đầu gửi một đơn vị luồng qua a2. Trong thời gian từ 1 đến 99, a3 không có dòng chảy, vì a1 không còn nữa, nhưng tại thời điểm 100, dòng chảy qua a2 đến v và a3 được sử dụng lại.
Yoshio Okamoto

Nếu tôi hiểu chính xác, bạn khẳng định một phần rằng một khi thời gian sinh / tử của các cạnh được cố định, vấn đề còn lại có thể được giải quyết bằng cách sử dụng phương pháp tối đa theo thời gian cổ điển, nhưng tôi không thấy trường hợp này như thế nào.
daveagp

@Yoshio: Trong trường hợp đó, nếu, thay vì bắt đầu gửi một đơn vị luồng dọc theo a2 ngay lập tức, bạn đã dừng gửi hoàn toàn dòng chảy, sau một khoảng thời gian ngắn tùy ý a1 có thể được sử dụng một lần nữa và điều đó sẽ mang lại giải pháp tốt hơn.
Leandro M.

@Dave: không, đó không chính xác là những gì tôi yêu cầu. Điều tôi đang nói là mỗi cung chỉ có thể được sử dụng một số lần hữu hạn hoặc các giải pháp cho vấn đề nên tùy ý xấp xỉ các giải pháp cho dòng chảy tối đa theo thời gian. Tôi lo ngại về các chi tiết của định nghĩa vấn đề, nói ngắn gọn.
Leandro M.
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.