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 x≠0.

Zaten x, y tamsayı değişkenlerine x,ysahibim ve -100 \ le x \ le 100 olduğuna söz verdim −100≤x≤100. 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

y≠0 if and only if x≠0.

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


(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}

−100y≤x≤100y
0.001y−100.001δ≤x≤−0.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

y−101δ≤x≤−y+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

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

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=1⟺x≤0z2=1⟺x≥0z=z1∧z2


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=1−yx=100y=1z=0z1,z2x−Nz2≤−1x<Nx≤99x=99y=1y=0x−N≤x≤N0≤x≤N
— 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=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≤99x≤100x≥−99

@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.