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


11

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

y={0if x=01if x≠0.

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

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

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

y≠0 if and only if x≠0.

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


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


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

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

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

คำตอบ:


4

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

−100y≤x≤100y
0.001y−100.001δ≤x≤−0.001y+100.001(1−δ)

ปรับปรุง

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

y−101δ≤x≤−y+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ในกรณีเฉพาะในคำถาม จากนั้นเรามีข้อ จำกัด ดังต่อไปนี้0≤x≤NN=100

  1. 0≤z1,z2,z≤1
  2. x−N(1−z1)≤0
  3. −x−Nz1≤−1
  4. −x−N(1−z2)≤0
  5. x−Nz2≤−1
  6. z1+z2−1≤z
  7. z≤z1
  8. z≤z2

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


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

1

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

0≤t,u,y≤11+x≤101t≤101+x1−x≤101u≤101−xt+u−1≤1−y1−y≤t1−y≤u

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

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