Tamsayılı doğrusal programlama için boole dönüştür


12

Tamsayı doğrusal bir programda aşağıdaki kısıtlamayı ifade etmek istiyorum:

y={0if x=01if x0.

Zaten x, y tamsayı değişkenlerine x,ysahibim ve -100 \ le x \ le 100 olduğuna söz verdim 100x100. Yukarıdaki kısıtlamayı, bir tamsayı doğrusal programlama çözücüsüyle kullanım için uygun bir biçimde nasıl ifade edebilirim?

Bu muhtemelen bazı ek değişkenlerin girilmesini gerektirecektir. Hangi yeni değişkenleri ve kısıtlamaları eklemem gerekiyor? Yeni bir değişkenle temiz bir şekilde yapılabilir mi? İki?

Eşdeğer olarak, bu kısıtlamanın nasıl uygulanacağını soruyor

y0 if and only if x0.

Zaten ima eden kısıtlamaların olduğu bağlamda ve .0 y 1|x|1000y1


(Hedefim https://cs.stackexchange.com/a/12118/755 adresindeki bir hatayı düzeltmektir .)


1
Ne denedin? Bir kalıp görüp görmediğinizi görmek için bazı örnekler üzerinde çalışmayı denediniz mi? Cevabınız evet ise, bir tahminde bulunmayı denediniz ve sonra ispatlamayı denediniz mi?
Brika

1
Heh! Orada ne yaptığını görüyorum , @Brika. Neyi denediğimi merak ediyorsanız, buraya ve bunun neden yanlış olduğunu açıklamaya bakın . Bir sonraki girişimimi görmek istiyorsanız cevabımı görün . Eski sorularımı okuduğunuz için teşekkür ederiz ve gelecek için geliştirilebileceklerse, sahip olabileceğiniz önerileri duymak isterim!
DW

Çok iyi. ;)
Brika

Yanıtlar:


5

Ben bir ekstra ikili değişken :δ{0,1}

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

Güncelleme

Bu , sürekli bir değişken olduğunu varsayar . Biz kısıtlamak Eğer olmak tamsayı değerli , daha sonra ikinci bir kısıtlama basitleştirilebilir: xx y - 101 δ x - y + 101 ( 1 - δ )x

y101δxy+101(1δ)


1
Bunu doğru bir şekilde küçük bir programla test ederek doğruladım. Çözüm için teşekkürler!
DW

@ErwinKalvelagen, daha genel bir durum için, örneğin y = {a: x> 0, b: x <0} ise mantığınızı ikili değişken deltasıyla açıklar mısınız?
Nick

1
@Nick İkili değişken bir 'VEYA' yapıyı modellemek için kullanılır. Sorunuzun cevabı için buraya bakın .
Erwin Kalvelagen

@ErwinKalvelagen, harika cevap, buradaki soruma yaklaşımınızı uygulamaya çalıştım cs.stackexchange.com/questions/64794/… .
Nick

1
xx

1

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

Sezgi aşağıdaki gibidir. . Bu, kısıtlama 2 ve 3'te kodlanır. Benzer şekilde kısıtlama 4 ve 5, . Son üç kısıtlama ifade .z1=1x0z2=1x0z=z1z2


Bu bir hata var gibi görünüyor. Sanırım niyetindeyim . Bununla birlikte, için hala yanlış : bu durumda ( ) zorlamak istiyoruz , ancak denklemi olarak tüm denklemleri karşılayan için başka seçenek yok , (ör. ) gerektirir. Bu nedenle, olduğunda bu ILP yanlış sonuç verir : istiyoruz , ancak aldık . Ayrıca, soruda listelenen için istenen aralık , değil , . z=1yx=100y=1z=0z1,z2xNz21x<Nx99x=99y=1y=0xNxN0xN
DW

1

İşte iki geçici değişken kullanan bir çözüm. Let , yani amaçlanan, sıfır ya da-değişkenli bir tam sayı olması ise , eğer ve . Bunlar aşağıdaki kısıtlamalarla uygulanabilir:t,ut=1x0u=1x0y=¬(tu)

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

x99x100x99

@TLW, yakaladığınız için teşekkürler! Hatayı düzeltmek için cevabımı düzenledim. Küçük bir programla kapsamlı bir şekilde test ettim ve şimdi doğru olması gerektiğini düşünüyorum.
DW
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.