Multicore SAT Solver


12

ฉันกำลังพยายามที่จะแก้ปัญหา SAT ข้อ 25k 5k เนื่องจากมันทำงานมาเป็นเวลาหนึ่งชั่วโมง (precosat) และฉันต้องการแก้ปัญหาที่ใหญ่กว่าหลังจากนั้นฉันกำลังมองหา SAT-Solver แบบมัลติคอร์

ดูเหมือนว่าจะมี SAT-Solvers หลายคนฉันจึงค่อนข้างแพ้

ใครช่วยชี้ให้ฉันดีที่สุดสำหรับกรณีของฉัน

ฉันก็จะมีความสุขถ้ามีคนให้เวลาฉันโดยประมาณ (ถ้าเป็นไปได้)


1
คุณกำลังมองหาโปรแกรมสำเร็จรูปอยู่ใช่ไหม? นี่ไม่ใช่ไซต์ที่ดีที่สุดที่จะถาม คุณต้องการเรียนรู้เกี่ยวกับการแก้ปัญหา SAT หรือไม่ ยินดีต้อนรับ! คุณพูดว่าคุณค้นหาแล้ว คุณพบอะไร คุณสับสนอะไร
กราฟิลส์

ฉันดูจำนวนกระทู้ที่เกี่ยวข้องกับ SAT ในฟอรัม StackExchange หลายชุด ฉันลงเอยด้วยการเลือกระหว่างทฤษฎี CS กับ CS (และเลือกภายหลัง) ฉันควรขอโปรแกรมชื่อพร้อมใช้ที่ไหน? ขอบคุณ
multsatsolv

คำตอบ:


8

ดูผลการแข่งขัน SAT 2013 ปีนี้ จากผลลัพธ์เหล่านี้ลองLingelingอย่างแน่นอน การชุบเป็นตัวแปรคู่ขนานของมัน

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


ขอบคุณ ฉันจะดูที่ (P) Lingeling นอกจากนี้ฉันไม่รู้ว่ามันน่าพอใจหรือไม่ (แม้ว่าจะดีกว่า
multsatsolv

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

4

ฉันไม่แน่ใจเกี่ยวกับการมีตัวช่วยแก้ปัญหามัลติคอร์ที่ทำงานได้จริง แต่มีบางโครงการและเอกสาร:

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

แก้ไข:ผสมผสานความคิดเห็นของฉันกับแนวคิดของ vzn ที่นี่:

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


(ฉันก็จะมีความสุขถ้ามีคนให้เวลาฉันโดยประมาณ (ถ้าเป็นไปได้) เพื่อแก้ปัญหา X clause Y ตัวแปร SAT ปัญหา)

ไม่มีใครให้เวลาคุณโดยประมาณโดยใช้ตัวแปรคำสั่งเนื่องจากปัญหา SAT บางอย่างเป็นเรื่องยากมาก (อ่าน: ไม่เกิดขึ้น) เพื่อแก้ปัญหาแม้จะมีขนาดเล็ก ; ในขณะที่อินสแตนซ์ขนาดใหญ่อื่น ๆ สามารถแก้ไขได้ค่อนข้างเร็ว (และสำหรับอินสแตนซ์เหล่านี้ที่ sat satver มีประโยชน์)n เมตร, nmnm,n


ขอบคุณสำหรับลิงค์ ฉันจะอ่านบางส่วน ฉันหวังว่าปัญหาของฉันจะไม่ยากเกินไปที่จะแก้
multsatsolv

@matsatsolv มันขึ้นอยู่กับปัญหา นอกจากนี้ยังขึ้นอยู่กับการเข้ารหัส นักแก้ปัญหา SAT สามารถจัดการการเข้ารหัสที่แตกต่างกันของปัญหาเดียวกันต่างกัน และตัวแก้ SAT ที่แตกต่างกันอาจดีกว่าในการเข้ารหัสหนึ่งครั้ง ไม่มีวิทยาศาสตร์ในเรื่องนี้ (แต่ก็มีค่าเกินกว่าที่จะพยายามทำความเข้าใจในวิวัฒนาการที่รวดเร็วของนักแก้ปัญหา SAT): สิ่งเดียวที่ต้องทำคือลองใช้การเข้ารหัสและตัวแก้ที่แตกต่างกัน
Realz Slaw

3

จริงๆแล้วมีวิธีที่ง่ายมากในการเปลี่ยนตัวแก้ SAT ใด ๆ ให้เป็นแบบขนานเพราะ SAT นั้นขนานกันอย่างน่าละอายในแง่ต่อไปนี้

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


knโดยปกติแล้วจะค่อนข้างใหญ่ (เป็น min-cut บนกราฟส่วนคำสั่งและมันอาจจะใหญ่กว่า backdoor) วิธีอื่นที่คล้ายกันคือเลือกตัวแปรเพียงตัวเดียวตั้งค่าเป็นจริงส่งไปยังอินสแตนซ์ตัวแก้ ตั้งค่าเป็น false และส่งไปยังอินสแตนซ์ตัวแก้ปัญหาอื่น คุณสามารถทำสิ่งนี้เพื่อตัวแปรการเลือกตัวแปรที่จะตั้งอาจเป็นเรื่องยุ่งยากเล็กน้อยเช่น หากพวกเขาพึ่งพากันโดยตรงจากนั้นก็ไม่มีประโยชน์ที่จะเลือกอย่างใดอย่างหนึ่ง ขั้นตอนการทำให้เข้าใจง่ายอาจจำเป็นในการทำตัวเลือกที่ต่อเนื่อง / เรียกซ้ำ k
Realz Slaw

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

@jukka วิธีการใดและทำไมมันใช้งานไม่ได้ดีเกินไป? มันเป็นเพราะความไม่สมดุลในภาระงาน? อาร์เอสมีจุดที่ดีเกี่ยวกับพาร์ติชั่นที่ไม่แบ่งเวิร์กโหลดเท่า ๆ กัน แต่มันมีแนวโน้มที่จะขึ้นอยู่กับโครงสร้างอินสแตนซ์ (สมมาตร) และเขาชี้ให้เห็นว่ามันง่ายที่จะเลือกตัวแปรในตอนแรก เมื่อออกไปตอนเย็นส่งผลให้จำนวน # ของข้อ realz, ไม่เข้าใจประเด็นเกี่ยวกับ vs the backdoor ... คิดว่าแบ็คดอร์เป็นปัญหาที่หายากในอินสแตนซ์ที่ยากจริงๆ ...n
vzn

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

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