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