0

Weiß jemand, wie für diesen Fall bedingte Einschränkung in gemischt-ganzzahlige Programmierung schreiben:bedingte Einschränkung bei der Optimierung

if a == 0 then b = 1 
else b = 0 
-M <= a <= M 
b={0,1} 

Beachten Sie, dass M jede stetige Zahl sein kann. Danke.

Grüße,

Antwort

1

Ich würde dies wie folgt nähern. Zunächst verwenden, um eine variable Teilungs Ansatz von zwei nicht-negativen Variablen Einführung aplus, amin:

0 <= aplus <= d*M 
0 <= amin <= (1-d)*M 
a = aplus-amin 
d in {0,1} 

Jetzt können wir tun:

0.001*(1-b) <= aplus + amin <= M*(1-b) 

In vielen Fällen können wir dies vereinfachen, aber das Wissen über den Rest der erfordert Modell.

+0

Es hat funktioniert! Nur eine kleine Korrektur für die letzte Gleichung: 0,001 * (1-b) <= aplus + amin <= M * (1-b) sollte 0,001 * (1-b) <= aplus + amin <= M * b – nana

+0

sein Ich denke meine Version ist korrekt. Wenn "b = 1" ist, dann "0 <= aplus + amin <=0 ==> aplus + amin = 0". Wenn "b = 0", dann ist "0,01 <= aplus + amin <= M". –