#SAT Solver ดาวน์โหลด


21

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


2
สวัสดีวอลเตอร์คำถามของคุณอยู่ใกล้กับสิ่งที่จะเป็น "หัวข้อ" สำหรับเว็บไซต์นี้อย่างเป็นทางการ อย่างไรก็ตามหากคุณไม่มีที่อื่นที่จะถามคำถามนี้และเราสามารถตอบได้บางทีมันก็ไม่ได้แย่ขนาดนั้น ... (เนื่องจากเว็บไซต์ยังอยู่ระหว่างการพัฒนาฉันคิดว่าเราเปิดกว้างกว่าไซต์อื่น ๆ ) ที่จุดของความคิดเห็นนี้จะไม่ "ด่าว่า" หรือ "เตือน" มันเป็นเพียงการแจ้งเตือนที่เป็นมิตร
Ryan Williams

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

12
ฉันไม่เห็นด้วย ฉันคิดว่าคำถามดังกล่าวอยู่ในขอบเขตและควรจะเป็น!
Suresh Venkat

เห็นด้วยในขอบเขต fyi / imho มันไม่จริงเกินไปที่จะสร้างตัวแก้ #SAT จากตัวแก้ SAT จนกว่าจะมีซอร์สโค้ดและแม้แต่ในกรณีนั้นไม่ได้ใช้งานได้จริงยกเว้นสูตรที่มีขนาดเล็กมากเพราะการระเบิดแบบเลขชี้กำลังที่แย่มาก เทคนิคพิเศษที่ไม่ซ้ำมักจะ #SAT และไม่ได้จะต้อง SAT ...
vzn

คำตอบ:


16

คุณสามารถทำเช่นนี้กับSAT4Jเพียงโดย iterating กว่ารุ่นทั้งหมด: http://www.sat4j.org/howto.php#models ฉันจินตนาการว่านักแก้ปัญหา SAT ส่วนใหญ่มีความสามารถนี้


สวัสดี supercooldave ขอบคุณสำหรับตัวชี้ของคุณ ฉันไม่รู้ว่า SAT4J มีความสามารถนี้
Giorgio Camerani


11

ตัวเลือกหนึ่งคือการใช้ห้องสมุด BDD เช่นJavaBDD ไลบรารีดังกล่าวทั้งหมดมีฟังก์ชันที่นับจำนวนการแก้ปัญหาอย่างรวดเร็วหรืออย่างน้อยก็ทำให้การเขียนฟังก์ชั่นดังกล่าวเป็นเรื่องง่าย อย่างไรก็ตามข้อเสียคือการสร้าง BDD จะช้าในหลายกรณีและอาจต้องใช้หน่วยความจำมาก

ในกรณีที่อินพุตของคุณอยู่ใน CNF ฮิวริสติกแบบง่ายที่เพิ่มความเร็วในการก่อสร้าง BDD มีดังต่อไปนี้ ขั้นแรกให้สร้าง BDD ขนาดเล็กสำหรับแต่ละส่วนและวางลงในลำดับความสำคัญซึ่งรากเป็น BDD ที่เล็กที่สุด ประการที่สองป๊อป BDD สองอันคำนวณและระหว่างพวกเขาแล้วผลักผลลัพธ์ไปยังลำดับความสำคัญ นี่คือแนวคิด: เนื่องจากการคำนวณและระหว่าง BDD ของขนาดและต้องใช้ในทางทฤษฎี แต่ในทางปฏิบัติการลดรันไทม์จึงเหมือนกับการค้นหารหัส Huffmann O ( m n ) m + nmnO(mn)m+n


7

หัวข้อที่เกี่ยวข้อง: ที่ดีที่สุด SAT Solver


1
ขอบคุณ Sadeq หัวข้อที่คุณระบุน่าจะเป็นเชิงทฤษฎี มันแสดงรายการเอกสารหลายอย่างในการลดขอบเขตบน เป็นเรื่องที่น่าสนใจมาก แต่ฉันกำลังมองหาการใช้งานที่พร้อมใช้งาน
Giorgio Camerani

2
คุณเป็นที่ต้อนรับอย่างยิ่ง. ท่ามกลางการเชื่อมโยงที่อ้างถึงนั้นมีผู้หญิงคนหนึ่งซึ่งเป็นทางปฏิบัติอย่างหมดจด: satcompetition.org ฉันคิดว่าคุณสามารถค้นหาการใช้งานที่ดีมากที่นั่น
MS Dousti

7

สิ่งที่ดีที่สุดที่ฉันพบคือ "c2d compiler" http://reasoning.cs.ucla.edu/c2d/

มันใช้ d-DNNF และคุณต้องการตัวเลือก-count


c2d แก้ปัญหา CNF ได้มากกว่า sharpsat สำหรับจุดประสงค์ของเล่นนักแก้ปัญหา sat relsat ก็จะทำเช่นเดียวกัน
Leon Leon


5

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


2

เว็บไซต์BeyondNPมีคลังโฆษณาที่ดีของเครื่องมือที่มีอยู่เพื่อแก้ไข #SAT (และปัญหาอื่น ๆ ที่เกี่ยวข้องกับสูตร CNF) คุณอาจพบรายการเครื่องมือสำหรับการนับแบบโดยประมาณและการรวบรวมความรู้ (งานการเปลี่ยน CNF ให้เป็นโครงสร้างข้อมูลที่รวบรัดด้วยความหวังซึ่งมักจะสนับสนุนการนับแบบจำลองพหุนามเวลา)

นอกจากนี้คุณยังอาจพบรายการของเครื่องมือสำหรับpreprocessingสูตร CNF ซึ่งอาจจะเป็นประโยชน์ในการปรับปรุงการแสดงของเคาน์เตอร์รูปแบบต่างๆและมาตรฐาน



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