มีวิธีการทั่วไปในการประเมินความเหมาะสมของอัลกอริธึมการเพิ่มประสิทธิภาพหรือไม่?


9

มีวิธีการทั่วไปในการประเมินความเหมาะสมของอัลกอริธึมการปรับให้เหมาะสมที่สุดตัวอย่างเช่นอัลกอริทึมที่แก้ปัญหา NP-hard หรือ NP-complete

วิธีเดียวที่ฉันค้นพบคือการเปรียบเทียบผลลัพธ์ของอัลกอริทึมกับโซลูชันที่ดีที่สุดที่รู้จักกันแล้ว

ถ้าไม่มีมีวิธีการเฉพาะสำหรับปัญหาพิเศษหรือไม่?

แก้ไขเพื่อชี้แจง: โดยการเพิ่มประสิทธิภาพฉันหมายถึงว่าผลลัพธ์ใกล้ถึงผลลัพธ์ที่ดีที่สุดเพียงใด


อาจเป็นคำถามสำหรับcstheory.stackexchange.comหรือ
Luciano

คุณจะกำหนด 'การเพิ่มประสิทธิภาพ' ของอัลกอริทึมการเพิ่มประสิทธิภาพได้อย่างไร คุณต้องการทำการวิเคราะห์บนซอร์สโค้ดแล้วรายงานว่าปัจจัยการประมาณของมันคืออะไร?
อเล็กซ์สิบ Brink

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

คำตอบ:


3

ขึ้นอยู่กับชนิดของปัญหา

หากมีรูปแบบการประมาณเวลาพหุนาม (PTAS)สำหรับปัญหา (เช่น Euclidian TSP) คุณสามารถหาวิธีแก้ปัญหาที่ใกล้กับคำตอบที่เหมาะสมที่สุดในเวลาพหุนาม นั่นหมายความว่าสำหรับทุกอี > 0 มีขั้นตอนวิธีการพหุนามเวลาที่จะหาทางออกโดยประมาณในการแก้ไขปัญหาของคุณที่รับประกันว่าจะได้รับภายใน (1+ อี ) ของการแก้ปัญหาที่ดีที่สุด ในกรณีนี้คุณจะเปรียบเทียบความซับซ้อนของรันไทม์ / หน่วยความจำสำหรับอัลกอริธึมสองตัวสำหรับค่าeเดียวกัน หากอัลกอริทึมหนึ่งสามารถสร้าง "การรับประกันประสิทธิภาพสูงสุด" ที่เหมือนกันได้ดีกว่า แต่มีค่าใช้จ่าย / เวลาในการทำงานต่ำกว่า

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

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


1

ฉันไม่คิดว่าจะมีวิธีทั่วไปในการทำ แต่มีวิธีการทำเช่นนั้นแน่นอน

ยกตัวอย่างเช่นปัญหา SET-COVER สำหรับผู้ที่ไม่ทราบปัญหามีดังนี้

ได้รับชุดขององค์ประกอบB={1,2,...,m}และจำนวนของส่วนย่อยซึ่งเป็นสหภาพแรงงานS_1, S_2, ..., S_n Bคุณกำลังพยายามค้นหาจำนวนขั้นต่ำของชุดย่อยเหล่านี้เพื่อให้สหภาพยังคงBอยู่ ตัวอย่างทั่วไปในโลกแห่งความเป็นจริงของปัญหานี้คือที่ที่คุณได้รับชุดของละแวกใกล้เคียงและคุณกำลังพยายามค้นหาสถานที่ที่เหมาะสมที่สุดในการจัดโรงเรียนเช่นว่าแต่ละเขตจะให้บริการน้อยกว่าระยะทางdจากโรงเรียนที่ใกล้ที่สุด ในกรณีนี้Bคือชุดของที่อยู่อาศัยและS_xประกอบไปด้วยชุดทั้งหมดที่อยู่ในเมืองdx

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

หากอัลกอริทึมที่ดีที่สุดประกอบด้วยkชุดอัลกอริทึมโลภจะประกอบด้วยไม่เกินk ln(n)ชุดที่ ln คือลอการิทึมธรรมชาติ


1

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

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

ปัญหาที่ถามคือปัญหา 'การโหลดรถบรรทุก': เรามีรถบรรทุกเหมือนกันมากมาย (มากเท่าที่เราต้องการ) แต่ละคนสามารถบรรทุกเครื่องชั่งที่มากที่สุด T เรามีวัตถุ n ที่เราต้องการโหลดในรถบรรทุกเหล่านี้สำหรับ ขนส่ง. วัตถุทุกชิ้นที่ฉันมีน้ำหนัก w_i โดยที่ w_i <= T (ดังนั้นจึงไม่มีรายการที่ไม่สามารถติดตั้งบนรถบรรทุกได้ด้วยตัวเอง) รายการไม่สามารถแบ่งออกเป็นชิ้นส่วน เราต้องการเติมรถบรรทุกให้มากที่สุดเท่าที่จะเป็นไปได้ ปัญหานี้เป็นปัญหาที่สมบูรณ์

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

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

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

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


อัลกอริทึมนี้ให้การประมาณด้วยปัจจัยคงที่: อย่างน้อยที่สุด 2 เท่าของวิธีที่ดีที่สุด ตัวอย่างบางส่วนของมาตรการอื่น ๆ : ที่ C มากที่สุดเกินกว่าวิธีที่ดีที่สุด (ข้อผิดพลาดเพิ่มเติม, ค่อนข้างผิดปกติ), c log n เท่าที่ดีที่สุดเท่าที่ทางออกที่ดีที่สุด, cn ครั้งมากที่สุดเท่าที่ดีที่สุด, c 2 มากที่สุด ^ (dn) เวลาไม่ดีเท่าทางออกที่ดีที่สุด (เลวร้ายมากตัวอย่างเช่น TSP ทั่วไปยอมรับเฉพาะอัลกอริทึมที่มีการรับรองประเภทนี้)

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

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

ฉันเรียนรู้สิ่งนี้ (ในจำนวนมากขึ้น) ในหลักสูตรอัลกอริทึมการประมาณที่มหาวิทยาลัยของฉัน


การพิสูจน์ undecidability: ให้ P เป็นปัญหาและ A และ B เป็นขั้นตอนวิธีการประมาณสำหรับ P โดยที่ A และ B ไม่มี 'optimality' เหมือนกันสำหรับคำจำกัดความที่สมเหตุสมผลของ 'optimality' และเวลาทำงานของ A และ B เป็นทั้งโอเมก้า (1) (ช้ากว่าเวลาคงที่อย่างเข้มงวดนั่นคือจะช้าลงสำหรับอินสแตนซ์ที่ใหญ่กว่า) และเมื่อ A และ B หยุดทั้งสองเสมอ

ให้ D เป็นโปรแกรมที่อ้างว่าสามารถคำนวณสิ่งต่อไปนี้ได้: เนื่องจากโปรแกรม C บางตัวคำนวณการประมาณสำหรับ P ตัดสินใจว่ามันดีเท่า A หรือดีเท่า B สำหรับอินพุตที่มีขนาดใหญ่พอ (คุณสามารถใช้สิ่งนี้เพื่อจัดหมวดหมู่โปรแกรม ตามความเหมาะสมของพวกเขา)

จากนั้นเราสามารถใช้ D เพื่อแก้ปัญหาการหยุดชะงัก ให้ E เป็นโปรแกรมและ F เป็นอินพุตสำหรับโปรแกรมนี้ เราจะใช้ D เพื่อตัดสินใจว่า E จะหยุดที่อินพุต F หรือไม่

เราออกแบบโปรแกรม G ที่ทำสิ่งต่อไปนี้: รับอินพุต S สำหรับปัญหา P, มันรัน E บน F และ A บน S ในแบบขนาน: มันรัน E ชั่วขณะหนึ่ง, จากนั้น A, แล้ว E อีกครั้งและต่อ ๆ ไป ถ้า E หยุดการทำงานของ F มันจะหยุดการทำงาน A และแทนที่จะรัน B บน S และส่งคืนผลลัพธ์ของ B ถ้า A หยุดก่อนที่ E จะหยุดมันจะส่งคืนผลลัพธ์ของ A

การใช้ D บน G จะตัดสินว่า E หยุดทำงานกับ F: หรือไม่ถ้า E หยุดทำงานบน F จากนั้นสำหรับอินพุตที่มีขนาดใหญ่พอ S, E หยุดทำงานที่ F ก่อน A หยุดทำงานบน S (เพราะเวลาที่ใช้เพื่อหยุด E ไม่ขึ้นกับขนาดของ อินพุตไม่เหมือนกับ A) ดังนั้นรายงานว่า G มีคุณสมบัติ optimality ของ B ถ้า E ไม่หยุดอยู่กับ F, D จะรายงานว่า G มีคุณสมบัติ optimality ของ A

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.