ฉันใช้ตัวแก้ SAT เพื่อเข้ารหัสปัญหาและเป็นส่วนหนึ่งของอินสแตนซ์ SAT ฉันมีตัวแปรบูลีนซึ่งมีจุดประสงค์ว่าหนึ่งในนั้นควรเป็นจริงและส่วนที่เหลือควรเป็นเท็จ . (บางครั้งฉันเคยเห็นสิ่งนี้อธิบายว่าเป็นการเข้ารหัส "one-hot")
ฉันต้องการเข้ารหัสข้อ จำกัด "ตรงหนึ่งจากต้องเป็นจริง" ใน SAT วิธีที่ดีที่สุดในการเข้ารหัสข้อ จำกัด นี้เพื่อให้นักแก้ปัญหา SAT ทำงานได้อย่างมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้
ฉันเห็นการเข้ารหัสข้อ จำกัด นี้ได้หลายวิธี:
ข้อ จำกัด แบบคู่ ฉันสามารถเพิ่มข้อ จำกัด แบบ pairwiseสำหรับทั้งหมดเพื่อให้แน่ใจว่าอย่างน้อยที่สุดหนึ่งนั้นเป็นจริงแล้วเพิ่มเพื่อให้แน่ใจว่าอย่างน้อยก็เป็นจริง .x 1 ∨ x 2 ∨ ⋯ ∨ x n
สิ่งนี้เพิ่มส่วนคำสั่งและไม่มีตัวแปรบูลีนพิเศษ
การเข้ารหัสแบบไบนารี ฉันสามารถแนะนำตัวแปรบูลีนใหม่เพื่อเป็นตัวแทน (ในระบบเลขฐานสอง) จำนวนเต็มเช่นที่ (เพิ่มข้อ จำกัด บูลีนบางอย่างเพื่อให้แน่ใจว่าอยู่ในช่วงที่ต้องการ) จากนั้นฉันสามารถเพิ่มข้อ จำกัด บังคับให้เป็นต้นไม้และอื่น ๆ ทั้งหมดเป็นเท็จ ในคำอื่น ๆ สำหรับแต่ละเราเพิ่มคำสั่งการบังคับใช้ที่x_jฉัน1 , ฉัน2 , … , ฉันlg nฉัน1 ≤ ฉัน≤ n ฉันx ฉันx j j ฉัน= j ⇔ x j
นี่เป็นการเพิ่มส่วนคำสั่งและฉันไม่รู้ว่าตัวแปรบูลีนพิเศษมีเท่าใด
นับจำนวนค่าที่แท้จริง ฉันสามารถใช้วงจรของวงจรบวกบูลีนและต้องการให้ , ปฏิบัติต่อแต่ละตัวเป็น 0 หรือ 1 แทนที่จะเป็นเท็จหรือจริงและใช้การแปลง Tseitin เพื่อแปลงวงจรให้เป็นส่วนคำสั่ง SAT ต้นไม้ครึ่งตัวเสริม: จำกัด เอาท์พุทของแต่ละตัวบวกครึ่งให้เป็น 0 และ จำกัด ผลลัพธ์สุดท้ายของตัวบวกครึ่งสุดท้ายในต้นไม้ให้เป็น 1 ต้นไม้สามารถเลือกให้มีรูปร่างใดก็ได้ ( ต้นไม้ไบนารีที่สมดุลหรือไม่สมดุลหรืออะไรก็ตาม)x i
สิ่งนี้สามารถทำได้ในประตูจึงเพิ่มคำสั่งและตัวแปรบูลีนใหม่Θ ( n ) Θ ( n )
เป็นกรณีพิเศษของวิธีนี้คือการแนะนำตัวแปรบูลกับความคิดที่ว่าควรมีค่าของx_i ความตั้งใจนี้สามารถบังคับใช้โดยการเพิ่มคำสั่ง , , และ\ neg y_i \ lor x_i \ lor y_ {i-1} (ที่เราปฏิบัติต่อy_0เป็น ไวพจน์เท็จ) สำหรับi = 1, \ dots, n ต่อไปเราจะสามารถเพิ่มข้อ จำกัด\ Neg y_i \ Lor \ Neg x_ {i + 1}สำหรับi = 1,2, \ dots, n-1 โดยทั่วไปจะเทียบเท่ากับการแปลง Tseitin ของต้นไม้ครึ่ง adder ที่ต้นไม้มีรูปร่างที่ไม่สมดุลมากที่สุดY ฉันx 1 ∨ x 2 ∨ ⋯ ∨ x ฉันY ฉัน ∨ ¬ x ฉันY ฉัน ∨ ¬ Y ฉัน- 1 ¬ Y ฉัน ∨ x ฉัน ∨ Y ฉัน- 1ปี0ฉัน= 1 , ... , n ¬ Y ฉัน ∨ ¬ x ฉัน+
เครือข่ายผีเสื้อ ฉันสามารถสร้างเครือข่ายบัตเตอร์ฟลายบนบิต , จำกัดอินพุต bit ให้เป็น , จำกัดเอาท์พุท bit ให้เป็น , และปฏิบัติต่อประตูผีเสื้อ 2 บิตแต่ละตัวเป็นประตูอิสระที่ สลับหรือไม่สลับอินพุตกับการตัดสินใจที่จะทำตามตัวแปรบูลีนใหม่ที่ไม่มีข้อ จำกัด จากนั้นฉันสามารถใช้การแปลง Tseitin เพื่อแปลงวงจรเป็นคำสั่ง SAT
สิ่งนี้ต้องการประตูและเพิ่มส่วนคำสั่งและตัวแปรบูลีนใหม่
มีวิธีอื่นที่ฉันมองข้ามไปหรือไม่? ฉันควรใช้อันไหนดี มีใครทดสอบหรือทดลองใช้หรือเคยมีประสบการณ์กับสิ่งเหล่านี้บ้างไหม? จำนวนคำสั่งและ / หรือจำนวนตัวแปรบูลีนใหม่เป็นตัวชี้วัดที่ดีสำหรับการประเมินผลกระทบของสิ่งนี้ต่อประสิทธิภาพการแก้ปัญหา SAT หรือไม่ถ้าไม่คุณจะใช้เมตริกใด
ฉันเพิ่งสังเกตเห็นว่าคำตอบนี้มีการอ้างอิงบางอย่างเกี่ยวกับการบังคับใช้ข้อ จำกัด ของ cardinality สำหรับ SAT นั่นคือการบังคับใช้ข้อ จำกัด ที่จากตัวแปรทั้งหมดนั้นเป็นจริง ดังนั้นคำถามของฉันลงมาให้เป็นกรณีพิเศษที่ 1 บางทีวรรณกรรมเกี่ยวกับข้อ จำกัด ด้าน cardinality อาจช่วยอธิบายคำถามของฉัน