กลับไปหน้าบทความ

อ่าน 10 นาที

วิธีแก้ปัญหา SAT

ใน วิทยาการคอมพิวเตอร์ และ ระเบียบวิธีเชิงรูปธรรม โปรแกรม แก้ปัญหา SAT ( Satisfiability Problem ) คือ โปรแกรมคอมพิวเตอร์ ที่มุ่งแก้ ปัญหาความสามารถในการทำให้เป็นจริงของตัวแปรบูลีน...

วิธีแก้ปัญหา SAT

ในวิทยาการคอมพิวเตอร์และระเบียบวิธีเชิงรูปธรรมโปรแกรม แก้ปัญหา SAT ( Satisfiability Problem ) คือโปรแกรมคอมพิวเตอร์ที่มุ่งแก้ ปัญหาความสามารถในการทำให้เป็นจริงของตัวแปรบูลีน (Boolean satisfiability problem หรือ SAT) โดยเมื่อป้อนสูตรที่มี ตัวแปร บูลีนเช่น "( xหรือy ) และ ( xหรือไม่y )" โปรแกรมแก้ปัญหา SAT จะแสดงผลว่าสูตรนั้นสามารถทำให้เป็นจริงได้ หรือไม่ หมายความว่ามีค่าxและy ที่เป็นไปได้ ที่ทำให้สูตรเป็นจริง หรือไม่สามารถทำให้เป็นจริงได้ หมายความว่าไม่มีค่าxและy ใดๆ ที่ทำให้สูตร เป็นจริง ในกรณีนี้ สูตรจะสามารถทำให้เป็นจริงได้เมื่อxเป็นจริง ดังนั้นโปรแกรมแก้ปัญหาควรส่งคืนค่า "satisfiable" นับตั้งแต่มีการนำเสนออัลกอริทึมสำหรับ SAT ในช่วงทศวรรษ 1960 โปรแกรมแก้ปัญหา SAT สมัยใหม่ได้พัฒนาไปเป็นซอฟต์แวร์ ที่ซับซ้อนมากขึ้น โดยเกี่ยวข้องกับวิธี การเชิงฮิวริสติกและการปรับแต่งโปรแกรมจำนวนมากเพื่อให้ทำงานได้อย่างมีประสิทธิภาพ

จากผลลัพธ์ที่รู้จักกันในชื่อทฤษฎีบท Cook–Levinความสามารถในการทำให้เป็นจริงของบูลีนเป็น ปัญหา NP-completeโดยทั่วไป ส่งผลให้มีเพียงอัลกอริทึมที่มีความซับซ้อนในกรณีที่เลวร้ายที่สุดแบบเลขชี้กำลังเท่านั้นที่เป็นที่รู้จัก ถึงกระนั้นก็ตาม อัลกอริทึมที่มีประสิทธิภาพและปรับขนาดได้สำหรับ SAT ได้รับการพัฒนาในช่วงทศวรรษ 2000 ซึ่งมีส่วนช่วยให้เกิดความก้าวหน้าอย่างมากในความสามารถในการแก้ปัญหาโดยอัตโนมัติที่เกี่ยวข้องกับตัวแปรหลายหมื่นตัวและข้อจำกัดหลายล้านข้อ[ 1 ]

โปรแกรมแก้ปัญหา SAT มักเริ่มต้นด้วยการแปลงสูตรให้อยู่ในรูปแบบปกติเชิงเชื่อมโยง (conjunctive normal form ) โดยส่วนใหญ่จะใช้หลักการพื้นฐาน เช่นอัลกอริทึม DPLLแต่ก็มีการเพิ่มส่วนขยายและคุณสมบัติอื่นๆ เข้าไปด้วย โปรแกรมแก้ปัญหา SAT ส่วนใหญ่จะมีฟังก์ชันกำหนดเวลาหมดอายุ (time-out) ดังนั้นโปรแกรมจะหยุดทำงานในเวลาที่เหมาะสมแม้ว่าจะหาคำตอบไม่ได้ก็ตาม โดยจะแสดงผลลัพธ์เช่น "ไม่ทราบ" ในกรณีดังกล่าว บ่อยครั้งที่โปรแกรมแก้ปัญหา SAT ไม่เพียงแต่ให้คำตอบเท่านั้น แต่ยังสามารถให้ข้อมูลเพิ่มเติมได้ เช่น ตัวอย่างการกำหนดค่า (ค่าสำหรับx , yเป็นต้น) ในกรณีที่สูตรนั้นสามารถหาคำตอบได้ หรือชุดของข้อความที่ไม่สามารถหาคำตอบได้ในกรณีที่สูตรนั้นหาคำตอบไม่ได้

โปรแกรมแก้ปัญหา SAT สมัยใหม่มีผลกระทบอย่างมากต่อสาขาต่างๆ เช่นการตรวจสอบซอฟต์แวร์การวิเคราะห์โปรแกรมการแก้ปัญหาข้อจำกัดปัญญาประดิษฐ์การออกแบบอิเล็กทรอนิกส์อัตโนมัติและการวิจัยเชิงปฏิบัติการ โปรแกรมแก้ปัญหาที่มีประสิทธิภาพมีให้ใช้งานอย่างแพร่หลายในรูปแบบซอฟต์แวร์โอเพนซอร์สฟรีและถูกรวมเข้าไว้ในภาษาโปรแกรมบางภาษา เช่น การเปิดเผยโปรแกรมแก้ปัญหา SAT เป็นข้อจำกัดใน การ เขียน โปรแกรมเชิงตรรกะแบบมีข้อจำกัด

ภาพรวม

สูตรบูลีนคือ นิพจน์ใดๆ ที่สามารถเขียนได้โดยใช้ตัวแปรบูลีน (เชิงประพจน์) x, y, z, ...และการดำเนินการบูลีน AND, OR และ NOT ตัวอย่างเช่น

( xและy ) หรือ ( xและ (ไม่ใช่z ))

การกำหนดค่าประกอบด้วยการเลือกค่าจริงหรือเท็จสำหรับแต่ละตัวแปร สำหรับค่ากำหนดค่าv ใดๆ สูตรบูลีนสามารถประเมินได้ และจะให้ผลลัพธ์เป็นจริงหรือเท็จ สูตรนั้นสามารถทำให้เป็นจริงได้ก็ต่อเมื่อมีค่ากำหนดค่า (เรียกว่าค่ากำหนดค่าที่ทำให้เป็นจริง ) ที่ทำให้สูตรประเมินค่าได้เป็นจริง

ปัญหาความสามารถในการทำให้เป็นจริงของสูตรบูลีน (Boolean satisfiability problem)คือปัญหาการตัดสินใจที่ถามว่า เมื่อได้รับสูตรบูลีนเป็นอินพุต สูตรนั้นสามารถทำให้เป็นจริงได้หรือไม่ ปัญหานี้จัดอยู่ในกลุ่มNP- complete

อัลกอริทึมหลัก

โดยทั่วไปแล้ว โปรแกรมแก้ปัญหา SAT จะถูกพัฒนาขึ้นโดยใช้วิธีการหลักสองวิธี ได้แก่อัลกอริทึม Davis–Putnam–Logemann–Loveland (DPLL) และการเรียนรู้ข้อความแบบขับเคลื่อนด้วยความขัดแย้ง (CDCL)

DPLL

ตัวแก้ปัญหา DPLL SAT ใช้กระบวนการค้นหาแบบย้อนกลับอย่างเป็นระบบเพื่อสำรวจพื้นที่ (ขนาดเลขชี้กำลัง) ของการกำหนดค่าตัวแปรเพื่อค้นหาการกำหนดค่าที่ตรงตามเงื่อนไข กระบวนการค้นหาพื้นฐานนี้ได้รับการเสนอในเอกสารสำคัญสองฉบับในช่วงต้นทศวรรษ 1960 (ดูเอกสารอ้างอิงด้านล่าง) และปัจจุบันมักเรียกกันว่า อัลกอริ ทึมDPLL [ 2 ] [ 3 ]แนวทางสมัยใหม่จำนวนมากในการแก้ปัญหา SAT ในทางปฏิบัติได้มาจากอัลกอริทึม DPLL และมีโครงสร้างเดียวกัน บ่อยครั้งที่แนวทางเหล่านี้ปรับปรุงประสิทธิภาพของปัญหา SAT บางประเภทเท่านั้น เช่น ตัวอย่างที่ปรากฏในแอปพลิเคชันทางอุตสาหกรรมหรือตัวอย่างที่สร้างขึ้นแบบสุ่ม[ 4 ]ในทางทฤษฎี ขอบเขตล่างเลขชี้กำลังได้รับการพิสูจน์แล้วสำหรับตระกูลอัลกอริทึม DPLL

ซีดีซีแอล

ตัวแก้ปัญหา SAT สมัยใหม่ (ที่พัฒนาขึ้นในช่วงปี 2000) มีสองประเภท ได้แก่ "แบบขับเคลื่อนด้วยความขัดแย้ง" และ "แบบมองไปข้างหน้า" ทั้งสองแนวทางสืบทอดมาจาก DPLL [ 4 ]ตัวแก้ปัญหาแบบขับเคลื่อนด้วยความขัดแย้ง เช่นการเรียนรู้ข้อความแบบขับเคลื่อนด้วยความขัดแย้ง (CDCL) เสริมอัลกอริทึมการค้นหา DPLL พื้นฐานด้วยการวิเคราะห์ความขัดแย้งที่มีประสิทธิภาพ การเรียนรู้ข้อความการกระโดดกลับ รูป แบบ การแพร่กระจายหน่วยแบบ "สองตัวอักษรที่เฝ้าดู" การแตกแขนงแบบปรับตัว และการเริ่มต้นใหม่แบบสุ่ม "ส่วนเสริม" เหล่านี้สำหรับการค้นหาแบบเป็นระบบพื้นฐานได้รับการพิสูจน์แล้วว่าเป็นสิ่งจำเป็นสำหรับการจัดการกับอินสแตนซ์ SAT ขนาดใหญ่ที่เกิดขึ้นในระบบอัตโนมัติการออกแบบอิเล็กทรอนิกส์ (EDA) [ 5 ]ตัวแก้ปัญหา SAT ที่ทันสมัยส่วนใหญ่ใช้เฟรมเวิร์ก CDCL ณ ปี 2019 [ 6 ] การใช้งานที่เป็นที่รู้จักกันดี ได้แก่Chaff [ 7 ]และGRASP [ 8 ]

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

MiniSAT ที่ขับเคลื่อนด้วยความขัดแย้ง ซึ่งประสบความสำเร็จในระดับหนึ่งในการแข่งขัน SAT ปี 2005 มีโค้ดเพียงประมาณ 600 บรรทัดเท่านั้น ตัวแก้ปัญหา Parallel SAT ที่ทันสมัยคือ ManySAT [ 9 ]สามารถเพิ่มความเร็วเชิงเส้นได้อย่างมากในกลุ่มปัญหาที่สำคัญ ตัวอย่างของตัวแก้ปัญหาแบบมองล่วงหน้าคือ march_dl ซึ่งได้รับรางวัลในการแข่งขัน SAT ปี 2007 ตัวแก้ปัญหา CP-SAT ของ Google ซึ่งเป็นส่วนหนึ่งของOR-Toolsได้รับเหรียญทองในการแข่งขันการเขียนโปรแกรมข้อจำกัด Minizinc ในปี 2018 จนถึงปี 2025

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

ผู้แก้ปัญหา SAT แต่ละคนจะพบว่ากรณีต่างๆ ง่ายหรือยากแตกต่างกันไป บางคนเก่งในการพิสูจน์ว่าไม่สามารถทำให้พอใจได้ ในขณะที่บางคนเก่งในการหาคำตอบ พฤติกรรมเหล่านี้ทั้งหมดสามารถพบเห็นได้ในการแข่งขันแก้ปัญหา SAT [ 10 ]

แนวทางคู่ขนาน

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

การแข่งขัน International SAT Solver มีแทร็กคู่ขนานที่สะท้อนถึงความก้าวหน้าล่าสุดในการแก้ปัญหา SAT แบบขนาน ในปี 2016 [ 11 ] 2017 [ 12 ]และ 2018 [ 13 ]การทดสอบประสิทธิภาพดำเนินการบน ระบบหน่วย ความจำร่วมที่มีคอร์ประมวลผล 24 คอร์ดังนั้นตัวแก้ปัญหาที่ออกแบบมาสำหรับหน่วยความจำแบบกระจายหรือโปรเซสเซอร์แบบหลายคอร์อาจทำงานได้ไม่ดี

พอร์ตโฟลิโอ

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

ตัวแก้ปัญหาจำนวนมากใช้ ตัวสร้างเลขสุ่มภายในการกระจายเมล็ด พันธุ์ เป็นวิธีง่ายๆ ในการกระจายพอร์ตโฟลิโอ กลยุทธ์การกระจายความเสี่ยงอื่นๆ เกี่ยวข้องกับการเปิดใช้งาน ปิดใช้งาน หรือกระจายฮิวริสติกบางอย่างในตัวแก้ปัญหาแบบลำดับ[ 15 ]

ข้อเสียอย่างหนึ่งของพอร์ตโฟลิโอแบบขนานคือปริมาณงานที่ซ้ำซ้อน หากใช้การเรียนรู้ข้อความในตัวแก้ปัญหาแบบลำดับ การแบ่งปันข้อความที่เรียนรู้ระหว่างตัวแก้ปัญหาที่ทำงานแบบขนานสามารถลดงานที่ซ้ำซ้อนและเพิ่มประสิทธิภาพได้ อย่างไรก็ตาม แม้เพียงแค่การเรียกใช้พอร์ตโฟลิโอของตัวแก้ปัญหาที่ดีที่สุดแบบขนานก็ทำให้ได้ตัวแก้ปัญหาแบบขนานที่มีประสิทธิภาพ ตัวอย่างของตัวแก้ปัญหาดังกล่าวคือ PPfolio [ 16 ] [ 17 ]มันถูกออกแบบมาเพื่อค้นหาขอบเขตล่างสำหรับประสิทธิภาพที่ตัวแก้ปัญหา SAT แบบขนานควรจะสามารถส่งมอบได้ แม้จะมีงานที่ซ้ำซ้อนจำนวนมากเนื่องจากขาดการเพิ่มประสิทธิภาพ แต่ก็ทำงานได้ดีบนเครื่องที่มีหน่วยความจำร่วมกัน HordeSat [ 18 ]เป็นตัวแก้ปัญหาพอร์ตโฟลิโอแบบขนานสำหรับคลัสเตอร์ขนาดใหญ่ของโหนดการคำนวณ มันใช้อินสแตนซ์ที่กำหนดค่าต่างกันของตัวแก้ปัญหาแบบลำดับเดียวกันเป็นแกนหลัก โดยเฉพาะอย่างยิ่งสำหรับอินสแตนซ์ SAT ที่ยาก HordeSat สามารถสร้างความเร็วเชิงเส้นและลดเวลาการทำงานได้อย่างมีนัยสำคัญ

ในช่วงไม่กี่ปีที่ผ่านมา โปรแกรมแก้ปัญหา SAT แบบพอร์ตโฟลิโอคู่ขนานได้ครองการแข่งขัน SAT Solver ระดับนานาชาติในรูปแบบคู่ขนาน ตัวอย่างที่โดดเด่นของโปรแกรมแก้ปัญหาดังกล่าว ได้แก่ Plingeling และ painless-mcomsps [ 19 ]

แบ่งแยกและพิชิต

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

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

เนื่องจากการย้อนกลับที่ไม่เป็นไปตามลำดับเวลา การเรียนรู้ข้อความที่ขับเคลื่อนด้วยความขัดแย้งแบบขนานจึงทำได้ยากขึ้น วิธีหนึ่งที่จะเอาชนะปัญหานี้ได้คือแบบแผน Cube-and-Conquer [ 20 ]ซึ่งแนะนำให้แก้ปัญหาในสองขั้นตอน ในขั้นตอน "cube" ปัญหาจะถูกแบ่งออกเป็นหลายพันถึงหลายล้านส่วน โดยทำผ่านตัวแก้ปัญหาแบบมองไปข้างหน้า ซึ่งจะหาชุดของการกำหนดค่าบางส่วนที่เรียกว่า "cubes" Cube ยังสามารถมองได้ว่าเป็นการเชื่อมโยงของชุดย่อยของตัวแปรในสูตรดั้งเดิม เมื่อรวมกับสูตรแล้ว Cube แต่ละตัวจะสร้างสูตรใหม่ สูตรเหล่านี้สามารถแก้ไขได้โดยอิสระและพร้อมกันโดยตัวแก้ปัญหาที่ขับเคลื่อนด้วยความขัดแย้ง เนื่องจากการแยกของสูตรเหล่านี้เทียบเท่ากับสูตรดั้งเดิม ปัญหาจึงถูกรายงานว่าสามารถแก้ไขได้ หากสูตรใดสูตรหนึ่งสามารถแก้ไขได้ ตัวแก้ปัญหาแบบมองไปข้างหน้าเหมาะสำหรับปัญหาขนาดเล็กแต่ยาก[ 21 ]ดังนั้นจึงใช้เพื่อค่อยๆ แบ่งปัญหาออกเป็นปัญหาย่อยหลายปัญหา ปัญหาย่อยเหล่านี้ง่ายกว่าแต่ก็ยังมีขนาดใหญ่ ซึ่งเป็นรูปแบบที่เหมาะสมสำหรับตัวแก้ปัญหาที่ขับเคลื่อนด้วยความขัดแย้ง ยิ่งไปกว่านั้น ตัวแก้ปัญหาแบบมองไปข้างหน้าจะพิจารณาปัญหาทั้งหมด ในขณะที่ตัวแก้ปัญหาที่ขับเคลื่อนด้วยความขัดแย้งจะตัดสินใจโดยอาศัยข้อมูลที่จำกัดกว่ามาก มีฮิวริสติกสามอย่างที่เกี่ยวข้องในขั้นตอนลูกบาศก์ ตัวแปรในลูกบาศก์จะถูกเลือกโดยฮิวริสติกการตัดสินใจ ฮิวริสติกทิศทางจะตัดสินใจว่าจะสำรวจการกำหนดค่าตัวแปรใด (จริงหรือเท็จ) ก่อน ในกรณีปัญหาที่สามารถแก้ไขได้ การเลือกสาขาที่สามารถแก้ไขได้ก่อนจะเป็นประโยชน์ ฮิวริสติกการตัดจะตัดสินใจว่าจะหยุดขยายลูกบาศก์เมื่อใดและส่งต่อไปยังตัวแก้ปัญหาที่ขับเคลื่อนด้วยความขัดแย้งตามลำดับแทน โดยควรให้ลูกบาศก์มีความซับซ้อนในการแก้ปัญหาที่คล้ายคลึงกัน[ 20 ]

Treengeling เป็นตัวอย่างของตัวแก้ปัญหาแบบขนานที่ใช้กระบวนทัศน์ Cube-and-Conquer นับตั้งแต่เปิดตัวในปี 2012 ก็ประสบความสำเร็จหลายครั้งในการแข่งขัน International SAT Solver Competition Cube-and-Conquer ถูกนำมาใช้เพื่อแก้ ปัญหา Boolean Pythagorean triples [ 22 ]

Cube-and-Conquer เป็นการดัดแปลงหรือการวางนัยทั่วไปของแนวทาง Divide-and-conquer ที่ใช้ DPLL ซึ่งใช้ในการคำนวณตัวเลข Van der Waerden w(2;3,17) และ w(2;3,18) ในปี 2010 [ 23 ]โดยที่ทั้งสองขั้นตอน (การแบ่งและการแก้ปัญหาย่อย) ดำเนินการโดยใช้ DPLL

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

วิธีการแบบสุ่ม

อัลกอริทึมที่ไม่ใช่ส่วนหนึ่งของตระกูล DPLL ได้แก่ อัลกอริทึม การค้นหาเฉพาะที่แบบสุ่ม ตัวอย่างหนึ่งคือWalkSATวิธีการแบบสุ่มพยายามค้นหาการตีความที่น่าพอใจ แต่ไม่สามารถสรุปได้ว่าอินสแตนซ์ SAT นั้นไม่สามารถทำให้พอใจได้ ซึ่งแตกต่างจากอัลกอริทึมที่สมบูรณ์ เช่น DPLL [ 4 ]

ในทางตรงกันข้าม อัลกอริทึมแบบสุ่ม เช่น อัลกอริทึม PPSZ โดย Paturi, Pudlak, Saks และ Zane จะกำหนดตัวแปรในลำดับแบบสุ่มตามฮิวริสติกบางอย่าง เช่นการแก้ปัญหา ความกว้างที่จำกัด หากฮิวริสติกไม่สามารถหาการตั้งค่าที่ถูกต้องได้ ตัวแปรจะถูกกำหนดแบบสุ่ม อัลกอริทึม PPSZ มีเวลาทำงานสำหรับ3-SAT ซึ่งเป็นเวลาทำงานที่ดีที่สุดที่ทราบสำหรับปัญหานี้จนถึงปี 2019 เมื่อ Hansen, Kaplan, Zamir และ Zwick ได้เผยแพร่การดัดแปลงอัลกอริทึมดังกล่าวโดยมีเวลาทำงานสำหรับ 3-SAT ซึ่งปัจจุบันเป็นอัลกอริทึมที่เร็วที่สุดที่ทราบสำหรับ k-SAT ที่ค่า k ทั้งหมด ในการตั้งค่าที่มีการกำหนดค่าที่น่าพอใจจำนวนมาก อัลกอริทึมแบบสุ่มโดย Schöning มีขอบเขตที่ดีกว่า[ 26 ] [ 27 ] [ 28 ]

แอปพลิเคชัน

ในวิชาคณิตศาสตร์

โปรแกรมแก้ปัญหา SAT ถูกนำมาใช้เพื่อช่วยในการพิสูจน์ทฤษฎีบททางคณิตศาสตร์ผ่านการพิสูจน์โดยใช้คอมพิวเตอร์ช่วยในทฤษฎี Ramseyมีการคำนวณตัวเลข Van der Waerdenที่ไม่เคยรู้จักมาก่อนหลายตัว โดยใช้โปรแกรมแก้ปัญหา SAT เฉพาะทาง ที่ ทำงานบน FPGA [ 29 ] [ 30 ]ในปี 2016 Marijn Heule , Oliver Kullmann และ Victor Marek ได้แก้ปัญหา Boolean Pythagorean triplesโดยใช้โปรแกรมแก้ปัญหา SAT เพื่อแสดงให้เห็นว่าไม่มีวิธีใดที่จะระบายสีจำนวนเต็มได้ถึง 7825 ในลักษณะที่ต้องการ[ 31 ] [ 32 ] Heule ยังได้คำนวณค่าเล็กๆ ของตัวเลข Schur โดยใช้โปรแกรมแก้ปัญหา SAT อีกด้วย [ 33 ]

ในการตรวจสอบซอฟต์แวร์

ตัวแก้ปัญหา SAT ใช้ในการตรวจสอบอย่างเป็นทางการของฮาร์ดแวร์และซอฟต์แวร์ในการตรวจสอบแบบจำลอง (โดยเฉพาะการตรวจสอบแบบจำลองที่มีขอบเขต) ตัวแก้ปัญหา SAT ใช้เพื่อตรวจสอบว่าระบบสถานะจำกัดตรงตามข้อกำหนดของพฤติกรรมที่ตั้งใจไว้หรือไม่[ 34 ] [ 35 ]

ตัวแก้ปัญหา SAT เป็นส่วนประกอบหลักที่ ใช้สร้างตัวแก้ปัญหา satisfiability modulo theories (SMT) ซึ่งใช้สำหรับปัญหาต่างๆ เช่นการจัดตารางงานการดำเนินการเชิงสัญลักษณ์การตรวจสอบแบบจำลองโปรแกรมการตรวจสอบโปรแกรมตามตรรกะของ Hoareและแอปพลิเคชันอื่นๆ[ 36 ]เทคนิคเหล่านี้ยังเกี่ยวข้องอย่างใกล้ชิดกับการเขียนโปรแกรมแบบมีข้อจำกัดและ การ เขียน โปรแกรมเชิงตรรกะ

ในการวางแผนอัตโนมัติ

ตัวแก้ปัญหา SAT (ดูSatplan ) ใช้สำหรับแผนการค้นหา[ 37 ]

ในพื้นที่อื่นๆ

ในการวิจัยการดำเนินงาน ตัวแก้ปัญหา SAT ได้ถูกนำไปใช้เพื่อแก้ปัญหาการเพิ่มประสิทธิภาพและการจัดตารางเวลา[ 38 ]

ในทฤษฎีการเลือกทางสังคมโปรแกรมแก้ปัญหา SAT ถูกนำมาใช้เพื่อพิสูจน์ทฤษฎีบทที่เป็นไปไม่ได้[ 39 ] Tang และ Lin ใช้โปรแกรมแก้ปัญหา SAT เพื่อพิสูจน์ทฤษฎีบทของ Arrowและทฤษฎีบทที่เป็นไปไม่ได้แบบคลาสสิกอื่นๆ Geist และ Endriss ใช้มันเพื่อค้นหาความเป็นไปไม่ได้ใหม่ๆ ที่เกี่ยวข้องกับการขยายเซต Brandt และ Geist ใช้แนวทางนี้เพื่อพิสูจน์ความเป็นไปไม่ได้เกี่ยวกับวิธีแก้ปัญหาการแข่งขันที่พิสูจน์กลยุทธ์ได้ ผู้เขียนคนอื่นๆ ใช้เทคโนโลยีนี้เพื่อพิสูจน์ความเป็นไปไม่ได้ใหม่ๆ เกี่ยวกับความขัดแย้งของการไม่มาปรากฏ ตัว ความเป็นเอกรูปครึ่งทาง และกฎการลงคะแนนแบบความน่าจะเป็น Brandl, Brandt, Peters และ Stricker ใช้มันเพื่อพิสูจน์ความเป็นไปไม่ได้ของกฎที่พิสูจน์กลยุทธ์ได้ มีประสิทธิภาพ และยุติธรรมสำหรับ การเลือก ทางสังคมแบบเศษส่วน[ 40 ]

ดูเพิ่มเติม

  • ภาพรวมการแข่งขัน SAT ตั้งแต่ปี 2002 เป็นต้นมา
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=SAT_solver&oldid=1360637703 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ วิธีแก้ปัญหา SAT

ใน วิทยาการคอมพิวเตอร์ และ ระเบียบวิธีเชิงรูปธรรม โปรแกรม แก้ปัญหา SAT ( Satisfiability Problem ) คือ โปรแกรมคอมพิวเตอร์ ที่มุ่งแก้ ปัญหาความสามารถในการทำให้เป็นจริงของตัวแปรบูลีน...

ภาพรวม

สูตร บูลีน คือ นิพจน์ใดๆ ที่สามารถเขียนได้โดยใช้ตัวแปรบูลีน (เชิงประพจน์) x, y, z, ... และการดำเนินการบูลีน AND, OR และ NOT ตัวอย่างเช่น

อัลกอริทึมหลัก

โดยทั่วไปแล้ว โปรแกรมแก้ปัญหา SAT จะถูกพัฒนาขึ้นโดยใช้วิธีการหลักสองวิธี ได้แก่ อัลกอริทึม Davis–Putnam–Logemann–Loveland (DPLL) และ การเรียนรู้ข้อความแบบขับเคลื่อนด้วยความขัดแย้ง (CDCL)

DPLL

ตัวแก้ปัญหา DPLL SAT ใช้กระบวนการค้นหาแบบย้อนกลับอย่างเป็นระบบเพื่อสำรวจพื้นที่ (ขนาดเลขชี้กำลัง) ของการกำหนดค่าตัวแปรเพื่อค้นหาการกำหนดค่าที่ตรงตามเงื่อนไข กระบวนการค้นหาพื้นฐานนี้ได้รับการเสนอในเอกสารสำคัญสองฉบับในช่วงต้นทศวรรษ 1960...