ส่งไปยังบูลีนสำหรับโปรแกรมเชิงเส้นจำนวนเต็ม


11

ฉันต้องการที่จะแสดงข้อ จำกัด ดังต่อไปนี้ในโปรแกรมเชิงเส้นจำนวนเต็ม:

y={0if x=01if x0.

ฉันมีตัวแปรจำนวนเต็มและฉันสัญญาว่า100 ฉันจะแสดงข้อ จำกัด ข้างต้นได้อย่างไรในรูปแบบที่เหมาะสมสำหรับใช้กับตัวแก้โปรแกรมเชิงเส้นจำนวนเต็ม?x,y100x100

สิ่งนี้น่าจะต้องมีการแนะนำตัวแปรเพิ่มเติมบางอย่าง ฉันต้องเพิ่มตัวแปรและข้อ จำกัด อะไรใหม่ มันสามารถทำได้อย่างหมดจดกับตัวแปรใหม่หนึ่งตัวหรือไม่? สอง?

เท่านี้จะถามวิธีการบังคับใช้ข้อ จำกัด

y0 if and only if x0.

ในบริบทที่ฉันมีข้อ จำกัด ที่บ่งบอกถึงและ1|x|1000y1


(เป้าหมายของฉันคือแก้ไขข้อผิดพลาดในhttps://cs.stackexchange.com/a/12118/755 )


1
คุณลองทำอะไร คุณได้ลองทำตัวอย่างเพื่อดูว่าคุณเห็นลวดลายหรือไม่? ถ้าใช่คุณลองเดาแล้วลองพิสูจน์ดูไหม?
Brika

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

นั่นเป็นสิ่งที่ดีมาก ;)
Brika

คำตอบ:


4

ผมคิดว่าผมสามารถทำมันด้วยความพิเศษหนึ่งตัวแปรไบนารีδ{0,1} :

100yx100y
0.001y100.001δx0.001y+100.001(1δ)

ปรับปรุง

นี้จะถือว่าxเป็นตัวแปรอย่างต่อเนื่อง ถ้าเรา จำกัดxจะได้รับมูลค่าจำนวนเต็มแล้วข้อ จำกัด ที่สองได้ง่ายไปที่:

y101δxy+101(1δ)


1
ฉันตรวจสอบความถูกต้องนี้โดยการทดสอบอย่างละเอียดด้วยโปรแกรมเล็กน้อย ขอบคุณสำหรับการแก้ปัญหา!
DW

@ErwinKalvelagen คุณช่วยอธิบายตรรกะของคุณด้วยตัวแปรไบนารีเดลต้าสำหรับกรณีทั่วไปเพิ่มเติมได้เช่นถ้า y = {a: x> 0, b: x <0}
Nick

1
@Nick ตัวแปรไบนารีใช้เพื่อสร้างโมเดล 'OR' ดูที่นี่คำตอบสำหรับคำถามของคุณ
Erwin Kalvelagen

@ErwinKalvelagen คำตอบที่ดีผมพยายามที่จะใช้วิธีการของคุณไปที่คำถามของฉันที่นี่cs.stackexchange.com/questions/64794/...
Nick

1
@GonzaloSolera ที่จริงฉันผิด: ฉันถือว่าเป็นตัวแปรต่อเนื่อง แน่นอนเมื่อxเป็นจำนวนเต็มเราสามารถย้าย 0.001 ได้สูงสุด 1 ตามที่คุณแนะนำ xx
Erwin Kalvelagen

1

ต่อไปนี้ไม่สวย แต่อย่างใด แต่ใช้งานได้ ให้ , N = 100ในกรณีเฉพาะในคำถาม จากนั้นเรามีข้อ จำกัด ดังต่อไปนี้0xNN=100

  1. 0z1,z2,z1
  2. xN(1z1)0
  3. xNz11
  4. xN(1z2)0
  5. xNz21
  6. z1+z21z
  7. zz1
  8. zz2

สัญชาตญาณมีดังนี้ 0 นี้มีการเข้ารหัสในข้อ จำกัด ที่ 2 และ 3 ในทำนองเดียวกันข้อ จำกัด ที่ 4 และ 5 เข้ารหัส Z 2 = 1z1=1x0 0 ล่าสุดสามข้อ จำกัด ด่วน Z = Z 1Z 2z2=1x0z=z1z2


ดูเหมือนว่าจะมีข้อบกพร่อง ผมถือว่าคุณตั้งใจ Y อย่างไรก็ตามมันยังคงผิดสำหรับx = 100 : เราต้องการบังคับy = 1 ( z = 0 ) ในกรณีนี้ แต่ไม่มีทางเลือกสำหรับz 1 , z 2ที่ตรงกับสมการทั้งหมดเนื่องจากสมการx - N z 2- 1ต้องการx < N (เช่นx 99 ) ดังนั้น ILP นี้จึงให้ผลลัพธ์ที่ผิดเมื่อz=1yx=100y=1z=0z1,z2xNz21x<Nx99 : เราต้องการ Y = 1แต่เราได้ Y = 0 นอกจากนี้ยังมีช่วงที่ต้องการสำหรับ xที่ระบุไว้ในคำถามคือ - N x Nไม่ 0 x N x=99y=1y=0xNxN0xN
DW

1

นี่คือโซลูชันที่ใช้ตัวแปรชั่วคราวสองตัว ให้เป็นจำนวนเต็มศูนย์หรือหนึ่งในตัวแปรที่มีความตั้งใจหมายความว่าT = 1ถ้าx 0 , U = 1ถ้าx 0และY = ¬ ( T ยู ) สิ่งเหล่านี้สามารถบังคับใช้กับข้อ จำกัด ต่อไปนี้:t,ut=1x0u=1x0y=¬(tu)

0t,u,y11+x101t101+x1x101u101xt+u11y1yt1yu

คำตอบนี้ไม่ถูกต้องน่าเสียดาย มันจะ จำกัดโดยส่วนแรกของข้อ จำกัด ที่ไม่น่ารำคาญแรกเมื่อคำถามถามให้x 100 ข้อผิดพลาดของpostpostไม่สนุกใช่ไหม (เช่นเดียวกันสำหรับx - 99. )x99x100x99
TLW

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