ทำไมไม่มีอัลกอริธึมประมาณสำหรับ SAT และปัญหาการตัดสินใจอื่น ๆ


18

ฉันมีปัญหาในการตัดสินใจ NP-complete จากตัวอย่างของปัญหาฉันต้องการออกแบบอัลกอริทึมที่ให้ผลลัพธ์ YES ถ้าปัญหาเป็นไปได้และไม่เช่นนั้น (แน่นอนว่าหากอัลกอริทึมไม่เหมาะสมจะทำให้เกิดข้อผิดพลาด)

ฉันไม่พบอัลกอริทึมการประมาณค่าใด ๆ สำหรับปัญหาดังกล่าว ฉันกำลังมองหา SAT โดยเฉพาะและฉันพบในหน้า Wikipedia เกี่ยวกับอัลกอริทึมการประมาณค่าต่อไปนี้: ข้อ จำกัด อีกประการของวิธีการคือใช้กับปัญหาการปรับให้เหมาะสมเท่านั้นและไม่ใช่ปัญหาการตัดสินใจที่ "บริสุทธิ์" อย่างพอใจ .

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


5
มีอัลกอริทึมประมาณสำหรับ MAX-SAT
Yuval Filmus

2
MAX-SAT ไม่ใช่ปัญหาการตัดสินใจใช่ไหม
Ribz

15
อัลกอริธึมการประมาณค่ามักเป็นปัญหาการเพิ่มประสิทธิภาพเสมอ
Yuval Filmus

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

แม้ว่านี่จะไม่ใช่คำตอบที่สมบูรณ์ แต่ก็อธิบายถึงส่วนหนึ่งของเหตุผล: มีปัญหา SAT ที่สำคัญซึ่งมีเพียงความผิดบิตต่ำเท่านั้นไม่ดีไปกว่าครึ่งที่ผิด
Joshua

คำตอบ:


33

อัลกอริธึมการประมาณนั้นใช้สำหรับปัญหาการปรับให้เหมาะสมเท่านั้นไม่ใช่สำหรับปัญหาการตัดสินใจ

ทำไมเราไม่กำหนดอัตราส่วนการประมาณให้เป็นเศษส่วนของความผิดพลาดที่อัลกอริทึมทำเมื่อพยายามแก้ปัญหาการตัดสินใจ เนื่องจาก "อัตราส่วนการประมาณ" เป็นคำที่มีความหมายมาตรฐานที่กำหนดไว้อย่างดีคำหนึ่งที่หมายถึงอย่างอื่นและมันอาจสร้างความสับสนให้ใช้คำเดียวกันสำหรับสองสิ่งที่แตกต่างกัน

ตกลงเราสามารถกำหนดอัตราส่วนอื่น ๆ (ลองเรียกมันว่าอย่างอื่น - เช่น "อัตราส่วนเดช") ที่กำหนดจำนวนข้อผิดพลาดที่อัลกอริทึมทำสำหรับปัญหาการตัดสินใจหรือไม่? ยังไม่ชัดเจนว่าจะทำอย่างไร ส่วนไหนของเศษส่วนนั้น? หรือพูดอีกอย่างคือ: จะมีอินสแตนซ์ปัญหาจำนวนอนันต์และสำหรับบางคนอัลกอริทึมจะให้คำตอบที่ถูกต้องและอื่น ๆ ก็จะให้คำตอบที่ผิดดังนั้นคุณจะจบด้วยอัตราส่วนที่ "บางสิ่งบางอย่างหารด้วยอินฟินิตี้" และท้ายที่สุดกลายเป็นความหมายหรือไม่ได้นิยามไว้

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

ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการจัดการกับคน intractability (NP-แข็ง) จะดูที่การจัดการกับ intractability: ปัญหา


3
+1 แต่จุดสุดท้ายไม่ทึบเราสามารถยืนยันได้ว่าคุณสามารถกำหนดอัตราส่วนการประมาณเป็นขีด จำกัด เมื่อ n ไปที่ระยะอนันต์ของจำนวนข้อผิดพลาดที่โปรแกรมทำกับอินพุตของความยาว n กับจำนวนสตริงที่มีความยาว n หลักสูตรนี้กลายเป็นว่าไม่มีประโยชน์เพราะบ่อยครั้งที่โปรแกรมง่าย ๆ ที่เพิ่งส่งออก "ใช่" (หรือ "ไม่") ได้อัตราส่วนที่ดี (บางครั้งถึง 1!)
aelguindy

1
@det นั่นเป็นคำถามที่แยกต่างหากซึ่งเป็นคำถามที่คุณควรถามแยกต่างหาก (หลังจากอ่านเกี่ยวกับเรื่องนี้ในหนังสือเรียนมาตรฐานหรือแหล่งข้อมูลออนไลน์) เราต้องการให้คุณถามเพียงหนึ่งคำถามต่อโพสต์
DW

1
@aelguindy จุดดี ฉันได้อัพเดตคำตอบแล้ว
DW

2
@det ทำไมโลภ? การ "เกือบ" หมายความว่าอย่างไรในการแก้ปัญหาการตัดสินใจ
ราฟาเอล

2
@ Mehrdad: โดยปกติคุณประเมินอัลกอริทึมการประมาณโดยข้อผิดพลาดกรณีที่เลวร้ายที่สุด: ขอบเขตบนในวิธีที่ไม่เหมาะสมมันเคยเป็น ตัวอย่างเช่นคุณอาจบอกว่าอัลกอริทึมการประมาณที่กำหนดมักพบผลลัพธ์ที่อย่างน้อยห้าในหกของผลลัพธ์ที่ดีที่สุด ไม่มีวิธีการแปลว่าเป็นปัญหาการตัดสินใจจริง หากบางครั้งอัลกอริทึมของคุณปล่อยออกมา (พูด) 0.1 ก็อาจจะปิดด้วย 0.9 (ซึ่งในกรณีนี้คุณจะทำได้ดีกว่าในกรณีที่เลวร้ายที่สุดที่จะเปล่งออกมา 0.5) หรือ "ความใกล้เคียง" คือความหลอกลวงและ "0.1 "จริง ๆ แล้วหมายถึง" 0 "
ruakh

14

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

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

เป็นกรณีศึกษาพิจารณาปัญหาการหยุด ปัญหาการหยุดชะงักเป็นที่ทราบกันว่าไม่สามารถตัดสินใจได้ มันเป็นความอัปยศเพราะเป็นปัญหาที่มีประโยชน์มากที่สามารถแก้ไขได้หากคุณสร้างคอมไพเลอร์ อย่างไรก็ตามในทางปฏิบัติเราพบว่าโปรแกรมส่วนใหญ่นั้นง่ายต่อการวิเคราะห์จากมุมมองปัญหาการหยุดชะงัก คอมไพเลอร์ใช้ประโยชน์จากสิ่งนี้เพื่อสร้างรหัสที่ดีที่สุดในสถานการณ์เหล่านี้ อย่างไรก็ตามคอมไพเลอร์ต้องยอมรับว่ามีความเป็นไปได้ที่บล็อกของรหัสเฉพาะจะไม่สามารถตัดสินใจได้ โปรแกรมใด ๆ ที่อาศัยรหัสนั้นมีแนวโน้มที่จะเป็น "decidable" อาจมีปัญหา

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


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

1
@det ผลักดันกลับและแก้ไขปัญหา หากคุณมีปัญหา NP-สมบูรณ์คุณค่อนข้างติด แต่มีแนวโน้มว่าคุณไม่จริงต้องแก้ปัญหาหนึ่ง ตัวอย่างเช่นคุณไม่ต้องการคำตอบที่สมบูรณ์แบบเสมอไป อาจจะใกล้ดีพอ หรือบางทีคุณสามารถแก้ปัญหาสำหรับกรณีย่อย ๆ ซึ่งง่ายและถ่อในกรณีที่ยาก ยกตัวอย่างเช่นอัลกอริธึมการบรรจุมักจะทำให้เกิดปัญหา - สมบูรณ์ แต่อัลกอริธึมที่เชื่อถือได้ภายใน 5% ของการใช้วิธี probabalistic เป็นเรื่องธรรมดา
Cort Ammon - Reinstate Monica

2
ในความซื่อสัตย์ทั้งหมดการได้รับคำสั่งให้คิดอัลกอริธึมโลภในการแก้ปัญหาโปรแกรมที่สมบูรณ์แบบนั้นเหมือนกับที่ได้รับมอบหมายให้ทำหน้าที่เกี่ยวกับวิทยาศาสตร์คอมพิวเตอร์ / ชุมชนคณิตศาสตร์ทั้งหมดโดยลำพัง หากคุณพบว่าอัลกอริทึมสำหรับโปรแกรม NP-เสร็จสมบูรณ์ในเวลา P ที่มากอย่างน้อยคุณจะได้รับรางวัลดิน $ 1 ล้านสำหรับการแก้ P = NP ในความเป็นจริงผลกระทบจากการค้นพบของคุณจะเปลี่ยนรูปคอมพิวเตอร์ตามที่เรารู้จักและทำให้อุตสาหกรรมการรักษาความปลอดภัย / การเข้ารหัสทั้งหมดมีการปรับปรุงตลอดคืน ดีกว่าที่จะมีการใช้ถ้อยคำของงานปรับเป็น NP ไม่สมบูรณ์
Cort Ammon - Reinstate Monica

ฉันใช้อัลกอริทึมที่แน่นอนโลภสำหรับปัญหา NP-Complete ฉันจำเป็นต้องแก้ปัญหาเล็ก ๆ น้อย ๆ เท่านั้นและฉันจะได้รับเซิร์ฟเวอร์ตัวประมวลผล 64 ตัวในช่วงสุดสัปดาห์
Patricia Shanahan

8

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

ด้วยอัลกอริธึมเหล่านี้ผลลัพธ์เพียงหนึ่งในสองข้อนั้นถูกกำหนดด้วยความแน่นอนในขณะที่อีกอันอาจไม่ถูกต้อง ทำแบบทดสอบ Miller-Rabin เพื่อหาหมายเลขเฉพาะตัวอย่างเช่น: หากการทดสอบพิจารณาว่าหมายเลขไม่ได้เป็นจำนวนเฉพาะผลลัพธ์นั้นแน่นอน แต่ในกรณีอื่นหมายถึงเฉพาะตัวเลขที่น่าจะเป็นเท่านั้น คุณสามารถเพิ่มความมั่นใจในผลลัพธ์ แต่จะไม่เป็น 100% เนื่องจากเป็นกรณีที่ไม่สำคัญขึ้นอยู่กับระยะเวลาคำนวณที่คุณยินดีลงทุน

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


มีความแตกต่างใหญ่ระหว่างอัลกอริธึม (คำตอบของคุณ) และการประมาณ (คำถาม) โดยเฉพาะอย่างยิ่งการรวมกันของทั้งสองเป็นสายพันธุ์ที่พิเศษมาก
กราฟิลส์

ยิ่งไปกว่านั้นเรารู้ว่าอัลกอริธึมที่น่าจะเป็นสำหรับปัญหาการหยุดชะงักไม่มีอยู่สมมติว่ามีการตีความคำที่เหมาะสมในบริบทนี้
กราฟิลส์

@ ราฟาเอลฉันไม่ได้ตั้งใจจะตอบเฉพาะอัลกอริธึมที่น่าจะเป็น ได้รับจริงสำหรับ Miller-Rabin แต่เป็นอย่างที่คุณพูดถึงตัวคุณเองนี่ไม่เป็นความจริงอีกต่อไปสำหรับตัวอย่างปัญหาการหยุดชะงักและฉันคิดว่ามันจะไม่เป็นจริงสำหรับกรณีส่วนใหญ่ที่คุณพบพฤติกรรมนี้ จุดที่ฉันต้องการข้ามคือการที่คุณจะมั่นใจในผลลัพธ์เพียงอย่างเดียว แต่ไม่ได้อยู่ที่อื่น
ComicSansMS

หากคุณไม่ได้พูดมากกว่านั้นปัญหาบางอย่างเป็นเพียงการคำนวณแบบกึ่งฉันไม่คิดว่าคุณกำลังตอบคำถาม
กราฟิลส์

@ ราฟาเอลคำตอบของฉันไม่เฉพาะเจาะจงกับปัญหาที่คำนวณได้ ในความเป็นจริงฉันไม่คิดว่าวิธีที่ฉันอธิบายจะใช้กับปัญหากึ่งคำนวณ ที่นั่นตอนนี้คุณจะแน่ใจได้ว่าถ้าคุณลงจอดในสาขาที่ไม่ได้กำหนดไว้ของฟังก์ชันดังนั้นคุณสามารถเรียกร้องได้อย่างมั่นใจว่าไม่มีผลลัพธ์ สิ่งที่ฉันอธิบายเดือดลงไป: อาจมีคำตอบ แต่อัลกอริทึมอาจดูไม่ยากพอที่จะสะดุด
ComicSansMS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.