Kapitel 4. Mathematische Optimierungsmodelle. Einführung in AMPL (1) Uwe H. Suhl Lehrstuhl für Wirtschaftsinformatik Freie Universität Berlin

Ähnliche Dokumente
Modellieren mit AMPL

Veranstaltung und Übung: Optimierungssysteme Modelle, Software, Praxisanwendungen. Uwe Suhl Veronika Waue SS 2008

maximize Profit: sum {j in P} c[j] * X[j]; subject to Zeit: sum {j in P} (1/a[j]) * X[j] <= beta; subject to Grenzen {j in P}: 0 <= X[j] <= u[j];

6. Softwarewerkzeuge für die Lineare Programmierung

Eine kurze Beschreibung zu AMPL und CPLEX

LINGO: Eine kleine Einführung

Optimierung für Nichtmathematiker

Kapitel 2. Mathematische Optimierungsmodelle. Lineare Optimierung. Uwe H. Suhl Lehrstuhl für Wirtschaftsinformatik Freie Universität Berlin

Optimization in Business Applications: 2. Modeling principles

LinOpt - Tool zur Visualisierung eines multikriteriellen Optimierungsproblems

Inhalt. 8.1 Motivation. 8.2 Optimierung ohne Nebenbedingungen. 8.3 Optimierung unter Nebenbedingungen. 8.4 Lineare Programmierung

Optimierungssysteme Modelle, Verfahren, Software, Anwendungen

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Computer-gestützter Entwurf von absatzweise arbeitenden chemischen Mehrproduktanlagen

CADSTAR MRP-Link. MRP-Link ist erstellt von:

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Projekt 1: Constraint-Satisfaction-Probleme Abgabe: 7. Juni 2009

Aufgabe 7.1: Wirtschaftsplanung

Algorithmik WS 07/ Vorlesung, Andreas Jakoby Universität zu Lübeck

Der folgende Vortrag basiert auf dem Text A Polynomial Time Algorithm for the N-Queens Problem von Rok Sosic und Jun Gu aus dem Jahre 1990.

Lösungen Übung 5. Programmieren in C++ 1. Aufgabe. #include <iostream.h> #include <stdarg.h>

Grundlagen der Künstlichen Intelligenz

Einführung in die Informatik I (autip)

Algorithmen und ihre Programmierung

Seminarvortrag Automatisierte Zuordnung von PJ-Plätzen Vergleich verschiedener Algorithmen. Paul Gießler Institut für Medizinische Informatik

Computer Science Department - High Performance and Web Computing Group. Optimierungsprobleme

Kaufmännische Berufsmatura 2016

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

Semantik von Programmiersprachen SS 2017

Konzepte von Programmiersprachen

Ganzzahlige Optimierung (IP)

Das Damenproblem - funktional und logisch

Hilfe zum PDF Formular Editor

Optimierung für Wirtschaftsinformatiker: Lineare Programme

1 Zahlenmengen und einige mathematische Symbole

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

Einführung. Erstellung der Datenbank-Datei. OpenOffice Base

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Optimierung I. Dr. Ulf Lorenz F2.413

Kombinatorische Optimierung

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

Handbuch zum Excel Formular Editor

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Einführung in die Programmierung (MA8003)

Lexikalische Struktur von Fortran 95. Normierte Zeichensätze

AUFGABEN. Klausur: Modul Planen mit mathematischen Modellen. Termin:

NP-vollständige Probleme

Einführung in die Programmierung mit VBA

Einführung in Xpress-Mosel

AMPL Eine kurze Einführung

Sandro Pirkwieser, (Bin Hu, Jakob Puchinger) SS 2010

Begrenzte Freigabe privater Daten

C. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007

MATLAB Einführung. Numerische Methoden für ITET und MATL Dr. S. May, D. Devaud. ETH Zürich, Seminar for Applied Mathematics

Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme?

Kommentierte Lösung zur Aufgabe Kiosk

Crashkurs Kommandozeile

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung - 2. Die Kornshell im Detail - 3.Grundlagen der Programmierung

Internet-Technologien

Customizing Datensicht erstellen. Erweiterung der Baumstruktur um eigene Sichten

Fall 3: Mehrere Kapazitätsengpässe

Übungspaket 14 Eindimensionale Arrays

Einstieg in die Informatik mit Java

Datenmanagement in Android-Apps. 16. Mai 2013

. * Beispiel 2: Anteil niederlaendischer Frauen ohne Konfession ( )

Approximationsalgorithmen

Erste Schritte der Programmierung in C

Autorisierungsanleitung ArcGIS 10.4 for Desktop Student Trial mit englischer Oberfläche

Operations Research für Logistik

So erstellen bzw. ändern Sie schnell und einfach Texte auf der Aktuelles -Seite Ihrer Praxishomepage

Whitepaper. Produkt: combit Relationship Manager 5. Import von Adressen nach Firmen und Personen. combit GmbH Untere Laube Konstanz

Schulungsunterlagen: ARCWAY Cockpit Report Engine. Erstellen und Anpassen von Berichtsvorlagen für ARCWAY Cockpit

Importdatei Grobkoordinaten mit Excel erstellen und bearbeiten

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Objektbindungen und Verweise HARALD NAHRSTEDT. Erstellt am

Optimierung. Optimierung. Vorlesung 9 Lineare Programmierung & Kombinatorische Optimierung Fabian Kuhn

Das Linear Ordering Problem Exakte Lösungsverfahren. für NP-schwierige. VO Algorithm Engineering

Optimale Steuerung 1 Prozessoptimierung 1

Die duale Simplexmethode zur Lösung rein ganzzahliger linearer Programme

Programmieren I + II Regeln der Code-Formatierung

Kap. 4.3: Das Dualitätstheorem der linearen Optimierung

Mächtigkeit von WHILE-Programmen

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

1 Potenzen und Polynome

VBA-Programmierung: Zusammenfassung

Die CUTEr Testbibliothek

Grundlagen: Algorithmen und Datenstrukturen

Modelle und Methoden der Linearen Optimierung (Die Thesen zur Vorlesung 4)

Wirtschaftsinformatik (PWIN) 5. Mentorium. Wirtschaftsinformatik (PWIN), SS2010, Professur für Mobile Business & Multilateral Security 1

Ralf Kirsch Uwe Schmitt. Programmieren inc. Eine mathematikorientierte Einführung. Mit 24 Abbildungen und 13 Tabellen. Springer

Studiengang «StudG» Klausur Marketing & Management Science WS 2012/2013. Studienfach: Abschluss:

Lösungsvorschlag Serie 2 Rekursion

Optimierung für Wirtschaftsinformatiker: Dualität, Ganzzahlige lineare Optimierung

Theoretische Grundlagen des Software Engineering

Optimierungsworkshop: Beispiele und Übungen

Vorbereitende Aufgaben

Rechnerpraktikum zu Grundlagen der Nichtlinearen Optimierung

Als Instanz für das p-median Problem wählen wir das Netzwerk von Abbildung 1-1 des Buches auf Seite 6.

Transkript:

Kapitel 4 Mathematische Optimierungsmodelle Einführung in AMPL () Uwe H. Suhl Lehrstuhl für Wirtschaftsinformatik Freie Universität Berlin Optimierungssysteme Version. / SS 200 Modellierungssysteme Sind Softwaresysteme zur Unterstützung der Implementierung von mathematischen Optimierungsmodellen; sie weisen mindestens folgende Systemkomponenten auf: Einer algebraischen Modellierungssprache zur Beschreibung des Modells Einem Editor zur Eingabe eines Modells in dieser Sprache (Modell und Daten getrennt) Schnittstellen zu Optimierungssystemen Je nach System kann das Optimierungssystem integriert sein Wir benutzen eine β-version von MOPS Studio, das auf AMPL und MOPS basiert Eine Übersicht über bekannte Systeme findet man in folgender Tabelle T. Koch, Rapid Mathematical Programming, TU Berlin, 2004, ZIB-Report 04-5, http://www.zib.de/publications/abstracts/zr-04-5/

Beispiel: Produktionsplanung In einer Stunde können 200 Tonnen bands oder 40 Tonnen coils produziert werden. Der Deckungsbeitrag beträgt 25 für eine Tonne bands und 30 für eine Tonne coils. Es können wöchentlich ma. 6000 Tonnen bands und 4000 Tonnen coils verkauft werden. Es stehen 40 Stunden in der Woche zur Produktion zur Verfügung (einperiodisches Modell). Wir zeigen das mathematische Modell und die Umsetzung in AMPL Entscheidungsvariablen sind B: Menge der zu produzierenden bands C: Menge der zu produzierenden coils Das Modell soll maimiert werden LP-Modell Maimiere 25 B + 30 C /200 B + /40 C 40 0 B 6000 0 C 4000 LP-Modell in AMPL var XB; var XC; maimize profit: 25 * XB + 30 * XC; subect to Time: (/200) * XB + (/40) * XC <= 40; subect to B_limit: 0 <= XB <= 6000; subect to C_limit: 0 <= XC <= 4000; In diesem sehr einfachen Beispiel sind die Daten (Parameter) eplizit im AMPL-Programm definiert; später werden Modell und Daten in getrennten Dateien spezifiziert Grundelemente von AMPL () Mengen: set Variablen: var Parameter: param Zielfunktion: maimize / minimize Restriktionen: subect to Weist man den Parametern eines Modells feste Daten zu, so erhält man eine Modellinstanz Einfache (nicht indizierte) Mengen in AMPL: set PROD; set PROD := bands, coils, plate; set numbers; set numbers := 2., -, 0.4E+2; set YEARS; set YEARS := 990.. 2020 by 5; set YEARS; param start integer; param end > start integer; param interval > 0 integer; param start := 990; param end := 2020; param interval := 5; set YEARS := start.. end by interval; 2

Das Steel-Modell wird auf beliebig viele Produkte erweitert P Menge der Produkte a Anzahl Tonnen von Produkt, die in einer Stunde produziert werden kann. P b die zur Verfügung stehende Anzahl von Produktionsstunden c Deckungsbeitrag des Produktes, P u Obergrenze der Produktion von Produkt, P Entscheidungsvariablen: Produktionsmenge von Produkt in Tonnen, P LP-Modell Maimiere subect to / a b, wobei 0 u, P c P P AMPL Modell (prod.mod) AMPL Daten (prod.dat) set P; param a { in P}; param b; param c { in P}; param u { in P}; var X { in P}; maimize profit: sum { in P} c[] * X[]; subect to Time: sum { in P} (/a[]) * X[] <= b; subect to Limit { in P}: 0 <= X[] <= u[]; set P := bands coils; param: a c u := bands 200 25 6000 coils 40 30 4000 ; param b := 40; Dokumentation von AMPL Programmen Da AMPL eine (semantisch mächtige) Programmiersprache ist, gelten ähnliche Grundsätze für eine gute Dokumentation des Modells Wählen Sie aussagekräftige Namen für Parameter, Variablen und Restriktionen Dokumentieren Sie Ihr Programm mit Kommentaren Aus Kompatibilitätsgründen sollten keine Umlaute oder Sonderzeichen für Variablen und Kommentare verwendet werden! Modell (steel.mod) set PROD; # products param rate {PROD} > 0; # tons produced per hour param avail >= 0; # hours available in week param profit {PROD}; # profit per ton param market {PROD} >= 0; # limit on tons sold in week var Make {p in PROD} >= 0, <= market[p]; # tons produced maimize total_profit: sum {p in PROD} profit[p] * Make[p]; # Obective: total profits from all products subect to Time: sum {p in PROD} (/rate[p]) * Make[p] <= avail; /* Constraint: total of hours used by all products may not eceed hours available */ 3

Produktionsbeispiel mit zusätzlichem Produkt Um ein Produkt hinzuzufügen, braucht das AMPL Modell nicht geändert werden. Es reicht eine Erweiterung der Datendatei steel2.dat set PROD := bands coils plate; param: rate profit market := bands 200 25 6000 coils 40 30 4000 plate 60 29 3500; param avail := 40; Aufgaben Installieren Sie MOPS Studio auf Ihrem Rechner Ggf. müssen Sie den.net Framework 2.0 herunterladen und installieren Geben Sie das Steel-Beispiel ein und lösen Sie das LP Erstellen Sie die Steel2.dat und lösen Sie das LP; wie lautet eine optimale Lösung? Lesen Sie das Dokument AMPL und MOPS Studio Parameter in AMPL Parameter können als binary, integer oder symbolic deklariert werden Skalare Parameter: param T; param T := 2; Einfach indizierte Parameter set PROD; param rate {PROD} > 0; set PROD := bands coils plate; param rate := bands 200 coils 40 plate 60; Mehrfach indizierte Parameter set ORIG; set DEST; param COST {ORIG, DEST} >= 0; param cost: FRA DET LAN := GARY 39 40 25 CLEV 4 9 35 PITT 34 50 2; 4

Variablen in AMPL Kontinuierliche Variablen mit oberen und unteren Schranken set FOOD param f_min {FOOD} >= 0; param f_ma{ in FOOD} >= f_min[]; var Buy { in FOOD} >= f_min[], <= f_ma{}; Fiierte Variablen var minbuy { in FOOD} = f_min{}; Binäre Variablen var shouldbuy binary; Ganzzahlige Variablen var intbuy { in FOOD} integer >= f_min[], <= f_ma[]; Eight Queens Problem Eight Queens Problem Ziel: Acht Damen sollen so auf ein Schachbrett gestellt werden, dass keine Dame von einer anderen Dame geschlagen" werden kann Für dieses Problem gibt es 92 zulässige Lösungen Eine Lösung zeigt die nebenstehende Abbildung Das Problem kann für ein beliebiges n (statt n = ) formuliert werden Die Lösungen können z.b. über Backtracking Algorithmen gefunden werden Eine andere Möglichkeit eine zulässige Lösung zu finden ist das Problem als ein Integer Optimierungsproblem zu formulieren Wir definieren die 0--Variablen =, wenn eine Dame in Zeile i und Spalte steht (i, {,..}, 0 sonst Die Zielfunktion maimiert die Anzahl platzierter Damen Die Restriktionen erlauben in eder Zeile und in eder Spalte höchstens einen Eintrag = In eder Haupt- und Nebendiagonale darf höchstens ein Eintrag = sein 5

IP-Modell für Eight Queeens Problem {0,} Maimiere i= = -i= k-7 + i= k+ 2 64 i= = {,..,}!in eder Spalte höchstens ein Eintrag i {,..,}!in eder Zeile höchstens ein Eintrag k {,..,3}!ma. Einträge in Hauptdiagonalen k {,..,3}!ma. Einträge in Nebendiagonalen Indizierungen in AMPL {A} # über alle Elemente der Menge A {A, B} # über alle Paare aus A B {i in A, in B}, {i in A,B} # ebenfalls {i in A, C[i]} # über alle Paare aus A C[i] {i in A, (,k) in D} # über alle Tripel A D, wobei D zweiwertig {i in A: p[i] > 0} # über alle Elemente von A für die p[i] > 0 {i in A, in C[i]: i <= } # über alle Paare (i,) aus A C[i], für die i <= # (A und C[i] dürfen nur numerische Elemente enthalten) {i in A, (i,) in D: i <= } # das Gleiche für eine zweiwertige Menge D Definition der Indemengen für das -Queens-Problem set Felder := {..,..}; # 64 Felder des Schachbretts set Zeile {..} within Felder; # Felder der Zeilen bis set Spalte{..} within Felder; # Felder der Spalten bis set HDiag {..3} within Felder;# Felder der Hauptdiagonalen bis 3 set NDiag {..3} within Felder;# Felder der Nebendiagonalen bis 3 let {i in..} Zeile[i] := {(r,c) in Felder : r = i} # Zeile i let { in..} Spalte[] := {(r,c) in Felder : c = }; # Spalte # NDiag von rechts oben nach links unten : r + c = const let { k in..3} NDiag[k] := {(r,c) in Felder : r+c=k+2}; # NebDiag k # HDiag von links oben nach rechts unten: c-r = const let { k in..3} HDiag[k] := {(r,c) in Felder: c-r=k-7}; # HptDiag k 6

Eight Queeens Problem mit AMPL set Felder := {..,..}; # 64 Felder des Schachbretts set Zeile {..} within Felder; # Felder der Zeilen bis set Spalte{..} within Felder; # Felder der Spalten bis set HDiag {..3} within Felder; # Felder der Hauptdiagonalen bis 3 set NDiag {..3} within Felder; # Felder der Nebendiagonalen bis 3 let {i in..} Zeile[i] := {(r,c) in Felder : r=i}; # Zeile i let { in..} Spalte[] := {(r,c) in Felder : c=}; # Spalte # NDiag von rechts oben nach links unten : r+c=const let { k in..3} NDiag[k] := {(r,c) in Felder : c+r=k+2}; # NebDiag k # HDiag von links oben nach rechts unten: c-r=const let { k in..3} HDiag[k] := {(r,c) in Felder: c-r=k-7}; # HptDiag k param act; # aktuelle Loesung let act:=0; set Soln {0..act} within Felder; # Position der Damen in den Loesungen 0 bis act let Soln[0] := {}; # Anfangsloesung ist leer var {Felder} binary; maimize Ziel: sum {(i,) in Felder} [i,]; subect to DiagN {k in..3}: sum{(r,s) in NDiag[k]} [r,s] <= ; subect to DiagH {k in..3}: sum{(r,s) in HDiag[k]} [r,s] <= ; subect to Row {i in..}: sum{(r,s) in Zeile[i]} [r,s] <= ; subect to Col {i in..}: sum{(r,s) in Spalte[i]} [r,s] <= ; subect to Old {k in..act}: sum{(r,s) in Soln[k]} [r,s] <= 7. ; # Verbot alter Lösungen repeat { solve ; # solve_result_num = 200 ist der MOPSAMPL Returncode für infeasible if Ziel <= 7.5 or solve_result_num = 200 then break; letact:= act+ ; let Soln[act] := {(i,) in Felder : [i,] >= 0.9 }; }; display Soln; 7