แสดงการดำเนินการเชิงตรรกะบูลีนในการโปรแกรมเชิงเส้นจำนวนเต็มศูนย์ (ILP)


58

ฉันมีโปรแกรม linear จำนวนเต็ม (ILP) ซึ่งมีตัวแปรบางตัวxผมที่มีวัตถุประสงค์เพื่อแสดงค่าบูลีน xผม 's มีข้อ จำกัด ที่จะเป็นจำนวนเต็มและจะถือ 0 หรือ 1 ( )0xi1

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

โดยเฉพาะอย่างยิ่งฉันต้องการตั้งค่า (บูลีน AND), (บูลีน OR) และ (บูลีน NOT) ฉันใช้การตีความที่ชัดเจนของ 0/1 เป็นค่าบูลีน: 0 = false, 1 = true ฉันจะเขียนข้อ จำกัด ของ ILP ได้อย่างไรเพื่อให้แน่ใจว่านั้นเกี่ยวข้องกับตามที่ต้องการ?Y1=x1x2Y2=x1x2Y3=¬x1Yผมxผม

(สิ่งนี้อาจถูกมองว่าเป็นการขอลดจาก CircuitSAT ถึง ILP หรือขอวิธีแสดง SAT เป็น ILP แต่ที่นี่ฉันต้องการเห็นวิธีชัดเจนในการเข้ารหัสการดำเนินการเชิงตรรกะที่แสดงด้านบน)

คำตอบ:


66

ตรรกะและ:ใช้ข้อ จำกัด เชิงเส้นY1x1+x2-1 , Y1x1 , Y1x2 , 0Y11โดยที่Y1ถูก จำกัด ให้เป็นจำนวนเต็ม สิ่งนี้บังคับใช้ความสัมพันธ์ที่ต้องการ (ค่อนข้างเรียบร้อยที่คุณสามารถทำได้ด้วยความไม่เท่าเทียมกันเชิงเส้นใช่มั้ย)

ตรรกะหรือ:ใช้ข้อ จำกัด เชิงเส้นY2x1+x2 , Y2x1 , Y2x2 , 0Y21โดยที่Y2ถูก จำกัด ให้เป็นจำนวนเต็ม

ตรรกะไม่ได้:ใช้Y3=1-x1 1

ความหมายเชิงตรรกะ:เพื่อแสดงY4=(x1x2) (เช่นY4=¬x1x2 ) เราสามารถปรับโครงสร้างสำหรับตรรกะ OR ใช้ข้อ จำกัด เชิงเส้นY41-x1+x2 , Y41-x1 , Y4x2 , 0Y41โดยที่Y4ถูก จำกัด ให้เป็นจำนวนเต็ม

บังคับความหมายเชิงตรรกะ:เพื่อแสดงว่าx1x2ต้องเก็บเพียงใช้ข้อ จำกัด เชิงเส้นx1x2 (สมมติว่าx1และx2มีข้อ จำกัด อยู่แล้วกับค่าบูลีน)

XOR:หากต้องการแสดงY5=x1x2 (เอกสิทธิ์ของx1และx2 ) ให้ใช้ความไม่เท่าเทียมกันเชิงเส้นY5x1+x2 , Y5x1-x2 , Y5x2-x1 , Y52-x1-x2 , 0Y51โดยที่Y5ถูก จำกัด ให้เป็นจำนวนเต็ม


และเป็นโบนัสอีกหนึ่งเทคนิคที่มักจะช่วยเมื่อกำหนดปัญหาที่มีส่วนผสมของตัวแปร zero-one (boolean) และตัวแปรจำนวนเต็ม:

ส่งไปยังบูล (รุ่นที่ 1):สมมติว่าคุณมีจำนวนเต็มตัวแปรxและคุณต้องการที่จะกำหนดYเพื่อให้Y=1ถ้าx0และY=0ถ้าx=0 0 หากคุณรู้เพิ่มเติมว่า0xยูคุณสามารถใช้สมการเชิงเส้นได้0Y1 , Yx , xยูY ; อย่างไรก็ตามจะใช้งานได้ก็ต่อเมื่อคุณทราบขอบเขตบนและล่างx . หรือถ้าคุณรู้ว่า|x|ยู (นั่นคือ-ยูxยู ) สำหรับบางคนคงยูแล้วคุณสามารถใช้วิธีการที่อธิบายไว้ที่นี่ สิ่งนี้ใช้ได้เฉพาะเมื่อคุณรู้ว่าขอบเขตบน|x|.

ส่งไปยังบูล (รุ่น 2):ลองพิจารณาเป้าหมายเดียวกัน แต่ตอนนี้เราไม่รู้จักขอบเขตบนxxแต่ถือว่าเราจะรู้ว่าx0 0 นี่คือวิธีที่คุณสามารถแสดงข้อ จำกัด ดังกล่าวในระบบเชิงเส้น ขั้นแรกแนะนำใหม่ตัวแปรจำนวนเต็มทีเสื้อเพิ่มความไม่เท่าเทียมกัน0Y1 , Yx , เสื้อ=x-Y Y จากนั้นเลือกฟังก์ชันวัตถุประสงค์เพื่อให้คุณลดทีเสื้อใช้งานได้เฉพาะถ้าคุณยังไม่มีฟังก์ชันวัตถุประสงค์ หากคุณมีnตัวแปรจำนวนเต็มไม่เป็นลบx1,...,xnและคุณต้องการที่จะโยนทั้งหมดของพวกเขาที่จะ booleans เพื่อให้Yผม=1ถ้าxผม1และYผม=0ถ้าxผม=0แล้วคุณสามารถแนะนำnตัวแปรเสื้อ1,...,เสื้อnกับความไม่เท่าเทียมกัน0Yผม1 , Yผมxผม ,เสื้อผม=xผม-Yผมและกำหนดเป้าหมายการทำงานเพื่อลดเสื้อ1++เสื้อn n อีกครั้งสิ่งนี้ใช้งานได้ไม่จำเป็นต้องกำหนดฟังก์ชั่นวัตถุประสงค์ (หากนอกเหนือจากการปลดเปลื้องไปจนถึงบูลีนแล้ว) คุณกำลังวางแผนที่จะตรวจสอบความเป็นไปได้ของ ILP ที่เกิดขึ้นไม่ใช่พยายามลด / เพิ่มฟังก์ชันบางส่วนของตัวแปร)


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


ตัวแก้การเขียนโปรแกรมเชิงเส้นใดที่สามารถแก้ปัญหานี้ becouse ใน * .lp หรือ * .mps-format ด้านใดด้านหนึ่งของข้อ จำกัด จะต้องเป็นจำนวนเต็มคงที่และไม่ใช่ตัวแปร
boxi

4
@boxi ฉันไม่รู้อะไรเกี่ยวกับรูปแบบ * .lp หรือ * .mps แต่ตัวแก้ปัญหาการโปรแกรมเชิงเส้นจำนวนเต็มทุกตัวควรจะสามารถแก้ปัญหานี้ได้ โปรดทราบว่าถ้าคุณมีบางอย่างเช่นนี่จะเท่ากับy - x 0ซึ่งอาจอยู่ในรูปแบบที่คุณต้องการ xyyx0
DW

- ฉันตรวจสอบอีกครั้ง lp_solve สามารถแก้ไขได้ แต่ตัวอย่างเช่น qsopt ไม่สามารถทำได้ ฉันไม่รู้ว่าทำไม แต่ต้องขอบคุณ <3
boxi

@boxi, ฉันเพิ่งตรวจสอบ QSopt online applet GUI และมันสามารถจัดการกับข้อ จำกัด เหล่านี้เมื่อฉันเปลี่ยนเป็นx - y 0ดังนั้นฉันไม่แน่ใจว่าเกิดอะไรขึ้น (ฉันใช้รูปแบบ * .lp) ฉันจะประหลาดใจถ้าตัวแก้ไข ILP ไม่สามารถจัดการระบบเหล่านี้ได้ หากคุณมีคำถามเพิ่มเติมเกี่ยวกับ QSopt คุณควรนำพวกเขาไปที่ฟอรัมสนับสนุน QSopt xYx-Y0
DW

1
@Pramod จับดี! ขอบคุณที่ตรวจพบข้อผิดพลาดนั้น คุณพูดถูก ฉันถามคำถามใหม่เกี่ยวกับวิธีสร้างแบบจำลองกรณีและฉันจะอัปเดตคำตอบนี้เมื่อเราได้รับคำตอบของคำถามนั้น
DW

19

ตรรกะและความสัมพันธ์สามารถสร้างแบบจำลองในข้อ จำกัด ช่วงหนึ่งแทนข้อ จำกัด ที่สาม (เช่นในโซลูชันอื่น) ดังนั้นแทนที่จะใช้สามข้อ จำกัด มันสามารถเขียนได้ใช้ช่วงข้อ จำกัด เดียว 0 x 1 + x 2 - 2 ปี11

Y1x1+x2-1,Y1x1,Y1x2,
ในทำนองเดียวกันสำหรับตรรกะหรือ: 0 2 y 1 - x 1 - x 21
0x1+x2-2Y11.
02Y1-x1-x21.

ไม่เช่นนั้นจะไม่มีการปรับปรุงใด ๆ

โดยทั่วไปแล้วสำหรับ ( n -way AND) ข้อ จำกัด จะเป็น: 0 x i - n y n - 1Y=x1x2xnn ในทำนองเดียวกันสำหรับ OR: 0 n y - x in - 1

0Σxผม-nYn-1.
0nY-Σxผมn-1.


3

ฉันพบโซลูชันที่สั้นกว่าสำหรับ XOR y = x1⊕x2 (x และ y เป็นเลขฐานสอง 0, 1)

เพียงแค่หนึ่งบรรทัด: x1 + x2 - 2 * z = y (z เป็นจำนวนเต็มใด ๆ )


x1=1,x2=0,Z=200,Y=-1990Y1

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