Für die ganzzahlige lineare Programmierung in Boolesche Werte umwandeln

11

Ich möchte die folgende Einschränkung in einem ganzzahligen linearen Programm ausdrücken:

y={0if x=01if x0.

Ich habe bereits die ganzzahligen Variablen und mir wird versprochen, dass . Wie kann ich die obige Einschränkung in einer Form ausdrücken, die für die Verwendung mit einem ganzzahligen linearen Programmierlöser geeignet ist?- 100 x 100x,y100x100

Dies erfordert vermutlich die Einführung einiger zusätzlicher Variablen. Welche neuen Variablen und Einschränkungen muss ich hinzufügen? Kann es mit einer neuen Variablen sauber gemacht werden? Zwei?

Entsprechend wird gefragt, wie die Einschränkung durchgesetzt werden soll

y0 if and only if x0.

in dem Kontext, in dem ich bereits Einschränkungen habe, die implizieren und .0 y 1|x|1000y1


(Mein Ziel ist es, einen Fehler in /cs//a/12118/755 zu beheben .)

DW
quelle
1
Was hast du versucht? Haben Sie versucht, einige Beispiele durchzuarbeiten, um festzustellen, ob Sie ein Muster sehen? Wenn ja, haben Sie versucht, eine Vermutung anzustellen und sie dann zu beweisen?
Brika
1
Heh! Ich sehe, was du dort getan hast , @Brika. Wenn Sie neugierig sind, was ich versucht habe, lesen Sie hier sowie diese Erklärung, warum das eigentlich falsch war . Wenn Sie meinen nächsten Versuch sehen möchten, lesen Sie meine Antwort . Vielen Dank, dass Sie meine alten Fragen gelesen haben. Wenn sie für die Zukunft verbessert werden können, würde ich gerne Ihre Vorschläge hören!
DW
Das ist sehr gut. ;)
Brika

Antworten:

4

Ich denke, ich kann es mit einer zusätzlichen binären Variablen tun :δ{0,1}

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

Aktualisieren

Dies setzt voraus, dass eine stetige Variable ist . Wenn wir auf einen ganzzahligen Wert beschränken, kann die zweite Einschränkung vereinfacht werden zu: xx y - 101 δ x - y + 101 ( 1 - δ )x

y101δxy+101(1δ)

Erwin Kalvelagen
quelle
1
Ich habe dies korrekt überprüft, indem ich es mit einem kleinen Programm ausführlich getestet habe. Danke für die Lösung!
DW
@ErwinKalvelagen, könnten Sie bitte Ihre Logik mit der binären Variablen Delta erklären, für einen allgemeineren Fall, zum Beispiel wenn y = {a: x> 0, b: x <0}.
Nick
1
@Nick Die binäre Variable wird verwendet, um ein 'OR'-Konstrukt zu modellieren. Sehen Sie hier eine Antwort auf Ihre Frage.
Erwin Kalvelagen
@ErwinKalvelagen, die großartige Antwort, ich habe versucht, Ihren Ansatz auf meine Frage hier cs.stackexchange.com/questions/64794/… anzuwenden .
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

z1=1x0z2=1x0z=z1z2

Pramod
quelle
z=1yx=100y=1z=0z1,z2xNz21x<Nx99x=99y=1y=0xNxN0xN
1

t,ut=1x0u=1x0y=¬(tu)

0t,u,y11+x101t101+x1x101u101xt+u11y1yt1yu
DW
quelle
x99x100x99
@ TLW, danke, dass du das verstanden hast! Ich habe meine Antwort bearbeitet, um den Fehler zu beheben. Ich habe es ausführlich mit einem kleinen Programm getestet und ich denke, es sollte jetzt korrekt sein.
DW