32
05.07.22 LPL-Einführung 1 kommune.lpl kommune.lpl Eine Einführung in LPL A LP-Language

02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

Embed Size (px)

Citation preview

Page 1: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 1

kommune.lplkommune.lpl

Eine Einführung in LPLA LP-Language

Page 2: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 2

ProjektzieleProjektziele

Erstellung eines LPL-Programmes.Erklärung der wesentlichen

Elemente.Erklärung der einzelnen Schritte.

Page 3: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 3

Grundelemente des ProgrammsGrundelemente des Programms

MODELSETPARAMETERVARIABLECONSTRAINTMAXIMIZE oder MINIMZEEND

Page 4: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 4

MODEL-SektionMODEL-Sektion

MODEL Kommune;

Ein Kommentar kann eingefügt werden, indem er in (*Text*) hinter dem Semikolon eingefügt wird.

MODEL kommune; (*Beispiel*)

Page 5: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 5

SET-SektionSET-Sektion

SETIn dieser Sektion werden die Indexmengen definiert, und es können sofort die Werte zugeordnet werden.

i = /1 2 3/;j = /1:3/;

Page 6: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 6

Besonderheiten der SET-DefinitionBesonderheiten der SET-Definition

ALIAS– Der Index wird intern als Zahl verarbeitet. Da er als

Zahlenwert wenig aussagekräftig ist, kann man einen sog. ALIAS-Name vergeben, der hinter dem Index durch Punkt getrennt angefügt wird:

– Index.Alias Kommentar kann wieder hinter dem Semikolon in

(* Kommentar *) eingefügt werden.– i = / 1.alias1 2.alias2 3.alias3 /; (* Kommentar *)

Beispiel:– j = / 1.K1 2.K2 3.K3 /; (* Kommunen *)– i = / 1.ZU 2.BA 3.HI /; (* Pflanzsorten *)

Page 7: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 7

PARAMETER-SektionPARAMETER-Sektion

In dieser Sektion werden alle Daten symbolisch definiert. Es können durch die „= Zuweisung“ unmittelbar folgend die Datenwerte zugewiesen werden.

Page 8: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 8

PARAMETER-Definition 1PARAMETER-Definition 1

Syntax:– name1 = wert1; (* Einzelwert *)– name2 {Indexmenge} = [wert1 wert2 .. ];

Mehrfachindizierte Parameter– name{i-menge1,j-menge2} =

Wertzuweisung;

Page 9: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 9

PARAMETER-Definition 2PARAMETER-Definition 2

Wertzuweisung:name {i,j} =

/: 1 2 3 :1 w11 w12 w132 w21 w22 w233 w31 w32 w33/; (* Text *)

Falls der Name nicht aussagekräftig genug ist, kann man einen (* Kommentar *) anfügen.

Page 10: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 10

PARAMETER-Definition 3PARAMETER-Definition 3

In einem Vektor oder einer Matrix können Werte durch ihren sog. "Default" ersetzt werden: "."

Für Untergrenzen: 0Für Obergrenzen: ∞

Page 11: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 11

PARAMETER gesamtPARAMETER gesamtland {j} = [ 400 600 300];untergrenze {i,j} =/: 1 2 3 :1 . 50 . 2 . . 603 75 . . /;obergrenze {i,j} =/: 1 2 3 :1 . 100 100 2 . 250 1203 . . . /;wasser {j} = [ 900 800 375 ];quote {i} = [ 600 500 325 ]; faktor {j} = [ 1 1.05 1.1 ];ertrag {i} = [ 400 290 150 ];

Page 12: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 12

VARIABLE-SektionVARIABLE-Sektion

In dieser Sektion werden die Variablen definiert.

Gleichzeitig kann man zwischen kontinuierlichen und ganzzahligen Variablen unterscheiden.

Schließlich kann man sinnvolle Namen konstruieren.

Page 13: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 13

VARIABLE 1VARIABLE 1

Syntax:– name1; (* Einzelvariable *)– name2 {i}; (* Einfach indizierte V. *)– name3 {i,j}; (* Mehrfach indizierte V. *)

Page 14: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 14

VARIABLE 2VARIABLE 2Es ist sinnvoll, den Variablen

mnemotechnische Namen zu geben.Die Namen können laut LPL-Syntax

fast beliebig lang sein; sie müssen mit einem Buchstaben beginnen.

Wichtig: Der anschließende Optimierer XA unterscheidet nur Namen der Länge mit 8 Zeichen!

Page 15: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 15

VARIABLE 3VARIABLE 3

Will man eine ganzzahlige Variable definieren, so wird INTEGER und das Werteintervall hinzugefügt:

var {j} INTEGER [0,100];

0 ≤ var ≤ 100 → ganzzahlige Variable.

Page 16: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 16

VARIABLE-Definition 1VARIABLE-Definition 1 Der Name der Variablen wird durch einen String

nach der Definition und vor dem Semikolon gebildet:– variablenname 'string';

Ein String 'string" = 'za1a2' besteht aus:– z = eine Zahl, die angibt, wieviele der ersten z

Buchstaben des Variablennamens verwendet werden.

– a1 und a2 sind die ALIAS der Indizes 1 und 2 ersetzt.

Page 17: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 17

VARIABLE-Definition 2VARIABLE-Definition 2

Die Variablen des Beispiels:– anbau {i,j};– Jetzt würden i bzw. j durch die Indizes der

Mengen i und j ersetzt. Unter Benutzung der ALIAS:

– anbau {i,j} '4a1a2';– Jetzt würden i bzw. j durch die ALIAS der

Mengen i und j ersetzt:– anbaZUK1 Anbau von Zucker in Komm. K1

Page 18: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 18

CONSTRAINT-SektionCONSTRAINT-Sektion

Dieser Teil enthält die Nebenbedingungen des Modells und die Definition der Zielfunktion.

Nebenbedingung:– name: funktional = rechte Seite;

Zielfunktion:– zielname: funktional;

Page 19: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 19

CONSTRAINT-Definition: nameCONSTRAINT-Definition: nameEinzelname: name:einfach indizierter Name: name {i}:mehrfach indiz. Name: name {i,j}:bedingter Name:

name {i | log. Beding.}:– log. Bedingung: i<=10; i>4: i<>5;– name {i,j | name2} nur falls name2

ungleich dem Default-Wert

Page 20: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 20

CONSTRAINT: name-KonstruktionCONSTRAINT: name-Konstruktion

Der Namen einer Bedingung kann analog zum Variablennamen durch einen String unter Nutzung der ALIAS konstruiert werden:

nebenbedname {i} '6a1':

ergibt die Zeile: nebenbZU

Page 21: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 21

Beispiele von NB-NamenBeispiele von NB-Namen

nebenbedingung:flaeche {i}:lowerbounds {i,j | untergrenze}:gewinn:

Page 22: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 22

CONSTRAINT-Definition: CONSTRAINT-Definition: funktionalfunktionalEin funktional ist ein nach den

Regeln der Arithmetik aufgebauter Ausdruck.

Operatoren: +, -, *, SUM {i}Indizes sind in eckige Klammern zu

setzen, wenn sie keine Mengen sind.

Page 23: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 23

Beispiele für FunktionaleBeispiele für Funktionale

lbound {i,j}: anbau [i,j]>=ugrenze [i,j];flaeche{i}: SUM {i} anbau [i,j]<=land [j];kont{j}: SUM {i} verbrauch [i]*anbau [i,j]

<= wasser [j];gewinn: SUM {i,j} ertrag [i]*anbau [i,j];

Page 24: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 24

Alternative FormulierungenAlternative Formulierungen lbound {i,j}: anbau[i,j] >= ugrenze[i,j];

lbound {i,j}: anbau >= ugrenze; flaeche {j}: SUM {i} anbau <= land;

flaeche {i}: SUM {i} anbau[i,j] <= land [j]; kont {j}: SUM {i} verbrauch[i] * anbau[i,j] <=

wasser[j];kont {j}: SUM {i} verbrauch * anbau <= wasser;

Jedoch Vorsicht: Die Bindung zu den Mengen muss eindeutig sein!

Page 25: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 25

ZielfunktionZielfunktion

Die Zielfunktion ist ein Funktional ohne rechte Seite:– gewinn: SUM {i,j} ertrag * anbau;

Die Optimierungsrichtung wird durch MAXIMIZE bzw. MINIMIZE bestimmt:– MAXIMIZE gewinn;

Page 26: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 26

END-SektionEND-Sektion

Jedes Programm wird beschlossen durch:– END (ohne Seminkolon!)

Page 27: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 27

Lösung mit LPL und XALösung mit LPL und XA

Wenn bei der Compilierung kein Fehler auftritt, wird automatisch XA aufgerufen und das entsprechende LP-Modell gelöst.

Es gibt zwei Lösungsdarstellungen:1. SOL-File = Lösung in Kurzform2. PRN-File = Ausführliche

Lösungsdarstellung

Page 28: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 28

Auszug aus dem SOL-FileAuszug aus dem SOL-File "MPSXNAME","$$$ ","Mon May 05 08:44:02 2003", "MAX" 11, 9,256208.6908, 10

"anbaZUK1", 214.05680, 400.00000, 0.00000, "IN" , "anbaBAK1", 290.00000,"(NB) ", -0.00000

"anbaZUK2", 50.00000, 400.00000, -135.15152, "LOWER", "(NB) ", -0.00000, "(RS) ", 535.15152

"anbaBAK3", 120.00000, 290.00000, 67.57576, "UPPER", "(RS) ", 222.42424, "(NB) ", -0.00000

Page 29: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 29

PRN-File Sektion StatistikPRN-File Sektion StatistikSTATISTICS - FILE: $$$ TITLE: MPSXNAME Mon May 05

08:44:02 2003 xa VERSION 10.0 Intel Extended-DOS x86 USABLE MEMORY

7,605K BYTES VARIABLES 9 MAXIMUM 50,000 3 LOWER, 0 FIXED, 4 UPPER, 0 FREE CONSTRAINTS 11 MAXIMUM 10,000 0 GE, 2 EQ, 9 LE, 0 NULL/FREE, 0 RANGED. CAPACITY USED BY CATEGORY- 0.0% VARIABLE, 0.1% CONSTRAINT, 48 NON-ZEROS, WORK

778,338 MAXIMIZATION. MPS FORMAT- OBJECTIVE: gew RHS: ..rhs RANGE: ? BOUND: Bounds

Page 30: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 30

PRN-File Sektion LösungPRN-File Sektion Lösung

O P T I M A L S O L U T I O N ---> OBJECTIVE 256208.6908

SOLVE TIME 00:00:00 ITER 10 MEMORY USED 0.0%

Page 31: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 31

PRN-File Sektion VariablenPRN-File Sektion VariablenFile: $$$ Mon May 05 08:44:02 2003 Page 1SOLUTION (Maximized): 256208.6908 MPSXNAME-------------------------------------------------------------------------------| Variable | Activity | Cost | Variable | Activity | Cost |-------------------------------------------------------------------------------I anbaZUK1 214.05680 400.00000 | anbaZUK2 50.00000 400.00000 || REDUCED COST 0.00000 | REDUCED COST -135.15152 |-------------------------------------------------------------------------------

Page 32: 02.06.2015LPL-Einführung1 kommune.lpl Eine Einführung in LPL A LP-Language

26.04.23 LPL-Einführung 32

PRN-File Sektion ConstraintsPRN-File Sektion Constraints File: $$$ Mon May 05 08:44:02 2003 Page 2 CONSTRAINTS: MPSXNAME --------------------------------------------------------------------------- |Constraint| Activity | RHS |Constraint| Activity | RHS | --------------------------------------------------------------------------- I flaechK1 289.05680 < 400.00000 I flaechK2 433.58520 < 600.00000 | | DUAL VALUE 0.00000 | DUAL VALUE 0.00000 | ---------------------------------------------------------------------------