Tại sao lập trình tuyến tính trong P nhưng lập trình số nguyên NP-hard?


35

Lập trình tuyến tính (LP) nằm trong P và lập trình số nguyên (IP) là NP-hard. Nhưng vì máy tính chỉ có thể thao tác các số với độ chính xác hữu hạn, nên trên thực tế, một máy tính đang sử dụng các số nguyên cho lập trình tuyến tính. Vì điều này, LP và IP không nên nằm trong cùng một lớp phức tạp?


7
Thêm một chút vào câu trả lời của jmite: Có nhiều trường hợp trong đó các ràng buộc tích hợp làm cho vấn đề khó khăn hơn nhiều. Ví dụ, bài toán ba lô phân số có thể được giải quyết trong thời gian đa thức, mặc dù bài toán ba lô số nguyên là NP-Hard. Vì vậy, đây không chỉ là một cái gì đó đúng với LP và IP.
dùng340082710

7
Ngay cả khi chúng tôi xem xét rằng các máy tính thực hiện các hoạt động với số nguyên, thì điều đó không có nghĩa là giải pháp trả về là một số nguyên; nó có thể là hợp lý, tức là tỷ lệ của hai số nguyên. Và điều đó cho phép linh hoạt hơn rất nhiều. Và tất nhiên, chúng ta không thể luôn chuyển đổi một giải pháp hợp lý thành một giải pháp khả thi cho IP. Nói chung, IP sẽ có nhiều ràng buộc hơn về các biến thay vì chỉ yêu cầu giải pháp tích hợp. Hãy nghĩ về một chương trình số nguyên . 0,1
megas

1
Không khó để thao tác các con số với độ chính xác vô hạn nếu bạn muốn, đặc biệt là khi chúng hợp lý. Độ chính xác hữu hạn chỉ đơn thuần là một tối ưu hóa để giảm thời gian chạy.

2
@Hurkyl "Không khó để điều khiển các con số với độ chính xác vô hạn nếu bạn muốn, đặc biệt là khi chúng hợp lý." Có một tập hợp con nghiêm ngặt của các số thực được gọi là các số có thể tính toán được, bao gồm các số hữu tỷ + số như sqrt (2), v.v. và được định nghĩa là tập hợp các số được tính toán bằng máy Turing. Theo định nghĩa, những thứ không được bao gồm ở đó sẽ không thể được thao tác bằng máy tính.
Sasha the Noob

1
@SasheditNoob Những gì bạn đang nói không thực sự mâu thuẫn với những gì Hurkyl nói. Các số có thể tính toán không có giới hạn tối đa được xác định trước về mức độ chính xác của chúng (nó được đặt tùy ý thành bất kỳ giá trị nào bạn muốn với điều kiện máy turing có đủ bộ nhớ - do đó độ chính xác vô hạn). Để nói rằng tập hợp con của Số tính toán bao gồm tất cả các số hữu tỷ, bạn thừa nhận rằng máy tính có thể thao tác các số với độ chính xác vô hạn. (Tuyên bố của Hurkyl là hoàn toàn đúng. Thực tế là độ chính xác bị hạn chế đối với một số loại dữ liệu nhất định chỉ là tối ưu hóa.)
BrainSlugs83 13/03/2015

Câu trả lời:


9

Tôi không thể nhận xét vì nó yêu cầu 50 đại diện, nhưng có một số quan niệm sai lầm đang được lan truyền, đặc biệt là nhận xét của Raphael "Nói chung, một miền liên tục có nghĩa là không có lực lượng vũ phu (và không có phương pháp phỏng đoán thông minh để tăng tốc)."

Điều này là hoàn toàn sai. Điểm mấu chốt thực sự là lồi lõm. Chặn một số trình độ ràng buộc kỹ thuật, tối thiểu hóa hàm lồi (hoặc tối đa hóa hàm lõm) trên tập lồi về cơ bản là tầm thường, theo nghĩa hội tụ thời gian đa thức.

Nói một cách lỏng lẻo, bạn có thể nói có sự tương ứng giữa độ lồi của một vấn đề trong tối ưu hóa "toán học" và khả năng tồn tại của các thuật toán tham lam trong tối ưu hóa "khoa học máy tính". Điều này theo nghĩa là cả hai đều cho phép các phương pháp tìm kiếm địa phương. Bạn sẽ không bao giờ phải theo dõi lại trong một thuật toán tham lam và bạn sẽ không bao giờ phải hối tiếc về hướng đi xuống trong một vấn đề tối ưu hóa lồi. Những cải tiến cục bộ về chức năng mục tiêu sẽ LUÔN dẫn bạn đến gần tối ưu toàn cầu.

Đây không phải là trường hợp không lồi. Ở đây, có thể có một mức tối thiểu toàn cầu, nhưng một số cực tiểu cục bộ mà thuật toán gốc cục bộ sẽ luôn được rút ra, giống như cách các thuật toán tham lam thực hiện khi áp dụng cho các vấn đề NP. Đôi khi họ tìm thấy sự tối ưu thực sự, hầu hết thời gian không.


23

Câu trả lời ngắn gọn: bởi vì bạn có thể sử dụng Số nguyên để mô phỏng Booleans cho SAT , nhưng khi bạn không hạn chế điều này, thì bạn thực sự không thể mô phỏng SAT. Bạn sẽ nhận được một câu trả lời khả thi, nhưng nó không còn mang bất kỳ ý nghĩa nào trong bất kỳ trường hợp SAT nào bạn đang cố gắng mô phỏng.

Câu trả lời khó khăn cho vấn đề này là chúng ta không biết rằng chúng không thuộc cùng một lớp phức tạp. Không ai có một bằng chứng cho thấy . Nếu chúng ta hiểu những lý do sâu xa hơn tại sao các vấn đề lại khác nhau như vậy, điều đó sẽ yêu cầu chúng ta hiểu tại sao các lớp phức tạp lại khác nhau, điều mà chúng ta không làm.PNP


21

Lý do lập trình tuyến tính là "hiệu quả" là không gian giải pháp có thể được biểu diễn bằng một khối đa diện lồi duy nhất. Nếu một người đang cố gắng tìm đỉnh "cao nhất" trên khối đa diện đó (người ta có thể áp dụng một phép biến đổi tuyến tính cho bất kỳ vấn đề lập trình tuyến tính nào để tạo "chiều cao" tương ứng với số lượng được tối đa hóa), thì từ bất kỳ đỉnh nào cũng có thể đi dọc theo các cạnh điểm cao nhất mà không bao giờ phải đi "xuống dốc". Điều làm cho lập trình số nguyên trở nên "khó khăn" là không có không gian giải pháp liên tục, nhưng thay vào đó có nhiều không gian giải pháp rời rạc và không có cách nào để làm việc dần dần đối với giải pháp tối ưu.


2
Từ khóa ở đây là "lồi lõm"
cody

1
Đây không phải là ngọn đồi leo lên phương pháp đơn giản, trong đó không có biến thể nào được biết là đa thức trong trường hợp xấu nhất?
jbapple

1
Có rất nhiều vấn đề dễ giải quyết hơn trong các không gian riêng biệt (cho phép tìm kiếm riêng biệt) so với không gian liên tục.
Raphael

@Raphael: bạn có thể đưa ra một số ví dụ về các vấn đề như vậy? Tôi đã suy nghĩ về điều này và không thể đưa ra nhiều.
cody

@cody Chẳng hạn, tìm các hàm cực đại / cực tiểu của các hàm (một chiều). Xem ở đây để biết một ví dụ dễ thương chỉ trở nên dễ chịu sau khi lưu ý rằng chúng ta có thể giảm không gian tìm kiếm hữu hạn xuống mức hữu hạn. Lưu ý rằng LP là loại đặc biệt theo cách đó: bằng cách lưu ý rằng chúng ta chỉ cần xem xét các góc của khối đa diện, chúng ta có được một không gian tìm kiếm hữu hạn. Nói chung, một miền liên tục có nghĩa là không có lực lượng vũ phu (và không có phương pháp phỏng đoán thông minh để tăng tốc nó).
Raphael

3

Các câu trả lời khác là chính xác, nhưng tôi thấy chúng hơi kỹ thuật. Giả sử bạn đã quét (loại bỏ) một ma trận và đang tìm kiếm bất kỳ giải pháp nào và ma trận trông như thế này:

column x1 x2 x3 x4 x5 x6 | solution
-----------------------------------
       1           1  1  | 3
          1              | 1
             1     1     | 2
                2  1  1  | 1  

Q

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.