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


58

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

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

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

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

คำตอบ:


66

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

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

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

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

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

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


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

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

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


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


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

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

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

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

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

19

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

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

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

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

0≤Σxผม-nY≤n-1.
0≤nY-Σ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=-1990≤Y≤1

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