NP hoàn thành hoặc NP khó khăn trong cuộc sống thực


17

Có ai có ví dụ thực tế khi họ thường xuyên giải quyết các vấn đề NP hoàn chỉnh hoặc NP khó khăn (bằng phương pháp phỏng đoán, hoặc theo đuổi một giải pháp tối ưu hoặc bất cứ điều gì) trong công việc của họ không? Tôi biết chúng xảy ra trong việc lập kế hoạch, lập kế hoạch, thiết kế VLSI, v.v., nhưng tôi đang cố gắng có được ý tưởng về các ngành công nghiệp chính sử dụng các lập trình viên hoặc kỹ sư ngày nay thường xuyên làm việc này. Nếu một người phát triển chuyên môn hoặc thư viện, thì nói, tối ưu hóa tổ hợp, nơi người ta có thể sử dụng nó như một phần của công việc lập trình?

Bất kỳ tài khoản cá nhân?


Bạn có ý nghĩa gì khi "thường xuyên"
Conrad Frix

@Conrad, tốt, tôi đoán đó là một ý tưởng chủ quan. Tôi muốn nói có thể hơn 5-10% nỗ lực tập trung vào giải quyết các vấn đề khó hoàn thành hoặc khó khăn.
highBandWidth

Lập trình AI trong các trò chơi có tiềm năng hoàn thành NP, tôi tin thế.
Michael K

Có rất nhiều vấn đề NP-hard ngoài kia (lập kế hoạch và lập kế hoạch với các nguồn lực hữu hạn thường là NP-hard). Tuy nhiên, tối ưu hóa tổ hợp là cách đi sai. Có thể tạo 100! kết hợp càng nhanh càng tốt, ít hữu ích hơn nhiều so với việc có thể áp dụng các phương pháp phỏng đoán cụ thể theo miền.
David Thornley

@David, tôi không có nghĩa là tạo ra các kết hợp bằng cách tối ưu hóa tổ hợp. Tôi đã đề cập đến một loại vấn đề, như vấn đề k-SAT hoặc Nhân viên bán hàng du lịch, v.v.
highBandWidth

Câu trả lời:


8

Một số điều tôi có thể nghĩ ra (hầu hết trong số này tôi đã tham gia ít nhiều):

  • Môi trường phát triển cho các ngôn ngữ và trình biên dịch. Những câu hỏi như: ngữ pháp này có tạo ra một ngôn ngữ mơ hồ không? (Vấn đề này thực sự không thể giải quyết được!)
  • Phục hồi dữ liệu. Tập hợp lại các gói dữ liệu bị mất một phần hoặc khôi phục các tệp bị phân mảnh. (Yếu tố phức tạp)
  • Bảo mật phần mềm. Đánh giá tất cả các đường dẫn thực thi có thể thông qua một phần mềm để xác định xem một số hành vi được quan sát có thể được quy cho nó hay không. (Ngừng vấn đề?)
  • Hậu cần. Tối ưu hóa việc sử dụng vận tải dựa trên các gói để vận chuyển, kích thước của chúng và nơi chúng phải đi. (Ít nhất là theo cấp số nhân)

Có rất nhiều ví dụ tiêu chuẩn như tìm ra con đường ngắn nhất, lên lịch cho y tá, v.v. nhưng nếu bạn đang tối ưu hóa tổ hợp, bạn sẽ biết tất cả về những điều đó :)


Vì vậy, có những lập trình viên được tuyển dụng bởi các công ty hậu cần thực sự dành cho việc giải quyết các vấn đề tối ưu hóa này, hay hầu hết các hoạt động này thường được giải quyết một lần và chỉ được lặp lại cho hầu hết các công ty? +1 cho một số ví dụ. Bạn có / bạn đã tham gia vào bất kỳ trong số này?
highBandWidth

Hai công cụ đầu tiên tôi đã viết, thứ ba là thứ mà các đồng nghiệp làm việc. Tôi hy vọng rằng các công ty hậu cần lớn sẽ tích cực nghiên cứu trong lĩnh vực này vì nó có thể giúp họ tiết kiệm hàng triệu đô la nếu họ đạt được hiệu suất cao hơn vài phần trăm thông qua một số thuật toán mới :)
Deckard

Tôi đã phỏng vấn cho một vai trò nhân viên bán hàng du lịch. Công ty mẹ lớn có một phòng chứa đầy các tiến sĩ đang hoạt động với hy vọng có được một phần mười cải thiện phần trăm trong định tuyến của họ. Điều đó sẽ đáng giá vài triệu đô la cho họ ... mỗi ngày. Vì vậy, những nơi đó tồn tại. Công cụ định tuyến và lập lịch trình là hai ông lớn - hãy tưởng tượng bạn có 1000 người và một nhà máy chạy hai hoặc ba ca. Bây giờ hãy lên lịch cho tất cả mọi người làm việc cho tháng tiếp theo, hãy ghi nhớ 200 quy tắc và sở thích của mọi người ...

9

Tôi đã sử dụng thời gian mô phỏng hạn chế ủ để giải quyết một nhân viên bán hàng du lịch như vấn đề trong sản xuất bảng điều khiển cảm ứng. Mỗi mili giây chúng ta có thể cạo từ thời gian chu kỳ khắc laser của mỗi bảng sẽ làm tăng thông lượng, mức độ sử dụng và do đó lợi nhuận của máy, vì vậy tôi đã nỗ lực rất nhiều để giảm thiểu thời gian chết (đường dẫn không ghi chép) rõ ràng là không thể được tối ưu hóa đi).

Tôi đã sử dụng thuật toán giới hạn thời gian để khắc phục độ cứng NP của vấn đề, vì chúng tôi không thể chấp nhận rủi ro rằng việc tính toán tối ưu hóa có thể mất nhiều thời gian hơn thời gian tiết kiệm bằng con đường tối ưu hơn. Trong khi máy đang di chuyển bảng điều khiển từ vị trí tải sang vị trí mà đầu laser ở góc gần nhất, tôi có thời gian để chạy một số mô phỏng. Thuật toán gần như không bao giờ chạy đến khi hoàn thành trong vài trăm mili giây di chuyển, nhưng hầu như luôn trả về một con đường ghi chép tốt hơn bất kỳ mô hình đơn giản, không thích ứng nào mà chúng ta đã luôn sử dụng trước đây (như đường xoắn ốc hoặc rắn).


2
Thật tuyệt. Nhưng tôi nghĩ mọi bảng điều khiển sẽ có cùng một mẫu và bạn sẽ chỉ giải quyết vấn đề một lần thay vì lặp đi lặp lại cho mọi tiện ích. Tại sao bạn phải giải quyết nó mỗi lần?
highBandWidth

2
Mẫu lý tưởng là giống nhau cho mỗi bảng, nhưng sự liên kết cơ học của bảng, vị trí của các lớp trước trong quy trình và tính chất lát gạch của đầu ghi chép laser có nghĩa là phải tính toán một bộ mẫu phụ động cho mỗi bảng cá nhân và sau đó tối ưu hóa. Đó là một vấn đề thú vị để làm việc, đặc biệt là với các hạn chế về thời gian.
Đánh dấu gian hàng

7

Tôi đang làm việc (ngay bây giờ, thực sự) về vấn đề tin sinh học của nhiều liên kết chuỗi DNA cục bộ. Vấn đề ở đây là nếu rất nhiều trình tự từ các gen có một số thuộc tính chung (hồ sơ biểu hiện tương tự hoặc cùng một yếu tố phiên mã liên kết trong một thí nghiệm chip ChIP) sẽ liên kết mạnh mẽ tại một số điểm, thì có lẽ bạn đã tìm thấy lý do cho sự phổ biến của chúng bất động sản. Sau đó, một lần nữa, tôi quan tâm nhiều hơn đến các khía cạnh thống kê của vấn đề. Mặc dù đó là NP-hard, bạn không mất nhiều bằng cách sử dụng phương pháp phỏng đoán trong thực tế. Phần thú vị của vấn đề, IMHO, là vấn đề về tín hiệu tỷ lệ nhiễu.


1
bạn đang sử dụng phương pháp kết hợp / ai cổ điển hoặc phương pháp thống kê. Theo một cách nào đó, tất cả các nlp hiện đại, phân cụm, học máy đều xử lý các vấn đề hoàn thành np, nhưng thường bị tấn công từ góc độ thống kê. Tuy nhiên, nó thú vị và có liên quan. Đây là trong học viện hay ngành công nghiệp?
highBandWidth

@highBandWidth: Cách tiếp cận của tôi là thống kê. Tôi đang ở trong học viện. Toàn bộ quan điểm của nghiên cứu tôi đang làm là nếu bạn bỏ qua các vấn đề thống kê và chỉ tập trung vào vấn đề tổ hợp, Bad Things Happen.
dsimcha

3

Tôi thực sự không biết, NP hoàn thành / khó nghĩa là gì, nhưng tôi nghĩ, cung cấp tự động hóa là một loại điều đó.

Bạn có kế hoạch nhu cầu 90 ngày chuyển tiếp cho 100 SKU sản phẩm: bia! SKU 100 sản phẩm đến từ:

  • có từ 10 - 15 loại nguyên liệu được ủ thô cấp 1, chúng được ủ trong những lon lớn hàng nghìn lít, và phải mất một ngày;
  • sau khi pha, một số nguyên liệu phải được thêm vào (men?), và nó phải được nghỉ trong vòng 10 - 15 ngày, sau đó bạn có được 15-20 loại cấp 2;
  • cuối cùng, khi nó sẵn sàng, một số nguyên liệu nên được thêm vào, đó là thứ cấp 3, được gọi là bia có thể uống được, có cc. 30 loại bia;
  • bia có thể được đóng chai là 3 dl, 5 dl, đôi khi nó được cổ đặc biệt (cấp 4), sau đó có thể được đóng gói dưới dạng hộp 5x4, 6 gói (cấp 5).

Có "dòng" máy cho mỗi hoạt động: từ sản xuất bia đến đóng gói. Các máy móc có thể thực hiện nhiều hoạt động hơn, giả sử, một số máy đóng gói có thể tạo ra 6 gói và 3 gói, nhưng một số khác chỉ có thể thực hiện 6 gói. Có những hạn chế, ví dụ như tốc độ, hoặc ấm đun nước lớn để pha tối thiểu. 6000, tối đa, 8000 l bia, (nhưng nếu loại bia nhẹ, thì tối thiểu là 5000 l và tối đa là 7000 l). Và như vậy, trên mọi cấp độ.

Nhiệm vụ: như tôi đã đề cập, có một kế hoạch nhu cầu, cho 100 loại cấp 5 (các loại đóng chai, đóng gói). Lập một kế hoạch sản xuất tối ưu cho tất cả 5 cấp độ, tất cả các máy. Giảm thiểu các công tắc máy (ví dụ: đóng chai .5, .5, .5, .3, .3, .3 tốt hơn .3, .5, .3, .5, .3, .5, có ít swithc hơn, ít thời gian chết hơn cho máy đóng chai). Ưu tiên của khách hàng: một số khách hàng yêu cầu chỉ giao bia với hơn 50% thời gian hết hạn. Vân vân.

Khám phá các nút thắt cổ chai (eh), lập kế hoạch thay thế bằng cách thêm các máy không tồn tại vào các điểm này, sau đó kịch bản ảo tốt nhất có thể được sử dụng để đề xuất mua máy mới.

Nó có đủ khó không, hay tôi nên nói cho bạn biết một nhà máy dệt hoạt động như thế nào?

(Nhận xét cá nhân: web, ngân hàng và hậu cần là những lĩnh vực đầy thách thức, nhưng chúng là đồ chơi trẻ em so với các vấn đề sản xuất.)

Disclaimer: số bị bóp méo vì lý do bảo mật, thứ tự độ lớn là có thật.


Bạn đang làm việc trên một cái gì đó như thế này hoặc một công cụ để giải quyết những thứ như thế này cho chủ nhân của bạn?
highBandWidth

1
Vâng, sản xuất là hậu cần viết lớn. Chắc chắn khó hơn tài chính về mặt đó. Nhưng ít nhất nó giải quyết các vấn đề được xác định, không phải là các phương trình ngẫu nhiên và các lệnh hoạt động được xác định một cách lỏng lẻo!
Michael K

1
Bất kỳ loại thuật toán lập lịch với tài nguyên phù hợp nhất có lẽ đều tương đương với bài toán ba lô , đó là NP-Complete.
Scott Whitlock

Một người bạn của tôi đã tạo ra một hệ thống DP / SP trong Excel + VB cách đây nhiều năm. Nó không chứa tự động lập kế hoạch, ứng dụng quá béo đối với Excel. Vì vậy, chúng tôi vừa tạo một bảng tính cộng tác dựa trên MySQL / PHP / AJAX có thể mở rộng (xem: dataflow - hay còn gọi là khung lập trình dựa trên dòng chảy - cách tiếp cận) (tôi) và áp dụng logic biz từ phiên bản XLS (người bạn) . Chúng tôi cũng đã thực hiện tự động lập kế hoạch (bạn bè). Đó là một ý tưởng điên rồ để viết một bảng tính, nhưng nó hoạt động. Phần tốt nhất: XLS-> SQL switch có phần tuyệt vời! Chúng tôi có thể làm bất cứ điều gì với dữ liệu (ví dụ: autoplan), sử dụng bất kỳ công cụ / nền tảng nào (PHP, Java, những gì chúng tôi muốn).
ern0

@ ern0, NP-Complete / NP-hard về cơ bản đề cập đến số lần cắt ngắn mà bạn thậm chí có thể cho là có thể thực hiện thay vì thử từng khả năng từng cái một. Các nhà lý thuyết đã dành rất nhiều nỗ lực để tìm ra các lối tắt, ví dụ như nói rằng nếu chúng ta biết rằng con đường ABC sẽ luôn dài hơn AC trực tiếp, chúng ta có thể làm cho nó nhanh hơn và chứng minh được trong 50% giá trị tối ưu. Vv
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.