English version Spanish version Italian version

Lektion 2: Formulierung eines einfachen Produkt-Mix Modells

In dieser Lektion wird mit Hilfe eines einfachen Produkt-Mix-Problem, hier Better Bread Bakery genannt, gezeigt, wie lineare Optimierungsprobleme modelliert werden können.


Zur Formulierung Linearer Optimierungsprobleme

Der Zweck dieser Lektion ist es, eine Einführung in die Modellbausteine

zu geben.

Zu Beginn der Modellformulierung eines linearen Optimierungsproblems sind diese Modellbausteine zu identifizieren.

Der erste Schritt besteht in der Identifizierung und Namensgebung der Entscheidungsvariablen, d.h. der Elemente eines Modells, über die der Entscheidungsträger verfügen kann und deren Werte die Lösung des Modells determinieren.

Der nächste Schritt ist die Bestimmung der Zielfunktion und diese mit Hilfe der Entscheidungsvariablen zu beschreiben. Die Zielfunktion enthält das Ziel, das man zu erreichen trachtet, in einer quantitativen Form. Hierbei kann die Vorgabe sein, den Wert dieser Zielfunktion zu maximieren oder zu minimieren. Sprechen wir davon, ein Problem optimieren zu wollen, so bedeutet dies, dass wir Werte der Entscheidungsvariablen finden und bestimmen wollen, die zu einem maximalen oder minimalen Wert dieser Zielfunktion führen. In vielen Fällen drückt die Zielfunktion einen Geldbetrag aus, dem es im Falle von Profit zu maximieren, im Falle von Kosen zu minimieren gilt. Es gibt aber auch andere Zielfunktion, z.b. Maximierung der Auslastung.

Nebenbedingungen sind Beschränkungen, denen die Variablen unterliegen. Eine Nebenbedingungen schränkt den Bereich der Werte ein, den eine Variable annehmen kann. Als Beispiel für eine Nebenbedingung seien bestimmte Ressourcen genannt, z.b. Anlagenkapazität oder die Anzahl von Mitarbeitern, die eben nur beschränkt zur Verfügung stehen.


Problembeschreibung: Ein einfaches Produkt-Mix-Problem

Die Better Bread Bakery ist berühmt für ihre guten Brote. Sie backt zwei verschiedene Brote: "Sunshine", ein weisses Brot und "Moonlight", ein großes, dunkles Brot.

Der Markt und die Nachfrage für diese berühmten Brot ist grandios. Jeder Laib des schmackhaften Sunshine Brotes ergibt einen Nettogewinn von $0.05, beim Moonlight beträgt der Nettogewinn sogar $0.08. Die Fixkosten für den Betrieb der bäckerei belaufen sich auf $4000 je Monat unabhängig von der Menge der gebackenenen Brote.

Die bäckerei ist in zwei Abteilungen untergliedert, die für Backen und Mischen zuständig sind; beide sind Zu Beginn der Modellformulierung eines linearen Optimierungsproblems sind diese Modellbausteine zu identifizieren.

Der erste Schritt besteht in der Identifizierung und Namensgebung der Entscheidungsvariablen, d.h. der Elemente eines Modells, über die der Entscheidungsträger verfügen kann und deren Werte die Lösung des Modells determinieren.

Der nächste Schritt ist die Bestimmung der Zielfunktion und diese mit Hilfe der Entscheidungsvariablen zu beschreiben. Die Zielfunktion enthält das Ziel, das man zu erreichen trachtet, in einer quantitativen Form. Hierbei kann die Vorgabe sein, den Wert dieser Zielfunktion zu maximieren oder zu minimieren. Sprechen wir davon, ein Problem optimieren zu wollen, so bedeutet dies, dass wir Werte der Entscheidungsvariablen finden und bestimmen wollen, die zu einem maximalen oder minimalen Wert dieser Zielfunktion führen. In vielen Fällen drückt die Zielfunktion einen Geldbetrag aus, dem es im Falle von Profit zu maximieren, im Falle von Kosen zu minimieren gilt. Es gibt aber auch andere Zielfunktion, z.b. Maximierung der Auslastung.

Nebenbedingungen sind Beschränkungen, denen die Variablen unterliegen. Eine Nebenbedingungen schränkt den Bereich der Werte ein, den eine Variable annehmen kann. Als Beispiel für eine Nebenbedingung seien bestimmte Ressourcen genannt, z.b. Anlagenkapazität oder die Anzahl von Mitarbeitern, die eben nur beschränkt zur Verfügung stehen.


Problembeschreibung: Ein einfaches Produkt-Mix-Problem

Die Better Bread Bakery ist berühmt für ihre guten Brote. Sie backt zwei verschiedene Brote: "Sunshine", ein weisses Brot und "Moonlight", ein großes, dunkles Brot.

Der Markt und die Nachfrage für diese berühmten Brot ist grandios. Jeder Laib des schmackhaften Sunshine Brotes ergibt einen Nettogewinn von $0.05, beim Moonlight beträgt der Nettogewinn sogar $0.08. Die Fixkosten für den Betrieb der bäckerei belaufen sich auf $4000 je Monat unabhängig von der Menge der gebackenenen Brote.

Die bäckerei ist in zwei Abteilungen untergliedert, die für Backen und Mischen zuständig sind; beide sind in ihrer Kapazität begrenzt.

In der Backabteilung stehen 10 Backöfen zur Verfügung mit einer Tageskapazität von 140 Backblechen. Auf jedem dieser Backbleche finden 10 Laib Sunshine Brot Platz, jedoch nur 5 der etwas größeren Moonlight Brote. Jede Kombination der beiden Brote ist erlaubt, wobei natürlich zu beachten gilt, dass die großen Brote doppelt so viel Platz wie die kleinen Brote bieten.

In der Mischabteilung können täglich 8000 Laib des Sunshine Brotes und 5000 Laib Moonlight Brot zubereitet werden. Da zwei Mischer zur Verfügung stehen, gibt es keinen Konflikt die beiden Teige herzustellen.

Da die Nachfrage für beide Typen Brot unbegrenz ist, ist es Aufgabe des Managements der BBB, unter den gegebenen Kapazitätsbeschränkungen die beste Mischung beider Brote zu bestimmen, d.h. die Frage zu beantworten, wieviele Laiber Brot von jeder Sorte herzustellen sind, sodass der Gewinn maximal wird.

Im folgenden wird nun gezeigt, wie die Entscheidungsvariablen, die Zielfunktion und die Nebenbedingungen für dieses Modell zu identifizieren sind und wie das Modell in MPL einzugeben ist.


Modellformulierung

Identifizierung der Entscheidungsvariablen

Im Falle unserer bäckerei tragen die Entscheidungsvariablen die Information, wieviele Laiber Brot von jeder Sorte täglich zu backen sind. Um die Lesbarkeit der Modellformulierung zu erhöhen, ist es sinnvoll, den Entscheidungsvariablen Namen zuzuordnen, die erkennen lassen, welche Größen des praktischen Problems die Variablen repräsentieren. Daher führen wir zwei Entscheidungsvariablen mit Namen Sun und Moon ein, die die folgenden Bedeutungen haben sollen:

Kennt man die Werte dieser Variablen, so lässt sich der Gewinn der bäckerei berechnen.

Identifizierung der Zielfunktion

In diesem Beispiel soll der tägliche Gewinn maximiert werden. Der spezifische Erlös betrug $0.05 je Laib Sunshine Brot; daher beträgt der Beitrag zum Gewinn, der durch den Verkauf von Sunshine Brot erzielt wird, einsichtigerweise $0.05 mal dem Wert der Sun Variablen.

Entsprechend gilt für den Gewinnbeitrag der Moonlight Brote, die Formel $0.08 mal dem Wert der Moon Variable. Die Werte $0.05 und $0.08 heissen Koeffizienten der korrespondierenden Entscheidungsvariablen in der Zielfunktion. Zur Berechnung des gesamten täglichen Gewinnbeitrags muss man lediglich die Beiträge beider Brotsorten addieren. Allerdings müssen noch die Fixkosten in Abzug gebracht werden, um den täglichen Nettogewinn zu erhalten; das sind also $4000 geteilt durch 30 Tage eines Monats. Damit lautet die zu maximierende Größe:

Für dieses spezielle Beispiel ist nun die Definition der Zielfunktion abgeschlossen. Der Solver nutzt die Zielfunktion als Kriterium zur Bestimmung der optimalen Lösung.

Identifizierung der Nebenbedingungen

Die erste Nebenbedingung in der Backabteilung mag ein wenig kompliziert erscheinen, da sie beide Brottypen verknüpft. Es ist möglich, z.b. 10 Sunshine Brote oder 5 Moonlight Brote auf jedem Backbleck zu plazieren, aber auch jede beliebige Kombination der beiden Brote. Der Ausdruck 1/10 Sun + 1/5 Moon liefert uns gerade den gesamten Gebrauch der Backbleche. Misst man die Kapazität eines jeden Backofens als Anzahl der Backbleche, die er täglich bearbeiten kann (10 x 140), so lautet die Nebenbedingung:

In der Mischabteilung können wir die Nebenbedingungen dagegen wie folgt formulieren:

Zusammengefasste Modellformulierung

Mit der Zielfunktion und all den Nebenbedingungen ergibt sich zusammengefasst die folgende Formulierung des linearen Optimierungsproblems:

Hat man erst mal diese Formulierung, so ist ein Großteil der Arbeit bereits geleistet. Wie im folgenden nämlcih sichtbar wird, akzpetiert MPL nämlich eine Eingabe, die der mathematischen Formulierung sehr ähnelt.


Lösung des Problems mit MPL

Schritt 1: Start von MPL und Erzeugung einer neuen Modelldatei

  1. Start der MPL Applikation.

  2. Wähle New aus dem File Menu zur Erzeugung einer neuen, leeren Modelldatei.

  3. Wähle Save As aus dem File Menu und speichern der Datei unter dem Namen Bakery2.mpl.

Schritt 2: Eingabe des bäckereimodells

Der Kodierung des Modells in der MPL Modellierungssprache steht nun nichts mehr entgegen. Der MPL Modelleditor ist ein Standardtexteditor, der die Eingabe des Modells erlaubt und dabei verschiedene Operationen am Modelltext erlaubt. In den Modelleditor soll nun die folgende Modellformulierung eingegeben werden: in ihrer Kapazität begrenzt.

In der Backabteilung stehen 10 Backöfen zur Verfügung mit einer Tageskapazität von 140 Backblechen. Auf jedem dieser Backbleche finden 10 Laib Sunshine Brot Platz, jedoch nur 5 der etwas größeren Moonlight Brote. Jede Kombination der beiden Brote ist erlaubt, wobei natürlich zu beachten gilt, dass die großen Brote doppelt so viel Platz wie die kleinen Brote bieten.

In der Mischabteilung können täglich 8000 Laib des Sunshine Brotes und 5000 Laib Moonlight Brot zubereitet werden. Da zwei Mischer zur Verfügung stehen, gibt es keinen Konflikt die beiden Teige herzustellen.

Da die Nachfrage für beide Typen Brot unbegrenz ist, ist es Aufgabe des Managements der BBB, unter den gegebenen Kapazitätsbeschränkungen die beste Mischung beider Brote zu bestimmen, d.h. die Frage zu beantworten, wieviele Laiber Brot von jeder Sorte herzustellen sind, sodass der Gewinn maximal wird.

Im folgenden wird nun gezeigt, wie die Entscheidungsvariablen, die Zielfunktion und die Nebenbedingungen für dieses Modell zu identifizieren sind und wie das Modell in MPL einzugeben ist.


Modellformulierung

Identifizierung der Entscheidungsvariablen

Im Falle unserer bäckerei tragen die Entscheidungsvariablen die Information, wieviele Laiber Brot von jeder Sorte täglich zu backen sind. Um die Lesbarkeit der Modellformulierung zu erhöhen, ist es sinnvoll, den Entscheidungsvariablen Namen zuzuordnen, die erkennen lassen, welche Größen des praktischen Problems die Variablen repräsentieren. Daher führen wir zwei Entscheidungsvariablen mit Namen Sun und Moon ein, die die folgenden Bedeutungen haben sollen:

Kennt man die Werte dieser Variablen, so lässt sich der Gewinn der bäckerei berechnen.

Identifizierung der Zielfunktion

In diesem Beispiel soll der tägliche Gewinn maximiert werden. Der spezifische Erlös betrug $0.05 je Laib Sunshine Brot; daher beträgt der Beitrag zum Gewinn, der durch den Verkauf von Sunshine Brot erzielt wird, einsichtigerweise $0.05 mal dem Wert der Sun Variablen.

Entsprechend gilt für den Gewinnbeitrag der Moonlight Brote, die Formel $0.08 mal dem Wert der Moon Variable. Die Werte $0.05 und $0.08 heissen Koeffizienten der korrespondierenden Entscheidungsvariablen in der Zielfunktion. Zur Berechnung des gesamten täglichen Gewinnbeitrags muss man lediglich die Beiträge beider Brotsorten addieren. Allerdings müssen noch die Fixkosten in Abzug gebracht werden, um den täglichen Nettogewinn zu erhalten; das sind also $4000 geteilt durch 30 Tage eines Monats. Damit lautet die zu maximierende Größe:

Für dieses spezielle Beispiel ist nun die Definition der Zielfunktion abgeschlossen. Der Solver nutzt die Zielfunktion als Kriterium zur Bestimmung der optimalen Lösung.

Identifizierung der Nebenbedingungen

Die erste Nebenbedingung in der Backabteilung mag ein wenig kompliziert erscheinen, da sie beide Brottypen verknüpft. Es ist möglich, z.b. 10 Sunshine Brote oder 5 Moonlight Brote auf jedem Backbleck zu plazieren, aber auch jede beliebige Kombination der beiden Brote. Der Ausdruck 1/10 Sun + 1/5 Moon liefert uns gerade den gesamten Gebrauch der Backbleche. Misst man die Kapazität eines jeden Backofens als Anzahl der Backbleche, die er täglich bearbeiten kann (10 x 140), so lautet die Nebenbedingung:

In der Mischabteilung können wir die Nebenbedingungen dagegen wie folgt formulieren:

Zusammengefasste Modellformulierung

Mit der Zielfunktion und all den Nebenbedingungen ergibt sich zusammengefasst die folgende Formulierung des linearen Optimierungsproblems:

Hat man erst mal diese Formulierung, so ist ein Großteil der Arbeit bereits geleistet. Wie im folgenden nämlcih sichtbar wird, akzpetiert MPL nämlich eine Eingabe, die der mathematischen Formulierung sehr ähnelt.


Lösung des Problems mit MPL

Schritt 1: Start von MPL und Erzeugung einer neuen Modelldatei

  1. Start der MPL Applikation.

  2. Wähle New aus dem File Menu zur Erzeugung einer neuen, leeren Modelldatei.

  3. Wähle Save As aus dem File Menu und speichern der Datei unter dem Namen Bakery2.mpl.

Schritt 2: Eingabe des bäckereimodells

Der Kodierung des Modells in der MPL Modellierungssprache steht nun nichts mehr entgegen. Der MPL Modelleditor ist ein Standardtexteditor, der die Eingabe des Modells erlaubt und dabei verschiedene Operationen am Modelltext erlaubt. In den Modelleditor soll nun die folgende Modellformulierung eingegeben werden:

     TITLE BetterBreadBakery;

     MAX

         Profit = 0.05 Sun + 0.08 Moon - 4000/30;

     SUBJECT TO

         1/10 Sun + 1/5 Moon <= 10 * 140;

         Sun  <= 8000;
         Moon <= 5000;

     END
    

Der Unterschied zwischen der im vorherigen Schritt vorgestellten Modellformulierung und der Realisierung in der hier gezeigten Datei ist nur gering. Die Zielfunktion und jede Nebenbedingung wird von einem Semikolon ';' gefolgt. Damit werden in MPL die Nebenbedingung separiert.

Die Leerstellen zwischen den Einträgen und den Zeilen sind in MPL nicht bindend. Es ist jedoch sinnvoll, Leerstellen und Extrazeilen zur Verbesserung der Lesbarkeit und des Verständnisses einzufügen. Für MPL ist nur der aktuale Text einer Modelldatei relevant.

Nach vollständiger Eingabe des Modells wird mit Hilfe von Save aus dem File Menu die Modelldatei gespeichert.

Schritt 3: Überprüfung der Syntax des Modells

Nach Eingabe der Modells in den Modelleditors kann die korrekte Syntax des Modells überprüft werden. Wenn MPL einen Fehler findet, so wird dieser im Error Message Fenster mit Hinweis auf die fehlerhafte Zeile und einer Problemerklärung angezeigt. Der Kursor zeigt automatisch auf die fehlerhafte Stelle und hebt das passende Wort hervor.

Zur Überprüfung der Syntax, wählt man Check Syntax aus dem Run Menu. Sind keine Syntaxfehler vorhanden, so bestätigt MPL die syntaktische Korrektheit des Modells. Im Falle von Syntaxfehler werden diese von MPL im Error Message Fenster angezeigt.

Sind bei der Eingabe des bäckereiproblems keine Fehler aufgetreten (Herzlichen Glückwunsch!), so mag es an dieser Stelle vielleicht doch sinnvoll sein, zu sehen, wie diese Fehlermeldungen angezeigt werden. Deshalb wollen wir einmal einen Fehler künstlich produzieren und schauen, wie MPL uns bei der Korrektur des Fehlers hilft.

  1. Dazu entfernen wir im Modelleditor das Semikolon am Ende der ersten Nebenbedingung:

  2.     SUBJECT TO
    
            1/10 Sun + 1/5 Moon <= 10 * 140    ! note the missing semicolon
    
            Sun  <= 8000;
            Moon <= 5000;
          
  3. Nun wählen wir Check Syntax im Run Menu zur Überprüfung der Syntax. MPL prüft Zeile für Zeile das Modell und entdeckt das fehlende Semikolon bei der Überprüfung der zweiten Nebenbedingung und weist die folgende Fehlermeldung aus:

  4. Das Error-Message Fenster

  5. Durch Drücken der OK Taste gelangt man wieder in den Modelleditor; der Kursor wird automatisch dort positioniert, wo der Syntaxfehler festgestellt wurde, im vorliegenden Falle also beim `<=' in der zweiten Nebenbedingung.

  6. Fügen wir das Semikolon wieder zur ersten Zeile hinzu und führen einen erneuten Syntaxtest durch, so bestätigt MPL die syntaktische Fehlerfreiheit des Modells.

Schritt 4: Lösung des Problems

Nachdem nun das Modell vollständig eingegeben wurde, soll das durch 'Bakery2.mpl' kodierte Problem gelöst werden, was in MPL die folgenden Arbeitsschritte auslöst: Überprüfung der Syntax, Überführung des Modells in den Speicher und Übergabe an den Solver, Abarbeitung des mathematischen Lösungsalgorithmus des Solvers, Extraktion der Lösung und Erzeugung des Lösungsdatei. Sobald das Solve Kommando aus dem Menu gewählt wurde, beginnt die Abarbeitung dieser Schritte und entsprechende Log-Meldungen werden ausgewiesen. Dazu ist lediglich folgendes zu tun:

  1. Wähle Solve CPLEX aus dem Run Menu bzw. drücke die Run Solve Taste in der Symbolleiste.

  2. Während der mathematische Lösungsalgorithmus aktiv ist, ist das Status Fenster sichtbar und liefert ständig Informationen über den Lösungsverlauf.

Das Status Fenster für das Bakery2 Modell

Sofern kein Syntaxfehler vorliegt oder sonstige Probleme auftraten, wird sich MPL mit der Meldung "Optimal Solution Found" zurückmelden. Bei Identifizierung eines Syntaxfehlers ist so vorzugehen, wie im vorigen Abschnitt beschrieben.

Schritt 5: Visualisierung und Analyse der Lösung

Nachdem das die optimale Lösung des Problems berechnet wurde, erzeugt MPL eine Standardlösungsdatei, die wichtige Informationen über die Lösung enthält, u.a. den optimalen Wert der Zielfunktion, die Werte und reduzierten Kosten der Variablen sowie die Schlupfvariablen bzw. Schattenpreise der Nebenbedingungen. Die Lösungsdatei übernimmt den Namen der Modelldatei und versieht diese mit der Ergänzung '.sol'. In unserem Beispiel wird also die Lösungsdatei 'Bakery2.sol' erzeugt.

Die Lösungsdatei kann im View Fenster durch Drücken der View Taste im unteren Bereich des Status Fensters angezeigt werden.

View Fenster mit der Bakery2.sol Lösungsdatei

Das View Fenster hält die Lösung im Speicher und erlaubt bequem und leicht, die Lösung in allen Details anzuschauen. Nachstehend ist die vollständige Lösungsdatei zu sehen:

     MPL Modeling System   -   Copyright (c) 1988-1999, Maximal Software, Inc.
  --------------------------------------------------------------------------------

  MODEL STATISTICS

  Problem name:       BetterBreadBakery

  Filename:           Bakery2.mpl
  Date:               April 2, 1998
  Time:               17:29
  Parsing time:       0.04 sec

  Solver:             CPLEX
  Objective value:    506.666666667
  Iterations:         3
  Solution time:      0.14 sec

  Constraints:        3
  Variables:          2
  Nonzeros:           4
  Density:            67 %


  SOLUTION RESULT

    Optimal solution found

      MAX Profit           =        506.6667



  DECISION VARAIBLES


    PLAIN VARIABLES

      Variable Name            Activity     Reduced Cost
    ------------------------------------------------------
      Sun                    8000.0000          0.0000
      Moon                   3000.0000          0.0000
    ------------------------------------------------------



  CONSTRAINTS


  PLAIN CONSTRAINTS

      Constraint Name             Slack     Shadow Price
    ------------------------------------------------------
      c1                        0.0000         -0.4000
      c2                        0.0000         -0.0100
      c3                     2000.0000          0.0000
    ------------------------------------------------------

  END
 

Der erste Teil der Lösungsdatei enthält diverse statistische Daten des Problems, so z.b. den Dateinamen, Datum und Zeit, wann das Problem gelöst wurde, welcher Solver verwendet wurde, den Wert der Zielfunktion und die Größe des Problems.

Der nächste Abschnitt der Lösungsdatei enthält die eigentliche Lösung. Hier ist ersichtlich, ob eine optimale Lösung bestimmt wurde, oder das Problem unbeschränkt oder unzulässig ist. Ausgewiesen wird zudem der Name und der optimale Wert der Zielfunktion. In unserem Fall beträgt der Gewinn der bäckerei $506 pro Tag.

Im Abschnitt DECISION VARIABLE zeigt die Liste der Variablen unsere Modellvariablen Sun und Moon. Die Sun Variable schlägt vor, jeden Tag 8000 Laib Brot zu backen; dies entspricht gerade der Mischkapazität für dieses Brot. Für das Moon Brot sollen dagegen nur täglich 3000 Laib Brot gebacken werden; dies ist weniger als die Mischkapazität.

Im Abschnitt CONSTRAINTS der Lösungsdatei finden wir die Lösungsinformationen zu den Nebenbedingungen. Unser Modell enthielt drei Nebenbedingungen: eine für die Öfen der Backabteilung und zwei für die Mischabteilung. Der Wert Null der Schlupfvariable für die erste Nebenbedingung impliziert, dass die Öfen der Backabteilung bei voller Kapazität backen. In gleicher Weise sehen wir, dass die Mischer für das Sunshine Brot bei voller Kapazität arbeiten, während beim Moonlight Brot noch ein Schlupf bzw. eine Kapazität von 2000 Laib Brot ungenutzt ist.

Da die Kapazität der Öfen der Backabteilung von beiden Broten in Anspruch genommen wird, entscheidet der spezifische Gewinnbeitrag pro Kapazität Backbleck, dass das Sunshine Brot mit voller Kapazität gebacken wird und die restliche Kapazität zum Backen des Moonlight Brotes genutzt wird.


Back To Top | Maximal Home Page | Overview | Previous Page | Next Page