NP สมบูรณ์หรือปัญหายาก NP ในชีวิตจริง


17

ใครบ้างมีตัวอย่างชีวิตจริงที่พวกเขาแก้ปัญหาปัญหา NP ที่สมบูรณ์หรือปัญหาที่เกิดขึ้นเป็นประจำ (โดยการวิเคราะห์พฤติกรรมหรือไล่ล่าทางออกที่ไม่ดีหรืออะไรก็ตาม) ในงานของพวกเขา? ฉันรู้ว่ามันเกิดขึ้นในการตั้งเวลาการวางแผนการออกแบบ VLSI ฯลฯ แต่ฉันพยายามที่จะเข้าใจแนวคิดของอุตสาหกรรมหลัก ๆ ที่จ้างโปรแกรมเมอร์หรือวิศวกรในปัจจุบันที่ทำสิ่งนี้เป็นประจำ ถ้ามีใครที่จะพัฒนาความเชี่ยวชาญหรือห้องสมุดกล่าวคือการเพิ่มประสิทธิภาพ combinatorial ใครจะใช้มันเป็นส่วนหนึ่งของการเขียนโปรแกรมงาน?

บัญชีส่วนตัวใด ๆ


คุณหมายความว่าอย่างไร "สม่ำเสมอ"
Conrad Frix

@ คอนราดก็ฉันคิดว่ามันเป็นความคิดส่วนตัว ฉันว่าอาจมากกว่า 5-10% ของความพยายามมุ่งเน้นไปที่การแก้ปัญหา np-complete หรือ np-hard
highBandWidth

ฉันเชื่อว่าการเขียนโปรแกรม AI ในเกมมีศักยภาพที่จะทำให้ NP สมบูรณ์
Michael K

มีปัญหามากมายเกี่ยวกับปัญหา NP อยู่ที่นั่น (การกำหนดเวลาและการวางแผนด้วยทรัพยากรที่ จำกัด มักจะเป็นปัญหาที่ยาก) อย่างไรก็ตามการเพิ่มประสิทธิภาพ combinatorial เป็นวิธีที่ผิดไป ความสามารถในการสร้าง 100! ชุดค่าผสมที่เร็วที่สุดมีประโยชน์น้อยกว่าความสามารถในการใช้การวิเคราะห์พฤติกรรมเฉพาะโดเมน
David Thornley

@ David ฉันไม่ได้หมายถึงการสร้างชุดค่าผสมโดยการเพิ่มประสิทธิภาพ combinatorial ฉันหมายถึงชั้นของปัญหาเช่น k-SAT หรือปัญหาพนักงานขายเดินทางเป็นต้น
สูง

คำตอบ:


8

บางสิ่งที่ฉันสามารถนึกได้ (ส่วนใหญ่ฉันเคยมีส่วนร่วมมากหรือน้อย):

  • สภาพแวดล้อมการพัฒนาสำหรับภาษาและคอมไพเลอร์ คำถามเช่น: ไวยากรณ์นี้สร้างภาษาที่ไม่ชัดเจนหรือไม่? (ปัญหานี้ไม่สามารถตัดสินใจได้จริง!)
  • การกู้คืนข้อมูล. ประกอบชิ้นส่วนข้อมูลที่สูญหายไปบางส่วนหรือกู้คืนไฟล์แยกส่วน (ความซับซ้อนของปัจจัย)
  • ความปลอดภัยของซอฟต์แวร์ การประเมินเส้นทางการดำเนินการทั้งหมดที่เป็นไปได้ผ่านชิ้นส่วนของซอฟต์แวร์เพื่อตรวจสอบว่าพฤติกรรมที่สังเกตได้บางอย่างสามารถระบุได้หรือไม่ (หยุดปัญหาหรือไม่)
  • โลจิสติก เพิ่มประสิทธิภาพการใช้การขนส่งตามแพ็คเก็ตเพื่อการขนส่งขนาดและที่ที่พวกเขาต้องไป (อย่างน้อยอธิบาย)

มีตัวอย่างมาตรฐานมากมายเช่นการค้นหาเส้นทางที่สั้นที่สุดการจัดตารางการพยาบาล ฯลฯ แต่หากคุณเข้าสู่การเพิ่มประสิทธิภาพ combinatorial คุณรู้ทุกอย่างเกี่ยวกับสิ่งเหล่านั้น :)


ดังนั้นจึงมีโปรแกรมเมอร์ผู้ว่าจ้าง บริษัท โลจิสติกส์ที่ทุ่มเทเพื่อแก้ไขปัญหาการเพิ่มประสิทธิภาพเหล่านี้หรือส่วนใหญ่ของการดำเนินการเหล่านี้แก้ไขโดยทั่วไปเพียงครั้งเดียวและทำซ้ำสำหรับ บริษัท ส่วนใหญ่หรือไม่ +1 สำหรับตัวอย่างจำนวนหนึ่ง คุณ / คุณเคยเกี่ยวข้องกับสิ่งเหล่านี้หรือไม่?
สูง

สองอันแรกที่ฉันเขียนเครื่องมือสำหรับอันที่สามคือสิ่งที่เพื่อนร่วมงานทำ ฉันคาดหวังว่า บริษัท โลจิสติกส์ขนาดใหญ่จะทำการวิจัยอย่างแข็งขันในพื้นที่นี้เนื่องจากสามารถประหยัดได้หลายล้านดอลลาร์หากพวกเขาบรรลุประสิทธิภาพเพิ่มขึ้นสองเปอร์เซ็นต์ผ่านอัลกอริธึมใหม่ :)
Deckard

ฉันสัมภาษณ์บทพนักงานขายการเดินทาง บริษัท แม่ขนาดใหญ่มีห้องที่เต็มไปด้วยระดับปริญญาเอกที่ลดลงด้วยความหวังว่าจะได้รับการปรับปรุงเล็กน้อยร้อยละสิบในเส้นทางของพวกเขา ซึ่งจะมีมูลค่าไม่กี่ล้านดอลลาร์สำหรับพวกเขา ... ในแต่ละวัน ดังนั้นสถานที่เหล่านั้นมีอยู่จริง สิ่งที่เรากำหนดเส้นทางและการกำหนดตารางเวลาเป็นสองยักษ์ใหญ่ - ลองนึกภาพว่าคุณมี 1,000 คนและโรงงานที่ทำงานสองหรือสามกะ ตอนนี้ทุกคนกำหนดเวลาในการทำงานสำหรับการรักษาในเดือนถัดไปในใจเหล่านี้ 200 กฎระเบียบและการตั้งค่าทุกคน ...

9

ฉันใช้การอบแบบจำลองเวลาที่ จำกัด เพื่อแก้ปัญหาพนักงานขายเดินทางเช่นปัญหาในการผลิตจอสัมผัส ทุกเสี้ยววินาทีที่เราสามารถโกนได้จากรอบเวลาของการแกะสลักเลเซอร์ของแต่ละแผงจะเพิ่มปริมาณงานการใช้งานและผลกำไรของเครื่องดังนั้นฉันจึงใช้ความพยายามอย่างมากในการลดเวลาที่ตายแล้ว (เส้นทางที่ไม่ใช่ scribing) ไม่สามารถปรับให้เหมาะสมได้อย่างชัดเจน)

ฉันใช้อัลกอริธึมที่ จำกัด เวลาเพื่อแก้ไขปัญหาความแข็งของปัญหาเนื่องจากเราไม่สามารถยอมรับความเสี่ยงที่การคำนวณการเพิ่มประสิทธิภาพอาจใช้เวลานานกว่าเวลาที่บันทึกไว้โดยเส้นทางที่เหมาะสมที่สุด ในขณะที่เครื่องกำลังเคลื่อนพาเนลจากตำแหน่งการโหลดไปยังตำแหน่งที่หัวเลเซอร์อยู่เหนือมุมที่ใกล้ที่สุดฉันมีเวลาที่จะทำการจำลองบางอย่าง อัลกอริธึมแทบไม่เคยวิ่งให้เสร็จภายในสองสามร้อยมิลลิวินาทีของการเคลื่อนย้าย แต่มักจะกลับเส้นทางนักเขียนที่ดีกว่าแบบจำลองที่เรียบง่ายและไม่ปรับตัวใด ๆ ที่เราเคยใช้มาก่อน (เช่นเส้นทางเกลียวหรืองู)


2
มันเท่ห์มาก แต่ฉันคิดว่าทุกแผงจะมีรูปแบบเดียวกันและคุณเพียงแค่แก้ปัญหาครั้งเดียวแทนที่จะทำซ้ำ ๆ ทุก ๆ วิดเจ็ต ทำไมคุณต้องแก้ปัญหาทุกครั้ง
highBandWidth

2
รูปแบบในอุดมคตินั้นเหมือนกันสำหรับแต่ละพาเนล แต่การจัดตำแหน่งเชิงกลของพาเนลตำแหน่งของเลเยอร์ก่อนหน้าในกระบวนการและลักษณะที่เป็นกระเบื้องของหัวเลเซอร์ scribing หมายความว่าจะต้องคำนวณเซตย่อยของรูปแบบย่อยสำหรับแต่ละพาเนล ทีละคนและ optmised มันเป็นปัญหาที่น่าสนใจในการทำงานโดยเฉพาะอย่างยิ่งเมื่อได้รับการ จำกัด เวลา
Mark Booth

7

ฉันกำลังทำงาน (ตอนนี้จริง ๆ แล้ว) เกี่ยวกับปัญหาชีวสารสนเทศศาสตร์ของการจัดเรียงลำดับดีเอ็นเอในท้องถิ่นหลายแห่ง ประเด็นนี้คือว่าหากมีการเรียงลำดับจำนวนมากจากยีนที่มีคุณสมบัติทั่วไปบางอย่าง (โปรไฟล์การแสดงออกที่คล้ายกันหรือปัจจัยการถอดความเหมือนกันที่มีผลผูกพันในการทดสอบชิป ChIP) จัดชิดอย่างยิ่งในบางจุดคุณอาจพบว่าสาเหตุของพวกเขา คุณสมบัติ จากนั้นอีกครั้งฉันสนใจด้านสถิติของปัญหามากขึ้น แม้ว่ามันจะเป็นเรื่องยาก แต่คุณก็ไม่เสียอะไรมากในการฝึกฝนฮิวริสติกในทางปฏิบัติ ส่วนที่น่าสนใจของปัญหา IMHO คือปัญหาอัตราส่วนสัญญาณต่อเสียง


1
คุณใช้วิธี combinatorial / ai แบบดั้งเดิมหรือแบบสถิติ ในทุกวิถีทาง nlp สมัยใหม่, การรวมกลุ่ม, การเรียนรู้ของเครื่องจะเกี่ยวข้องกับปัญหาที่เกิดจาก np-complete แต่มักถูกโจมตีจากมุมมองทางสถิติ มันน่าสนใจและมีความเกี่ยวข้อง นี่คือในวงการหรืออุตสาหกรรม?
สูงกว่า

@highBandWidth: วิธีการของฉันเป็นเชิงสถิติ ฉันอยู่ในสถาบันการศึกษา ประเด็นทั้งหมดของการวิจัยที่ฉันทำคือถ้าคุณเพิกเฉยต่อประเด็นทางสถิติและเพียงแค่มุ่งเน้นไปที่ปัญหา combinatorial Bad Things เกิดขึ้น
dsimcha

3

ฉันไม่รู้จริง ๆ ว่า NP สมบูรณ์ / ยากหมายความว่าอย่างไร แต่ฉันคิดว่าการจัดหาการฉีดอัตโนมัติเป็นสิ่งนั้น

คุณมีแผนความต้องการ 90 วันสำหรับผลิตภัณฑ์ 100 SKU: เบียร์! 100 ผลิตภัณฑ์ SKU มาจาก:

  • มีประมาณ 10-15 ชนิดที่มีระดับฐานการผลิตแบบดิบพวกมันถูกต้มในกระป๋องขนาดใหญ่มากมายและต้องใช้เวลาหนึ่งวัน
  • หลังจากต้มแล้วจะต้องเติมวัสดุบางอย่าง (ฟู) และต้องพักเป็นเวลา 10-15 วันจากนั้นคุณจะได้ระดับระดับ 2 ถึง 15-20 ชนิด
  • ในที่สุดเมื่อมันพร้อมวัสดุควรจะเพิ่มบางอย่างมันเป็นสิ่งที่ระดับ 3 เรียกว่าเบียร์ที่ดื่มได้มีซีซี เบียร์ 30 ชนิด;
  • เบียร์สามารถบรรจุขวดได้ 3 dl, 5 dl, บางครั้งจะได้รับ necklacigng พิเศษ (ระดับ 4) จากนั้นก็สามารถบรรจุเป็นกล่อง 5x4, 6-pack (ระดับ 5)

มีเครื่องจักร "เส้น" สำหรับการทำงานแต่ละอย่าง: จากการผลิตจนถึงการบรรจุภัณฑ์ เครื่องจักรสามารถดำเนินการได้มากขึ้นกล่าวคือเครื่องบรรจุบางรุ่นสามารถทำ 6 แพ็คและ 3 แพ็คได้ แต่บางเครื่องสามารถทำได้เพียง 6 แพ็ค มีข้อ จำกัด เช่นความเร็วหรือกาต้มน้ำขนาดใหญ่สำหรับต้มขั้นต่ำ เบียร์ 6,000, สูงสุด, 8000 ลิตร (แต่ถ้าประเภทเบียร์เบาแล้วขั้นต่ำคือ 5,000 ลิตรและสูงสุดคือ 7000 ลิตร) และอื่น ๆ ในทุกระดับ

ภารกิจ: ดังที่ฉันได้กล่าวไปแล้วว่ามีแผนความต้องการสำหรับระดับ 100 ชนิด -5 (สิ่งบรรจุขวดบรรจุหีบห่อ) จัดทำแผนการผลิตที่เหมาะสมที่สุดสำหรับ 5 ระดับทุกเครื่อง ย่อเล็กสุดสวิตช์ของเครื่องจักร (เช่นการบรรจุขวด. 5, .5, .5, .3, .3, .3 จะดีกว่า. 3, .5, .3, .5, .3, .3, .5, .5, มี swithc น้อยกว่า, เวลาที่ตายน้อยลงสำหรับเครื่องบรรจุขวด) ให้ความสำคัญกับลูกค้า: ลูกค้าบางรายต้องจัดส่งเบียร์โดยที่ยังคงมีเวลาหมดอายุมากกว่า 50% ฯลฯ

ค้นหาคอขวด (eh) สร้างแผนสำรองด้วยการเพิ่มเครื่องที่ไม่มีอยู่ในจุดเหล่านี้จากนั้นสถานการณ์จำลองเสมือนที่ดีที่สุดสามารถใช้เพื่อแนะนำให้ซื้อเครื่องใหม่

มันยากพอหรือว่าฉันควรจะบอกคุณว่าโรงงานทอผ้าทำงานอย่างไร

(หมายเหตุส่วนตัว: เว็บธนาคารและโลจิสติกส์เป็นพื้นที่ที่ท้าทาย แต่เป็นของเล่นเด็กเมื่อเทียบกับปัญหาการผลิต)

ข้อจำกัดความรับผิดชอบ: ตัวเลขถูกบิดเบือนเนื่องจากเหตุผลด้านความปลอดภัยลำดับความสำคัญเป็นจริง


คุณกำลังทำงานกับสิ่งนี้หรือเครื่องมือในการแก้ปัญหาแบบนี้กับนายจ้างของคุณหรือไม่?
highBandWidth

1
การผลิตคือโลจิสติกส์ที่มีขนาดใหญ่ หนักกว่าการเงินในแง่นั้นแน่นอน แต่อย่างน้อยก็เกี่ยวข้องกับปัญหาที่กำหนดไม่ใช่สมการสุ่มและคำสั่งที่กำหนดไว้อย่างหลวม ๆ ของการทำงาน
Michael K

1
อัลกอริทึมการจัดตารางเวลาใด ๆ ที่เหมาะสมที่สุดของทรัพยากรน่าจะเทียบเท่ากับปัญหาเป้ซึ่งเป็นปัญหาที่สมบูรณ์
Scott Whitlock

เพื่อนของฉันสร้างระบบ DP / SP ใน Excel + VB เมื่อหลายปีก่อน ไม่มีการสแกนอัตโนมัติแอพนี้อ้วนเกินไปสำหรับ Excel ดังนั้นเราเพิ่งสร้าง MySQL / PHP / AJAX ที่สามารถขยายการทำงานร่วมกันได้ (ดู: dataflow - aka. การเขียนโปรแกรมตามโฟลว์ - วิธีการ) เฟรมเวิร์กชีทสเปรดชีต (ฉัน) และใช้ตรรกะ biz จาก XLS-version (เพื่อน) . เราได้ใช้การสแกนอัตโนมัติเช่นกัน (เพื่อน) มันเป็นความคิดที่บ้าที่จะเขียนสเปรดชีต แต่ใช้งานได้ ส่วนที่ดีที่สุด: XLS-> สวิตช์ SQL นั้นยอดเยี่ยมมาก! เราสามารถทำอะไรกับข้อมูล (เช่น autoplan) โดยใช้เครื่องมือ / แพลตฟอร์ม (PHP, Java, สิ่งที่เราต้องการ)
ern0

@ ern0, NP-complete / NP-hard โดยทั่วไปหมายถึงจำนวนลัดที่คุณสามารถสันนิษฐานได้ว่าจะสามารถใช้แทนที่จะพยายามทุกทางเลือกหนึ่งต่อหนึ่ง นักทฤษฎีใช้ความพยายามอย่างมากในการหาทางลัดซึ่งเช่นบอกว่าถ้าเรารู้ว่าเส้นทาง ABC จะนานกว่า AC โดยตรงเราสามารถทำให้มันเร็วขึ้นและพิสูจน์ได้ว่าอยู่ในระดับ 50% ของมูลค่าที่เหมาะสม อื่น ๆ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.