Computerpraktikum Lineare und Kombinatorische Optimierung · Computerpraktikum Lineare und...
Transcript of Computerpraktikum Lineare und Kombinatorische Optimierung · Computerpraktikum Lineare und...
Computerpraktikum Lineare und Kombinatorische
Optimierung
26. – 29. April 2011
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik WS 2010/11
0. Organisatorisches
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 2
Alle Materialien des Praktikum unter
https://www-m9.ma.tum.de/WS2010/CPOpt
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 3
0. Organisatorisches
Material
Informationen zu Mosel und Xpress:
• Xpress Help in der Xpress IVE
• Dokumentationen im Xpress-Installationsordner
<xpressmp>\docs
1. Einführung in Xpress-MP
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 4
• Softwarepaket zur Linearen und Gemischt-Ganzzahligen Optimierung
• Komponenten:
• Optimizer (primaler und dualer Simplex, Barrier, MIP, Presolver, Heuristiken)
• Programmier- und Modellierungssprache Mosel
• Bibliotheken zur Einbindung von Mosel in C/C++/Java/VB
• Entwicklungstools (Debugger, Profiler, IDE)
• Weitere Module (Datenzugriff, Graphik, …)
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 5
1. Einführung in Xpress-MP
Was ist Xpress-MP?
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 6
1. Einführung in Xpress-MP
Was ist Xpress-MP?
Modell
Ausgabe
Mosel Optimizer
Daten
Interaktion
Lösung
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 7
1. Einführung in Xpress-MP
Xpress IVE
Tool Bar
Project Bar
Editor Run Bar
Info Bar
• zeigt alle Variablen, Funktionen … an
Nach einem Programmdurchlauf:
• Zeigen auf einen Variablennamen (auch im Editor) Variablenwert in einem Popup angezeigt
• Doppelklick auf einen Variablennamen Variablenwert in einem Fenster angezeigt
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 8
1. Einführung in Xpress-MP
Project Bar
• Output/Input: Ausgabe
• Stats: Statistiken zur Optimierung
• Matrix: Darstellung der Nebenbedingungsmatrix
• Solutions: bisher gefundene Lösungen
• BB tree: Branch & Bound Baum
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 9
1. Einführung in Xpress-MP
Run Bar
Knoten mit ganzzahliger Lösung
Knoten in dem verzweigt wird
abgeschnittener Knoten
unzulässiger Knoten
2. Einführung in Mosel
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 10
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 11
2. Einführung in Mosel
Modellaufbau
model ModelName
options ! Optionen
uses ! optionale Bibliotheken
parameters
! optionale Parameter
end-parameters
declarations
! Variablendeklaration
end-declarations
! Programmcode
end-model
• Modell zwischen model und end-model
• jedes Modell muss einen Modellnamen haben
• ! leitet Kommentare ein
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 12
2. Einführung in Mosel
Modellaufbau
model ModelName
! ...
end-model
Beispiel:
• durch options eingeleitet
• am Modellanfang
• Vereinfachung der Fehlersuche:
• Option noimplicit : jede Variable muss deklariert werden
• Option explterm : jeder Befehl muss mit ; abgeschlossen werden
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 13
2. Einführung in Mosel
Optionen
model ModelName
options noimplicit, explterm;
! ...
end-model
Beispiel:
• durch uses eingeleitet
• am Modellanfang
• Bibliothek "mmxprs" : Xpress-Optimizer
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 14
2. Einführung in Mosel
Bibliotheken
model ModelName
options noimplicit, explterm;
uses "mmxprs";
! ...
end-model
Beispiel:
• Parameter zwischen parameters und
end-parameters
• definiert Parameter, die auch nach dem Kompilieren noch gesetzt werden können
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 15
2. Einführung in Mosel
Parameter
parameters
datafile = "../data.dat";
end-parameters
Beispiel:
• Variablen müssen vor Verwendung deklariert werden
• Variablendeklaration zwischen declarations und end-declarations
• Modell kann mehr als einen Deklarationsblock enthalten
• einfache Variablentypen:
boolean true oder false
integer ganze Zahlen
real „reelle“ Zahlen
string Zeichenketten
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 16
2. Einführung in Mosel
Variablendeklaration
• Mosel-eigene Variablentypen:
mpvar Entscheidungsvariable
linctr linearer Ausdruck
• Entscheidungsvariablen sind implizit reellwertig und ≥ 0
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 17
2. Einführung in Mosel
Variablendeklaration
declarations
n: integer;
x, y: mpvar;
end-declarations
Beispiel:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 18
2. Einführung in Mosel
Modellierung
Aufgabe 1: Veredelung von Rohöl
Crack Prozess 1
2 l Schweröl 2 l mittleres Öl 1 l Leichtöl
Kosten: 3 €
Nebenbedingungen:
mind. 3 l Schweröl 5 l mittleres Öl 4 l Leichtöl
Zielfunktion: minimiere Kosten
10 l Rohöl
Crack Prozess 2
1 l Schweröl 2 l mittleres Öl 4 l Leichtöl
Kosten: 5 €
x1 x2
im mathematischen Modell:
Implementierung:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 19
2. Einführung in Mosel
Nebenbedingungen
2*x1 + x2 >= 3;
• Operatoren: <= , = , >=
• Nebenbedingungen können als Variablen abgespeichert werden (Zuweisung mit := ) späterer Zugriff möglich
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 20
2. Einführung in Mosel
Zielfunktion
minimize(3*x1 + 5*x2);
• auch Zielfunktionen können als Variablen abgespeichert werden
• maximize() bzw. minimize() starten die Optimierung
erst am Modellende
(Bibliothek "mmxprs" muss eingebunden werden!)
im mathematischen Modell:
Implementierung:
• Befehle write() und writeln()
• Werte der Entscheidungsvariablen und linearen Ausdrücke:
getsol(<variable>) oder <variable>.sol
• Wert der Zielfunktion: getobjval
• Formatierung der Ausgabe:
strfmt(<variable>,<i1>,<i2>)
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 21
2. Einführung in Mosel
Ausgabe
reservierte Vorkommastellen
Nachkommastellen
• model und end-model umschließen Modell
• uses zur Einbindung von Bibliotheken
• declarations und end-declarations umschließen Variablendeklaration
• maximize() und minimize() starten die Optimierung
• write() und writeln() zur Ausgabe
• getsol() gibt Lösung zurück
• getobjval gibt Zielfunktionswert zurück
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 22
2. Einführung in Mosel
Zusammenfassung
3. Variablentypen
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 23
• einfache Variablentypen:
boolean true oder false
integer ganze Zahlen
real „reelle“ Zahlen
string Zeichenketten
• Mosel-eigene Variablentypen:
mpvar Entscheidungsvariable
linctr linearer Ausdruck
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 24
3. Weitere Variablentypen
Wiederholung
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 25
3. Weitere Variablentypen
Entscheidungsvariablen
• Wertebereich von Entscheidungsvariablen:
(weitere siehe Mosel-Dokumentation)
declarations
x : mpvar;
end-declarations
x is_integer;
Beispiel:
Wertebereich
automatisch
is_binary
is_integer
is_free
• statische Mengen:
• dynamische Mengen:
• Deklaration:
• Zuweisung:
• Umwandlung in statische Menge:
• Operatoren: + (Vereinigung), - (Differenz), * (Schnitt)
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 26
3. Weitere Variablentypen
Mengen
declarations
<setname> : set of <vartype>;
end-declarations
<setname> := {<setcontent>};
finalize(<setname>);
declarations
<setname> = {<setcontent>};
end-declarations
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 27
3. Weitere Variablentypen
Mengen
! statische Menge
declarations
s1 = {1,2,3,7};
end-declarations
! dynamische Menge
declarations
s2 : set of string;
end-declarations
s2 := {"Bli", "Bla", "Blub"};
finalize(s2);
Beispiel:
• spezielle Mengen, effizientere Speichernutzung
• statische Intervalle:
• dynamische Intervalle:
• Deklaration:
• Zuweisung:
• Umwandlung in statisches Intervall:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 28
3. Weitere Variablentypen
Intervalle
declarations
<rangename> : range;
end-declarations
<rangename> := <lb>..<ub>;
finalize(<rangename>);
declarations
<rangename> = <lb>..<ub>;
end-declarations
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 29
3. Weitere Variablentypen
Intervalle
! statisches Intervall
declarations
r1 = 3..7;
end-declarations
! dynamische Menge
declarations
r2 : range;
end-declarations
r2 := 3..7;
finalize(r2);
Beispiel:
• statische Felder:
• dynamische Felder:
• Deklaration:
• Zuweisung:
• Zugriff:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 30
3. Weitere Variablentypen
Felder
<arrayname> :: (<indexset>) [<arraycontent>];
declarations
<arrayname> = [<arraycontent>];
end-declarations
declarations
<arrayname> : array(<indexset>) of <vartype>;
declarations
<arrayname>(<index>);
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 31
3. Weitere Variablentypen
Felder
! dynamisches Feld
declarations
s = {"Bli", "Bla", "Blub"};
a : array(s) of integer;
end-declarations
a :: (["Bla", "Blub", "Bli"]) [1,2,3];
writeln(a("Blub"));
Beispiel:
• insbesondere können Intervalle Indexsets sein vereinfachte Zuweisung :
<arrayname> :: [<arraycontent>];
! Output: 2
• mehrdimensionale Felder:
• Deklaration:
• Zuweisung:
• Zugriff:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 32
3. Weitere Variablentypen
Mehrdimensionale Felder
declarations
<arrayname> : array(<indexset1>,<indexset2>)
of <vartype>;
declarations
<arrayname> :: (<indexset>,<indexset2>)
[<arraycontent>];
<arrayname>(<index1>, <index2>);
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 33
3. Weitere Variablentypen
Mehrdimensionale Felder
! mehrdimensionales dynamisches Feld
declarations
s = {"Bli", "Bla", "Blub"};
r = 1..2;
a : array(s,r) of integer;
end-declarations
a :: (["Bli", "Bla", "Blub"],[1,2]) [1,2,3,4,5,6];
writeln(a("Blub",1));
Beispiel:
! Output: 5
• Strukturen fassen Variablen verschiedener Variablentypen zusammen
• Deklaration:
• Zugriff auf einen Teil der Struktur: <recordname>.<varname>
• Zuweisung: jeden Teil der Struktur einzeln
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 34
3. Weitere Variablentypen
Strukturen
declarations
<recordtyp> = record
! Deklaration der Teile der Struktur
analog Deklarationsblock
<varname> : <vartype>;
end-record;
<recordname> : <recordtyp>;
end-declarations
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 35
3. Weitere Variablentypen
Strukturen
declarations
tier = record
id : integer;
tierlaut : string;
end-record;
kuh, schaf : tier;
end-declarations
kuh.id := 1; kuh.tierlaut := "Muh";
schaf.id := 2; schaf.tierlaut := "Maeh";
Beispiel:
4. Kontrollstrukturen
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 36
• if-Anweisung:
• Bedingungen: < , <= , = , >= , > , ...
• Verknüpfung von Bedingungen: and , or
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 37
4. Kontrollstrukturen
if-Anweisungen
if (<condition>) then
<commands>
elif (<condition>) then ! optional
<commands>
else ! optional
<commands>
end-if
• für Fallunterscheidungen mit vielen Fällen
• testet auf Gleichheit
• case of-Anweisungen:
• mehrere Anweisungen durch do … end-do einschließen
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 38
4. Kontrollstrukturen
case-Anweisungen
case <linke Seite> of
<rechte Seite 1> :
<command>
<rechte Seite 2> :
<command>
! ...
else ! optional
<commands>
end-case
• forall-Schleife:
• Vereinfachung bei nur einer Anweisung: forall (<index> in <indexset>) <command>
• Summation über mehrere Indexmengen möglich:
effizientere Behandlung als bei Schachtelung
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 39
4. Kontrollstrukturen
forall-Schleifen
forall (<index> in <indexset>) do
<commands>
end-do
forall (<index1> in <indexset1> ,
<index2> in <indexset2> ) do
<commands>
end-do
• Bedingungen an den Schleifenindex möglich:
effizientere Behandlung als bei Schachtelung
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 40
4. Kontrollstrukturen
forall-Schleife
forall (<index> in <indexset> | <condition>) do
<commands>
end-do
forall (i in 1..10, j in 1..100 | i^2 = j) do
writeln(j, " ist das Quadrat von ", i);
end-do
Beispiel:
• while-Schleife:
• Vereinfachung bei nur einer Anweisung: while (<condition>) <command>
• repeat-Schleife:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 41
4. Kontrollstrukturen
while- und repeat-Schleifen
while (<condition>) do
<commands>
end-do
repeat
<commands>
until <condition>
• spezielle forall-Schleifen
• Implementierung der mathematische Summe
mittels sum(<index> in <indexset>) <command>;
• auch Summation über mehrere Indexmengen und unter Nebenbedingungen möglich
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 42
4. Kontrollstrukturen
Summen
5. Umgang mit Daten
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 43
• Modell und Daten trennen
• Daten aus Textdateien einlesen und in Textdateien ausgeben
• Dateinamen als Parameter
Dateiname kann geändert werden, ohne das Modell neu zu kompilieren
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 44
5. Umgang mit Daten
Warum?
• Daten einlesen mittels initializations from Block
• unterscheiden sich Variablenname in Modell und Datendatei:
<modellvarname> as "<datavarname>";
• Mengen, die Indexmengen von Feldern sind, werden automatisch eingelesen
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 45
5. Umgang mit Daten
Daten einlesen
initializations from "<filename>"
<varname>; ! ...
end-initializations
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 46
5. Umgang mit Daten
Daten einlesen
parameters
datafile = "daten.dat";
end-parameters
declarations
s1, s2: set of string;
a: array(s1,s2) of integer;
end-declarations
initializations from datafile
a;
end-initializations
Beispiel:
• Formatierung der Daten:
• einfache Variablentypen:
• Mengen:
• Felder:
• Elemente können durch Leerzeichen oder Komma getrennt werden
• Eingaben nicht durch ein Semikolon abschließen!
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 47
5. Umgang mit Daten
Datendatei
"<varname>" : <value>
"<setname>" : [<element1> <element2> ...]
"<arrayname>" : [(<index1>) <element1>
(<index2>) <element2> ...]
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 48
5. Umgang mit Daten
Datendatei
! Datenfile daten.dat
"s1": ["Bli", "Bla", "Blub"]
"s2": ["Muh", "Maeh"]
"a": [("Bli" ,"Muh") 1, ("Bli" ,"Maeh") 2,
("Bla" ,"Muh") 3, ("Bli" ,"Maeh") 4,
("Blub","Muh") 5, ("Blub","Maeh") 6]
Beispiel:
• Datenausgabe mittels initializations to Block
• sollen Variablen in der Datendatei unter anderem Namen gespeichert werden:
<modellvarname> as "<datavarname>";
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 49
5. Umgang mit Daten
Datenausgabe
initializations to "<filename>"
<varname>; ! ...
end-initializations
6. Benutzergraph
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 50
• zur graphischen Veranschaulichung der Lösung
• einzubindende Bibliothek: "mmive"
• es ist nur ein einziger Benutzergraph möglich aber: in den Graphen kann in mehreren Ebenen gezeichnet werden
• Ausgabe des Benutzergraphen in der „Run Bar“, Registerkarte „User graph“
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 51
6. Benutzergraph
Grundlagen
• speichere jede Ebene als Variable ab
um die graphischen Elemente (Punkte, Linien, ...) den einzelnen Ebenen zuordnen zu können
• Erstellen einer neuen Ebene:
• alle Elemente einer Ebene haben dieselbe Farbe
• Farben: IVE_BLACK, IVE_BLUE, IVE_GREEN, usw. oder Funktion IVE_RGB()
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 52
6. Benutzergraph
Ebenen
declarations
<plotvarname> : integer;
end-declarations
<plotvarname> := IVEaddplot("<plotlabel>",<color>);
• Beschriftung:
• Punkt:
• Linie:
• Pfeil:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 53
6. Benutzergraph
Elemente
IVEdrawpoint(<plotvarname>,<x>,<y>);
IVEdrawlabel(<plotvarname>,<x>,<y>,<text>);
IVEdrawline(<plotvarname>,<x1>,<y1>,
<x2>,<y2>);
IVEdrawarrow(<plotvarname>,<x1>,<y1>,
<x2>,<y2>);
7. Prozeduren und Funktionen
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 54
• Mosel unterscheidet zwischen Prozeduren und Funktionen
• Prozeduren haben keinen Rückgabewert
• Funktionen haben einen Rückgabewert
• Prozeduren/Funktionen müssen vor ihrem ersten Aufruf deklariert werden
• Prozeduren/Funktionen können auf (globale) Modellvariablen zugreifen
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 55
7. Prozeduren und Funktionen
Was ist der Unterschied?
• Deklaration:
• Aufruf: <procedurename>(<varname>);
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 56
7. Prozeduren und Funktionen
Prozeduren
procedure printSolution (x : array(r : range) of mpvar,
obj : linctr)
forall(i in r) writeln("x(", i, ") = ", x(i).sol);
writeln("obj = ", obj.sol);
end-procedure
printsolution(x, z);
procedure <procedurename> (<inputname> : <inputtype>) ! Anweisungen
end-procedure
Beispiel:
• Deklaration:
• Aufruf: <functionname>(<varname>);
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 57
7. Prozeduren und Funktionen
Funktionen
function summe (a : real, b : real) : real
returned := a+b;
end-function
c := summe(1,2);
function <functionname> (<inputname> : <inputtype>): <outputtype> ! einfacher Variablentyp
! Anweisungen
returned := <output>; ! Rückgabe
end-function
Beispiel:
„Prozeduren/Funktionen müssen vor ihrem ersten Aufruf deklariert werden“
Alternative:
• Prozedur/Funktion vor dem ersten Aufruf ankündigen
(kein Semikolon am Ende!)
• erst am Modellende deklarieren
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 58
7. Prozeduren und Funktionen
Deklaration
forward procedure <procedurename> (<inputname> : <inputtype>)
forward function <functionname> (<inputname> : <inputtype>):
<outputtype>
8. Optimizer Modul
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 59
• das was Xpress ausmacht
• einzubindende Bibliothek: "mmxprs„
• Bereits bekannte Funktionen des Moduls:
maximize()
minimize()
getsol()
getobjval
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 60
8. Optimizer Modul
Grundlagen
• liefert den Lösungsstatus:
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 61
8. Optimizer Modul
getprobstat
declarations
status : string;
end-declarations
case getprobstat of
XPRS_OPT: status := "Optimum found";
XPRS_UNF: status := "Unfinished";
XPRS_INF: status := "Infeasible";
XPRS_UNB: status := "Unbounded";
XPRS_OTH: status := "Failed";
else status := "???";
end-case
• Funktionen:
• Parameter:
XPRS_PRESOLVE Presolver
XPRS_MIPPRESOLVE Presolver für MIPs
XPRS_HEURSTRATEGY Heuristiken für MIPs
XPRS_CUTSTRATEGY Schnittebenengenerierung
XPRS_VERBOSE Output des Optimizers
XPRS_MIPLOG zusätzlicher Output bei MIPs
XPRS_THREADS Anzahl Threads (Parallel Computing)
und viele mehr …
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 62
8. Optimizer Modul
Optimierungsparameter
getparam(<parametername>)
setparam(<parametername>,<value>)
• Eingriff in den Ablauf des Optimizers
• Funktionen:
• Callback gibt an, wann die Prozedur/Funktion aufgerufen wird
• Callbacks:
XPRS_CB_CUTMGR Schnittebenengenerierung
XPRS_CB_CHGBRANCH Branchingentscheidung
und viele mehr …
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 63
8. Optimizer Modul
Callbacks
setcallback(<callbackname>,<procedurename>)
setcallback(<callbackname>,<functionname>)
• wird in Knoten aufgerufen, die nach der Lösung der Relaxation nicht abgeschnitten wurden und nicht unzulässig sind
• ruft Funktion auf
• Übergabewerte: keine
• Rückgabewert: Boolean
true Knoten muss erneut bearbeitet werden (inkl. erneutem Aufruf des Callbacks)
false Knoten muss nicht erneut bearbeitet werden
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 64
8. Optimizer Modul
Callback CB_CUTMGR
• Schnittebenen hinzufügen:
cutid ID um den Schnitt wiederfinden zu können
type Art der (Un)gleichung:
CT_LEQ kleiner gleich CT_EQ gleich CT_GEQ größer gleich
linexp Ungleichung
• Reserviere am Modellanfang zusätzliche Zeilen in der Matrix:
8. Optimizer Modul
Callback CB_CUTMGR
addcut(cutid : integer, type : integer,
linexp : linctr)
setparam("XPRS_EXTRAROWS", MAX_CUTS)
8. Optimizer Modul
Callback CB_CUTMGR
! Reserviere Zeilen in der Matrix
MAX_CUTS := 1000;
setparam("XPRS_EXTRAROWS", MAX_CUTS);
! kündige Funktion an
forward function cb_node : boolean
! setze Callback
setcallback(XPRS_CB_CUTMGR, "cb_node");
! ... maximize()
function cb_node : boolean
! ...
addcut(1, CT_LEQ, x(1))
end-function
Beispiel:
• wird in Knoten aufgerufen, in denen verzweigt werden soll
• ruft Prozedur auf
• Übergabewerte:
e Index der Variable, auf der verzweigt wird
u Teilproblem, das zuerst bearbeitet wird
d geschätzte Zielfunktionswertverringerung
(Achtung: Optimizer beginnt Variablenindizierung mit 0)
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 67
8. Optimizer Modul
Callback CB_CHGBRANCH
(e : integer, u : integer, d : real)
• Beeinflussen der Branching Entscheidung:
x Entscheidungsvariable, auf der verzweigt wird
u, d wie oben
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 68
8. Optimizer Modul
Callback CB_CHGBRANCH
setucbdata(x : mpvar, u : integer, d : real)
Melanie Bestle – Lehrstuhl für Angewandte Geometrie und Diskrete Mathematik 69
8. Optimizer Modul
Callback CB_CHGBRANCH
! kündige Funktion an
forward procedure cb_chgbranch (e : integer, u : integer,
d : real)
! setze Callback
setcallback(XPRS_CB_CHGBRANCH, "cb_chgbranch");
! ... maximize()
procedure cb_chgbranch (e : integer, u : integer, d : real)
! ...
setucbdata(x(e), u, d)
end-procedure
Beispiel: