Vous êtes sur la page 1sur 36

Introduction au langage de mod elisation GNU MathProg (GLPK)

Romain Apparigliato

GDF-Suez, Direction de la Recherche et de lInnovation P ole Simulation et Optimisation 361 av. du Pr esident Wilson, 93211 St Denis La Plaine romain.apparigliato@polytechnique.edu

Table des mati` eres


1 Pr esentation 1.1 GNU Linear Programming Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 GNU MathProg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 T el echargement et Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Informations pr eliminaires 2.1 Motivations . . . . . . . . . 2.2 Principe g en eral . . . . . . 2.3 Structuration . . . . . . . . 2.4 Compilation . . . . . . . . . 2.4.1 Commandes de base 2.4.2 Options . . . . . . . 3 R` egles de codage du mod` ele 3.1 Noms symboliques . . . . . 3.2 Les nombres . . . . . . . . . 3.3 Les cha nes de caract` eres . . 3.4 Mots cl es . . . . . . . . . . 3.5 D elimiteurs . . . . . . . . . 3.6 Commentaires . . . . . . . . 4 Expressions 4.1 Expressions 4.2 Expressions 4.3 Expressions 4.4 Expressions 4.5 Expressions 4.6 Expressions 3 3 3 4 5 5 5 5 7 7 7 8 8 8 8 9 9 9 11 11 14 15 18 20 22 24 24 25 26 26 27 27 28 28 29 30 32 32 34

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

num eriques . symboliques . sur les indices ensemblistes . logiques . . . lin eaires . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

5 Objets de mod elisation 5.1 Set : D enition des ensembles . . . . . . . . . . . . . . . . 5.2 Parameter : D eclaration ou calcul de param` etres . . . . . 5.3 Variable : D enition des variables du probl` eme . . . . . . 5.4 Constraint : D enition des contraintes du probl` eme . . . . 5.5 Objective : D enition de la fonction objectif du probl` eme 5.6 Solve : R esolution . . . . . . . . . . . . . . . . . . . . . . . 5.7 Check : V erication des donn ees . . . . . . . . . . . . . . 5.8 Display : Achage . . . . . . . . . . . . . . . . . . . . . . 5.9 Printf : Achage format e . . . . . . . . . . . . . . . . . . 5.10 For : R ep etition dactions . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

6 Donn ees 6.1 Ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Param` etres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

PRESENTATION

Pr esentation

i\j Le GNU Linear Programming Kit (GLPK) est un outil performant pour r esoudre des probl` emes doptimisation lin eaire de variables continues ou mixtes (enti` eres et continues). Ce kit est compos e dun langage de mod elisation GNU MathProg et dune librairie de fonctions C (GLPK) utilisant le solveur Glpsol. Lextr eme avantage de ce kit est d etre en libre acc` es et relativement facile ` a installer et ` a utiliser. Ce document est principalement consacr e` a la pr esentation du langage de mod elisation et a pour objectif den montrer les bases pour pouvoir mod eliser, r esoudre un probl` eme doptimisation et etre capable dutiliser dautres outils plus puissants (AMPL,...) au langage tr` es proche.

1.1

GNU Linear Programming Kit

GLPK est une librairie de fonctions C qui utilisent les principales m ethodes de r esolution de probl` eme doptimisation (simplex, branch and bound, m ethodes de points int erieurs primaldual, . . . ) ainsi que tous les outils n ecessaires aux cr eations dobjets, ` a lappel des solveurs, ` a lachage des r esultats, . . . GLPK nest pas un programme puisquil ne peut pas etre lanc e et ne poss` ede pas de main(). Le programme appelant cette librairie doit donc etre con cu et utiliser les fonctions ad equates. Tout le descriptif des fonctions disponibles est inscrit dans le manuel dutilisation fournit lors du t el echargement. GLPK a un solveur par d efaut, glpsol, qui r esout le probl` eme g en er e.

1.2

GNU MathProg

Lutilisation directe des routines GLPK, tout comme lutilisation dun solveur comme CPLEX, EXPRESS, MATLAB, . . . , nest pas forc ement evidente. Cela n ecessite davoir des bases en programmation, de ma triser les outils ` a utiliser et egalement deectuer des transformations pr ealables ` a la formulation du probl` eme. Pour rem edier ` a ce probl` eme, il existe des langages de mod elisation. Avec un tel outil, lutilisateur na plus qu` a cr eer un chier de donn ees, d enir son probl` eme avec une ecriture tr` es proche de l ecriture math ematique et le langage de mod elisation se charge de la transformation du probl` eme et du lien au solveur. Ainsi, avec quelques bases de programmation, on peut facilement mod eliser le probl` eme et le r esoudre. Le langage de mod elisation GNU MathProg est un sous-ensemble du langage de mod elisation AMPL. AMPL est un langage de mod elisation tr` es puissant que lon peut coupler avec divers solveurs comme CPLEX, EXPRESS, MOSEK,. . . . La limitation aux probl` emes lin eaires (PL) de GLPK etant due au solveur utilis e, on se rend compte quAMPL, coupl e au solveur ad equat, peut etre facilement utilis e` a des probl` emes plus complexes (optimisation non lin eaire, optimisation conique, . . . ). Pour de plus amples informations sur AMPL, un site web est disponible (http: //www.ampl.com) sur lequel on peut t el echarger une version etudiante gratuite (coupl ee ` a une version all eg ee de CPLEX) qui ne permet de r esoudre que des probl` emes de moins de 300

Introduction ` a GLPK

Page 3

1.3

T el echargement et Installation

PRESENTATION

variables et 300 contraintes. Cependant, une bonne connaissance dAMPL permet dutiliser facilement GLPK et vice-versa (ainsi que bien dautres langages de mod elisation).

1.3

T el echargement et Installation

GLPK en version UNIX est disponible sur le site http://www.gnu.org/software/glpk/. Lors du t el echargement est fournie une liste de documents donc une doc de r ef erence ` a partir de laquelle est construit cette introduction. Une version WINDOWS est egalement disponible ` a ladresse http://gnuwin32.sourceforge.net/packages/glpk.htm.

Introduction ` a GLPK

Page 4

INFORMATIONS PRELIMINAIRES

2
2.1

Informations pr eliminaires
Motivations

Lobjectif de ces cours est de parvenir a ` mod eliser des probl` emes doptimisation lin eaire purs ou mixtes (avec des variables enti` eres) de la forme :

min(max)
x x

c1 x1 + c2 x2 + . . . + cn xn
1 2

s.c. a11 x1 + a12 x2 + . . . + a1n xn u1 a21 x1 + a22 x2 + . . . + a2n xn u2 .........


m

am1 x1 + am2 x2 + . . . + amn xn um

Les bornes i (resp. ui ) peuvent valoir + (resp ). Dans le cas dun probl` eme lin eaire pur, les variables xi sont r eelles. Dans le cas MIP, certains xi peuvent etre enti` eres. Les quantit es ci , aij , i , ui sont des donn ees fournies par lutilisateur.

2.2

Principe g en eral

La construction dun mod` ele est eectu ee ` a partir de briques el ementaires que lon appelle objets de mod elisation. Pour la phase de construction, il en existe 5 types : parameter, set, variable, Constraint et Objective. Les objets Parameter et Set permettent de d enir toutes les donn ees du probl` eme, Variable de d enir toutes les variables du probl` eme, Constraint de d enir les contraintes du probl` eme et enn Objective la fonction objectif du probl` eme. Chaque brique est compos ee dexpressions, construites selon des r` egles que lon d enira plus tard. Lensemble des possibilit es de construction est assez large du moment que le probl` eme demeure lin eaire.

2.3

Structuration

La mod elisation dun probl` eme doptimisation se divise en deux parties : La section Mod` ele contient toutes les d eclarations, les param` etres calculables et les d enitions des contraintes et de lobjectif. La section Donn ees contient toutes les donn ees xes (valeurs des param` etres, du contenu des ensembles). Les deux sections peuvent etre d eclar ees :

Introduction ` a GLPK

Page 5

2.3

Structuration

INFORMATIONS PRELIMINAIRES

Dans un m eme chier compos e comme suit :

Il est obligatoire de s eparer les deux parties en pla cant la partie de donn ees entre data; et end;. Le chier devra etre sauvegard e avec lextension .mod. Dans 2 chiers s epar es :

Dans ce cas, le mod` ele doit etre sauv e avec lextension .mod et les donn ees avec lextension .dat. Le chier mod joue le r ole dun programme principal en programmation. Du coup, lorsque lon d enit une quantit e dans le chier dat, il faut bien signaler au programme principal lexistence de cette donn ee. Il faut donc d eclarer dans le mod toutes les quantit es d enies dans le dat. En pratique, il est fortement conseill e de s eparer limpl ementation mod` ele et lattribution des donn ees en 2 chiers distincts an davoir un mod` ele g en erique, pouvant fonctionner pour tout jeu de donn ees coh erent.

Exemple : On peut d enir une constante T = 5 dans le chier dat avec : param T:=5; Il faut d eclarer cette constante dans le chier mod en incluant la ligne : param T;

Introduction ` a GLPK

Page 6

2.4

Compilation

INFORMATIONS PRELIMINAIRES

2.4
2.4.1

Compilation
Commandes de base

Supposons dans un premier temps que tout est incorpor e dans un chier modele.mod. Dans une fen etre de commande, on se place dans le r epertoire o` u est situ e le chier. Lappel au solveur est eectu e` a laide de la commande : glpsol --model modele.mod Dans le cas g en eral (et conseill e !) o` u les donn ees et le mod` ele sont s epar es en 2 chiers modele.mod et donnees.dat, lex ecution seectue avec : glpsol --model modele.mod --data donnees.dat 2.4.2 Options

En fait, la formulation g en erale de lex ecution est : glpsol --options --model modele.mod --data donnees.dat o` u --options est une liste doptions particuli` eres. La liste peut etre obtenue facilement ` a laide de la commande : glpsol --help Ces options peuvent etre soient des options g en erales soit des options sp eciques aux algorithmes de r esolution. Les principales options g en erales sont :
Forme g en erale --display lename --output lename --tmlim nnn --memlim nnn --check --simplex --interior --glp (resp. --wglp lename ) --mps (resp. --wmps lename ) --freemps (resp. --wfreemps lename ) --cpxlp (resp. --wcpxlp lename ) --math --wtxt lename R ole Ecrit tous les achages du mod` ele dans un chier lename Ecrit la solution du probl` eme dans le chier lename Limite lex ecution a ` nnn secondes Limite la taille m emoire disponible a ` nnn Mo Ne r esoud pas le probl` eme, v erie juste la coh erence du mod` ele et des donn ees Utilise la m ethode du Simplexe (d efaut) Utilise la m ethode des Points Int erieurs Lire (resp. ecrire dans lename ) le probl` eme LP/MIP dans le format GNU LP Lire (resp. ecrire dans lename ) le probl` eme LP/MIP dans le format MPS Lire (resp. ecrire dans lename ) le probl` eme LP/MIP dans le format free MPS Lire (resp. ecrire dans lename ) le probl` eme LP/MIP dans le format CPLEX Lire le probl` eme LP/MIP dans le format GNU MathProg Ecrire le probl` eme dans lename dans un format plain

Tab. 1 Principales options disponibles pour la compilation de glpsol Dautres sont disponibles pour la r esolution avec le simplexe et pour la r esolution MIP (cf. glpsol --help).

Introduction ` a GLPK

Page 7

` ` REGLES DE CODAGE DU MODELE

R` egles de codage du mod` ele

La description du mod` ele est cod ee en utilisant lensemble des caract` eres ASCII : caract` eres alphab etiques : A B C . . . Z a b c . . . z (case sensitive) ; caract` eres num eriques : 0 1 2 . . . 9 ; caract` eres sp eciaux : ! # & ( ) + , . / : ; < > = [ ] { | } Les espaces ne sont eectifs qu` a lint erieur des commentaires et des cha nes de caract` eres. Ils peuvent etre utilis es librement dans le mod` ele pour am eliorer la lisibilit e du code. Les di erents outils syntaxiques autoris es pour coder sont :

3.1

Noms symboliques

Les noms symboliques sont constitu es de caract` eres alphab etiques et num eriques, le premier etant forc ement alphab etique. Tous les noms symboliques doivent etre uniques. Ils sont choisis par lutilisateur et utilis es pour identier des objets : param` etres, variables, contraintes, objectif, ensembles. Exemples : Nombre_Pas_de_Temps, param_J1, _P123_abc_321, ...

3.2

Les nombres

Les nombres sont ecrits de la forme xx(Esyy ), o` u xx est un nombre r eel avec eventuellement une partie d ecimale s epar ee par un point, s le signe + ou , yy un exposant entier. La lettre E peut aussi etre ecrite e. Les nombres sont evidemment utilis es pour repr esenter des quantit es num eriques et faire des op erations. Exemples : 1234, 3.1415,56.E+5,.784,123.456e-7,...

3.3

Les cha nes de caract` eres

Les cha nes de carat` eres sont utilis ees pour repr esenter des quantit es symboliques et pour eectuer des achages. La cha ne de caract` eres est en fait une s equence de caract` eres enferm es par ou (les 2 formes sont equivalentes). Pour introduire ces m emes caract` eres dans une cha ne de

Introduction ` a GLPK

Page 8

3.4

Mots cl es

` ` REGLES DE CODAGE DU MODELE

caract` eres, il faut les doubler. Exemples : Ceci est un super cours, "Ceci est un super cours", Cest un super cours, "Elle dit: ""Non"" ", 1+2=3, ...

3.4

Mots cl es

Les mots cl es sont des s equences de caract` eres alphab etiques (et eventuellement num eriques) qui sont reconnus directement et ont un sens pour GLPK. On peut distinguer 2 classes : les mots r eserv es, ayant une signication xe, qui ne peuvent pas etre utilis es pour d enir un nom symbolique et les mots non r eserv es qui peuvent l etre et qui sont reconnus selon le contexte. Les mots r eserv es sont : and by cross diff div else if in inter less mod not or symdiff then union within

Les mots non r eserv es seront pr esent es dans les sections suivantes.

3.5

D elimiteurs

Les d elimiteurs sont des caract` eres sp eciaux simples ou des s equences de 2 caract` eres sp eciaux (dans ce cas, il ne doit pas y avoir despace entre les 2) : + * / ** ^ & < <= = == >= > <> != ! && || . , : ; := .. ( ) [ ] { }

Chaque d elimiteur a une d enition xe qui sera pr esent ee lors de lutilisation de chacun.

3.6

Commentaires

Il est possible dintroduire dans le mod` ele des commentaires qui seront ignor es par GLPK et qui permettent de rendre le code plus lisible ou plus compr ehensible. Les commentaires peuvent etre sur une ligne et dans ce cas commencent apr` es le caract` ere sp ecial # et nissent ` a la n de la ligne. Ils peuvent etre sur plusieurs lignes et sont inscrits entre /* et */. Nimporte quoi peut etre inscrit dans ces commentaires. Exemples :

Introduction ` a GLPK

Page 9

3.6

Commentaires

` ` REGLES DE CODAGE DU MODELE

var a := 4; #D efinition de la variable a var b := 5; /* D efinition de la variable b */

Introduction ` a GLPK

Page 10

EXPRESSIONS

Expressions

Les expressions servent ` a obtenir des r esultats utiles ` a la d enition dun objet de mod elisation. La forme g en erale dune expression est : expression primaire operateur expression primaire . . . expression primaire On distingue plusieurs types dexpressions :

4.1

Expressions num eriques

Une expression num erique est une r` egle pour d enir ou calculer une valeur num erique. Elle est g en eralement constitu ee de 2 ou plusieurs expressions num eriques primaires, utilisant des op erateurs arithm etiques. Exemples : 2*j sum{j in 1..5} a[j]*x[j] + 5*c Voici les di erents types dexpressions primaires : Nombre : Un nombre d eni comme dans (3.2). Exemple : 2*0.5 Constantes : On peut d enir des constantes repr esent ees par des noms symboliques et leur associer une valeur num erique. Exemple : param j:=3; 2*j existe et vaut 6 Param` etres multi-dimensionnels : On peut d enir des param` etres ou des variables repr esent es par des noms symboliques ` a multiples dimensions. La syntaxe g en erale de ai1 ,i2 ,i3 ,...,in est : a[i1 , i2 , i3 , . . . , in ]. Chaque indice i1 , i2 , . . . , in peut etre une expression num erique ou une expression symbolique. Il faut etre particuli` erement vigilant aux tailles. Exemples :

Introduction ` a GLPK

Page 11

4.1

Expressions num eriques

EXPRESSIONS

param A := 1 1 2 3 3 8 4 6 ; # A[3]*3 existe et vaut 24 param B : 1 2 3 1 2 5 4 2 3 4 5 3 4 9 9 4 := 5 3 2;

# B[2,4]*B[1,3]*2 existe et vaut 3*4*2=24 param C : PAR TOU PAR 0 700 TOU 700 0 MAR 850 500 MAR := 850 500 0;

# C[PAR,TOU]+C[MAR,TOU] existe et vaut 700+500=1 200

Fonctions pr ed enies :

Fonction GLPK abs(x) atan(x) atan(y,x) ceil(x) cos(x) floor(x) exp(x) log(x) log10(x) max(x1,x2,...,xn) min(x1,x2,...,xn) round(x) round(x,n) sin(x) sqrt(x) trunc(x) trunc(x,n) Irand224() Uniform01() Uniform(a,b) Normal01() Normal(m,s)

R ole Valeur absolue arctan x(radians) arctan y/x(radians) Plus petit entier proche de x cos(x) Plus grand entier proche de x exp(x) log(x) log10 (x) Maximum des valeurs x1,x2,...,xn Minimum des valeurs x1,x2,...,xn Arrondit x ` a lentier le plus proche Arrondit x avec n d ecimales sin( x) x Tronque x a ` lentier le plus proche Tronque x avec n d ecimales Retourne un nombre pseudo-al eatoire dans [0, 224 ) selon une loi uniforme enti` ere Retourne un nombre pseudo-al eatoire dans [0, 1) selon une loi uniforme Retourne un nombre pseudo-al eatoire dans [a, b) selon une loi uniforme Loi normale avec moyenne nulle et variance 1 Loi normale avec moyenne m et variance s

Tab. 2 Liste des fonctions disponibles sous GLPK

Tous les arguments des fonctions pr e-d enies doivent etre des expressions num eriques. On

Introduction ` a GLPK

Page 12

4.1

Expressions num eriques

EXPRESSIONS

peut egalement cr eer sa propre fonction en d enissant une variable qui se calcule de la fa con souhait ee. Exemple : var fraction {x in X, y in Y} := x/y; On a d eni une fonction qui calcule la fraction x y par lappel fraction[x,y]. On verra ult erieurement comment d enir les ensembles X et Y .

Expressions it er ees : Il existe 4 op erateurs dit eration qui peuvent etre utilis es dans une expression num erique : Op erateur GLPK sum{ensemble } prod{ensemble } min{ensemble } max{ensemble } sommation : produit : min : max : R ole
(i1 ,i2 ,...,in ) x(i1 , . . . , in ) (i1 ,i2 ,...,in ) x(i1 , . . . , in )

min(i1 ,i2 ,...,in ) x(i1 , . . . , in ) max(i1 ,i2 ,...,in ) x(i1 , . . . , in )

Tab. 3 Liste des op erateurs dit eration disponibles dans GLPK Dans les {..} est indiqu e lensemble sur lequel lop eration seectue. La section(4.4) d ecrit tous les types densembles pouvant etre cr e es. Exemples : sum{i in 1..5} 2*i; // Retourne 2+4+6+8+10=30 sum{i in 1..J} log(x[i]); // Retourne log(x[1])+log(x[2])+...+log(x[J]) sum{i in 1..2, j in 1..2} x[i,j]; // Retourne x[1,1]+x[1,2]+x[2,1]+x[2,2]

Expressions conditionnelles : Il existe 2 syntaxes pour lexpression num erique conditionnelle :

if condition then solution1 else solution2 if condition then solution1 Cest la traduction du Si . . . alors . . . sinon. La condition est une expression logique (section 4.5) et les solution1 et solution2 sont des expressions num eriques. Dans lexpression compl` ete, la valeur de lexpression conditionnelle est solution1 si le test est vrai, sinon elle vaut solution2. De m eme avec la forme r eduite avec solution2 valant 0. Exemple : 2*(if x>1 then 3 else 2); // Cette expression vaut 6 si x>1 ou 4 si x<= 1

Introduction ` a GLPK

Page 13

4.2

Expressions symboliques

EXPRESSIONS

Les op erateurs arithm etiques suivants peuvent etre utilis es dans des expressions num eriques : Op erateur GLPK +x -x x+y x-y x less y x*y x/y x div y x mod y x ** y , x ^ y R ole Plus 1 : Eectue x + 1 Moins 1 : Eectue x 1 Addition Soustraction Di erence positive (si x < y alors 0 sinon x y ) Multiplication Division Quotient de la division exacte Reste de la division exacte Puissance

Tab. 4 Liste des op erateurs arithm etiques disponibles dans GLPK x et y sont des expressions num eriques primaires. Si lexpression inclue plus quun op erateur arithm etique, tous les op erateurs sont calcul es de la gauche vers la droite (sauf pour la puissance qui est calcul ee de la droite vers la gauche) selon la hi erarchie des op erations pr esent ee juste apr` es.

Voici la hi erarchie des op erations dans une expression num erique : Op eration Evaluation des fonctions (abs, log,...) Puissance (**,^) Plus 1, Moins 1 (+,-) Multiplication et division (*, /, div, mod) Op erations it er ees (sum, prod, min, max) Addition et soustraction (+,-,diff) Evaluation conditionnelle (if ... then ... else) Hi erarchie 1er 2eme 3eme 4eme 5eme 6eme 7eme

Tab. 5 Hi erarchie des op erations dans une expression num erique dans GLPK A noter que toute op eration entre parenth` eses est eectu ee en priorit e.

4.2

Expressions symboliques

Lexpression symbolique sert ` a eectuer des op erations sur les cha nes de caract` eres. Lexpression symbolique primaire peut etre une cha ne de caract` ere, un indice, une expression symbolique conditionnelle,. . . Il est accept e dutiliser une expression num erique en tant quexpression

Introduction ` a GLPK

Page 14

4.3

Expressions sur les indices

EXPRESSIONS

num erique. Dans ce cas, la valeur r esultante est automatiquement convertie en symbolique. Il nexiste quun seul op erateur symbolique dans GLPK, lop erateur de concat enation & : x&y o` u x et y sont des expressions symboliques. Lop erateur concat` ene les 2 op erandes (qui sont des cha nes de caract` eres) en une seule cha ne. Exemple : from & city[i] & to & city[j] La hi erarchie g en erale des op erations devient ainsi : Op eration Evaluation des op erations num eriques Concat enation Evaluation conditionnelle (if ... then ... else) Hi erarchie 1er 7eme 8eme 9eme

Tab. 6 Hi erarchie des op erations dans GLPK

4.3

Expressions sur les indices

Lexpression sur les indices est une construction qui permet dindiquer lensemble de d enition dune variable, dune contrainte ou sp ecier un ensemble notamment pour les op erateurs dit eration. Elle a 2 formes syntaxiques possibles :

{entry1 , entry2 , . . . , entrym } {entry1 , entry2 , . . . , entrym : predicat} o` u entryi est une expressions pr ecisant le domaine dappartenance de lindice i et predicat est une expression logique (section 4.5 ) qui sp ecie des conditions sur les indices. Lindice nest pas obligatoire sil nest pas utilis e dans la d enition de lobjet (comme dans le cas dune d eclaration). Le predicat est forc ement ` a la n mais peut d ependre de tous les indices. Exemple : sum{i in 1..3, j in 1..3 : i==j } x[i,j]; // Retourne x[1,1]+x[2,2]+x[3,3] sum{i in 1..3, j in 1..3 : i!=j && i!=1 } x[i,j]; // Retourne x[2,1]+x[2,3]+x[3,1]+x[3,2]

Introduction ` a GLPK

Page 15

4.3

Expressions sur les indices

EXPRESSIONS

Quelques r` egles : L ecriture de chaque entryi peut avoir une des 3 formes suivantes : t in S (t1 , t2 , . . . , tk ) in S S o` u t1 , t2 , . . . , tk sont des indices et S un ensemble quelconque (d eni en 4.4). Exemple : j in 1..5 (1,toto) in B var A{1..J} Evidemment, il faut bien faire attention aux dimensions : le nombre dindices doit etre le m eme que la dimension de lensemble S . Quand on ecrit une expression de la forme objet{i in S }, la variable i est une variable locale a lobjet. En dehors de cet objet, la variable i nexiste plus. Dautre part, elle est auto-d ` eclar ee et ne n ecessite pas une d eclaration g en erale comme pour tous les param` etres et toutes les variables. Exemple : prod{j in 1..3} x[j]; //Retourne x[1]*x[2]*x[3] j*2 // Erreur ` a la compilation. j nexiste pas. On ne peut pas prendre comme indice des noms de variables ou de param` etres d ej` a existants. Par contre, on peut utiliser dans di erents objets les m emes indices. Exemple : On peut mettre dans un m eme code les expressions suivantes sans aucune confusion. Chaque j nexiste que dans son objet prod et sum (les j sont donc distincts) : prod{j in 1..3:j!=2} x[j]; sum{j in 1..3:j!=1} x[j]; Supposons les 3 ensembles : A = {4, 7} B = {(1, Jan), (1, F ev ), (2, M ar)} C = {a, b, c} Si on consid` ere lexpression d enie en GLPK, {i in A, (j,k) in B, l in C}

Introduction ` a GLPK

Page 16

4.3

Expressions sur les indices

EXPRESSIONS

on peut la traduire algorithmiquement par : for all i A do for all (j, k ) B do for all l C do action; ce qui donne concr` etement la succession dactions : i=4 i=4 i=4 i=4 i=4 i=4 i=4 i=4 i=4 i=7 i=7 i=7 i=7 i=7 i=7 i=7 i=7 i=7 j j j j j j j j j j j j j j j j j j =1 =1 =1 =1 =1 =1 =2 =2 =2 =1 =1 =1 =1 =1 =1 =2 =2 =2 k = Jan k = Jan k = Jan k = F ev k = F ev k = F ev k = M ar k = M ar k = M ar k = Jan k = Jan k = Jan k = F ev k = F ev k = F ev k = M ar k = M ar k = M ar l = a : action l = b : action l = c : action l = a : action l = b : action l = c : action l = a : action l = b : action l = c : action l = a : action l = b : action l = c : action l = a : action l = b : action l = c : action l = a : action l = b : action l = c : action

Exemple : Si on suppose la variable p d enie par : var p{i in A, (j,k) in B, l in C}; on peut d enir lexpression num erique sum :
iA,(j,k)B,lC

(pijkl )2 en utilisant lop erateur dit eration

sum{i in A, (j,k) in B, l in C} p[i,j,k,l] ** 2

Dans une expression sur les indices, le nombre de composants du n-uplets r esultant est le m eme que le nombre de variables locales d eclar ees. Exemple : Supposons lexpression suivante : {i in A, (i-3,k) in B, l in C }

Introduction ` a GLPK

Page 17

4.4

Expressions ensemblistes

EXPRESSIONS

Les seules variables locales d eclar ees comme indices sont i, k et l. i 3 est une expression num erique. On peut traduire cette expression par lalgorithme :

for all i A do for all (j, k ) B and j = i 3 do for all l C do action; Le r esultat est : {(4, Jan, a), (4, Jan, b), (4, Jan, c), (4, F ev, a), (4, F ev, b), (4, F ev, c)}. On na donc pas un 4-uplets mais seulement un triplet.

Le predicat est une expression logique qui donne des conditions sur lensemble. Cette expression peut etre aussi complexe que lon souhaite, port ee sur les indices que lon souhaite mais doit forc ement etre situ ee en derni` ere position. Exemple : Supposons lexpression suivante : {i in A, (j,k) in B, l in C : i<=5 and k<>Mar} On peut traduire cette expression par lalgorithme :

for all i A do for all (j, k ) B and j = i 3 do for all l C do if i 5 and k = M ar then action; Le r esultat est : {(4, 1, Jan, a), (4, 1, Jan, b), (4, 1, Jan, c), (4, 1, F ev, a), (4, 1, F ev, b), (4, 1, F ev, c)}.

4.4

Expressions ensemblistes

Une expression ensembliste est une r` egle pour calculer un ensemble, cest ` a dire une collection de n-uplets o` u les composantes de ces n-uplets sont des quantit es num erique et/ou symbolique. Les di erents types dexpression ensembliste primaire sont des ensembles pouvant etre formul ees par :

Introduction ` a GLPK

Page 18

4.4

Expressions ensemblistes

EXPRESSIONS

Une formulation litt erale : Elle peut etre de deux formes selon les dimensions : {e1 , e2 , . . . , em } {(e11 , . . . , e1n ), (e21 , . . . , e2n ), . . . , (em1 , . . . , emn )} Tous les n-uplets doivent avoir la m eme dimension. Tous les ei ou eij peuvent etre des expressions num erique ou symbolique. Exemple : {(123,aaa), (i+1,bbb), (j-1,ccc)}

Ensembles indic es ou non : Lexpression primaire peut etre un ensemble simple (ex : I) ou le contenu dun ensemble ` a plusieurs dimensions (ex : S[i-1,j+1]).

Ensemble Arithm etique : Lexpression primaire correspondante peut etre ecrite sous les formes : t0 ..tf by t t0 ..tf o` u t0 , tf et t sont des expressions num eriques. La deuxi` eme expression est equivalente ` a la premi` ere avec t = 1. Lensemble r esultant est : {t0 , t0 + t , t0 + 2t , . . . , tf } Exemples : 1..5 cr ee lensemble {1, 2, 3, 4, 5}. 1..5 by 2 cr ee lensemble {1, 3, 5}.

Expression it er ee : On peut cr eer des ensembles ` a laide dop erations it er ees. Pour cela, on utilise la syntaxe : setof indexing expression integrand o` u indexing expression est un ensemble dindices indiquant le nombre de r ep etitions ` a effectuer et integrand est soit un nombre, soit une expression symbolique, soit une liste de nombres ou dexpressions symboliques s epar ee de virgules et enferm ees entre parenth` eses. Exemple : setof{i in 1..2, j in 1..3} (i,j+1) cr ee lensemble {(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4)}.

Expression conditionnelle : On peut avoir comme expression primaire une expression conditionnelle attribuant un ensemble ou un autre selon un test logique. La syntaxe est :

Introduction ` a GLPK

Page 19

4.5

Expressions logiques

EXPRESSIONS

if b then X else Y o` u X et Y sont des ensembles et b un test logique.

Les op erateurs ensemblistes disponibles sont les suivants : Formulation X X X X X union Y diff Y symdiff Y inter Y cross Y Fonction correspondante union X Y di erence X \ Y di erence sym etrique X Y intersection X Y produit cart esien X Y

Tab. 7 Op erateurs ensemblistes Les op erations sont eectu ees de la gauche vers la droite et le r esultat est forc ement un ensemble. La hi erarchie g en erale des op erations devient ainsi : Op eration Evaluation des op erations num eriques Evaluation des op erations symboliques Evaluation des ensembles it er es et arithm etiques Produit cart esien (cross) Intersection (inter) Union et dierence (union, diff, symdiff) Evaluation conditionnelle (if ... then ... else) Hi erarchie 1er 7eme 8eme 9eme 10eme 11eme 12eme 13eme 14eme

Tab. 8 Hi erarchie des op erations dans GLPK

4.5

Expressions logiques

Une expression logique est une r` egle pour v erier si un test est vrai ou faux. Les di erents types dexpression logique primaire peuvent etre formul ees ` a laide de : Expressions num eriques : Si lexpression primaire logique est une expression num erique, le r esultat est vrai si le r esultat est non nul et faux sinon.

Introduction ` a GLPK

Page 20

4.5

Expressions logiques

EXPRESSIONS

Expressions relationnelles : Les di erentes op erations relationnelles qui sont utilis ees dans des expressions logiques sont : Formulation x<y x <= y x = y , x == y x >= y x <> y ,x != y x in Y (x1 , . . . , xn ) in Y x not in Y, x !in Y (x1 , . . . , xn ) not in Y , (x1 , . . . , xn ) !in Y X within Y X not within Y, X !within Y Tab. 9 Tests logiques o` u x, x1 , . . . , xn , y sont num erique ou symbolique et X et Y des ensembles. Si x et y sont des expressions symboliques, seules les op erateurs =,==,<> et != peuvent etre utilis es. Exemples : a[i,j] < 1.5 (i+1,Jan) not in I cross J Expressions it er ees : Une expression it er ee est une expression primaire qui a la forme suivante : iterated operator indexing expression integrand o` u iterated operator est un op erateur dit eration, indexing expression est un ensemble dindices indiquant le nombre dit erations ` a eectuer et integrand est lexpression logique ` a it erer. Il existe 2 op erateurs dit eration : forall qui a la signication de lop erateur math ematique . Le r esultat du test it er e est vrai si le test est vrai pour tous les el ements g en er es par indexing expression ; exists qui a la signication de lop erateur math ematique . Le r esultat du test it er e est vrai si le test est vrai pour au moins un el ement parmi tous les el ements g en er es par indexing expression. Test correspondant teste si x < y teste si x y teste si x = y teste si x y teste si x = y teste si x Y teste si (x1 , . . . , xn ) Y teste si x Y teste si (x1 , . . . , xn ) Y teste si X Y teste si X Y

Exemple : forall{i in I, j in J} a[i,j]<0.5*b[i]

Introduction ` a GLPK

Page 21

4.6

Expressions lin eaires

EXPRESSIONS

Les op erateurs logiques disponibles sont : Formulation not x, ! x x and y, x && y x or y, x || y Signication negation ET logique OU logique

Tab. 10 Op erateurs logiques Les op erations sont eectu ees de la gauche vers la droite. La hi erarchie g en erale des op erations devient ainsi : Op eration Evaluation des op erations num eriques Evaluation des op erations symboliques Evaluation des op erations ensemblistes Op erations relationnelles N egation ET logique It eration et OU logique Hi erarchie 1er 7eme 8eme 9eme 10eme 14eme 15eme 16eme 17eme 18eme 19eme

Tab. 11 Hi erarchie des op erations dans GLPK

4.6

Expressions lin eaires

Une expression lin eaire est une r` egle pour calculer des formes lin eaires ou simplement des formules math ematiques lin eaires ou anes. Une expression lin eaire peut etre compos ee de : Variables : Chaque expression primaire peut etre bas ee de variables (ex : T ) ou de variables indic ees (ex : x[i, j ]). Expressions it er ees : On peut calculer une expression lin eaire avec des op erateurs dit eration conservant la lin earit e. Le seul op erateur disponible est : sum indexing expression integrand o` u indexing expression est lensemble dindices sur lequel porte la somme et integrand est une expression lin eaire qui est it er ee. Exemple : sum{j in J} (a[i,j]*x[i,j]+5)

Introduction ` a GLPK

Page 22

4.6

Expressions lin eaires

EXPRESSIONS

Expressions conditionnelles : On peut calculer une expression lin eaire ` a laide dune expression conditionnelle de la forme :

if b then f else g if b then f o` u b est une expression logique et f et g des expressions lin eaires.

Les op erateurs arithm etiques disponibles sont : Formulation +f -f f +g f -g f *g f /g Signication f =f +1 f =f 1 f +g f g f g f /g

Tab. 12 Op erateurs arithm etiques Les op erations sont eectu ees de la gauche vers la droite. La hi erarchie g en erale des op erations est la m eme que celle des expressions num eriques.

Introduction ` a GLPK

Page 23

OBJETS DE MODELISATION

Objets de mod elisation

Les objets de mod elisation sont les briques de base pour d enir un mod` ele. Il en existe 2 types : celles qui permettent de d enir un objet ainsi que certaines de ses propri et es : set, parameter, variable, constraint, objective ; celles qui permettent de r ealiser certaines actions : solve, check, display, printf, loop. Les di erentes expressions d enies auparavant peuvent etre utilis ees dans le param etrage de ces objets.

5.1

Set : D enition des ensembles

Set dans la section Mod` ele permet de d eclarer des ensembles d ej` a d enis dans la section Donn ees ou ` a d enir ` a laide dexpressions.
Forme g en erale Avec set name {domain } , attrib , . . . , attrib ; name est le nom symbolique de lensemble domain est optionnel et d enit les dimensions et/ou lensemble de d enition de lensemble attrib, . . . , attrib est une s erie dattributs optionnels dimen n sp ecie la dimension des n-uplets de lensemble within expression qui contraint tous les el ements de lensemble a ` etre dans un ensemble plus grand := expression qui assigne une valeur x ee ou calcul ee a ` lensemble default expression qui sp ecie une valeur par d efaut ` a lensemble ou a ` un de ses el ements quand aucune information nest disponible

Attributs

dimen attribue la dimension des n-uplets dun ensemble ou de l el ement dun ensemble. n doit etre un entier non sign e compris entre 1 et 20. Un seul dimen peut etre mentionn e. Sil ne lest pas, il est calcul e automatiquement. Si ce nest pas possible, la valeur par d efaut est 1. := attribue une valeur ` a un ensemble ou ` a un de ses membres. Si := est sp eci e, lensemble est calculable et aucune donn ee nest n ecessaire dans le chier de donn ees. Par contre, sil nest pas mentionn e, les donn ees doivent etre fournies.

Exemples : set noeuds; set arcs within (noeuds cross noeuds); set step{s in 1..maxiter} dimen 2 := if s=1 then arcs else steps[s-1] union setof{k in nodes, (i,k) in step[s-1], (k,j) in step[s-1]}(i,j);

Introduction ` a GLPK

Page 24

5.2

Parameter : D eclaration ou calcul de param` etres

OBJETS DE MODELISATION

set A{i in I,j in J}, within B[i+1] cross C[j-1], within D diff E, default {(abc,123), (321,cba)};

5.2

Parameter : D eclaration ou calcul de param` etres

Parameter dans la section Mod` ele permet ` a lutilisateur de d eclarer des param` etres d enis dans la section Donn ees ou de d enir des param` etres calcul es par des expressions analytiques ou logiques (dans lesquelles les variables du probl` eme ne peuvent intervenir). doptimisation.
Forme g en erale Avec param name {domain } , attrib , . . . , attrib ; name est le nom symbolique du param` etre domain est optionnel et d enit les dimensions et/ou lensemble de d enition du param` etre attrib, . . . , attrib est une s erie dattributs optionnels integer pour sp ecier que le param` etre est entier binary pour sp ecier que le param` etre est binaire (0 ou 1) symbolic pour sp ecier que le param` etre est symbolique relation avec < <= = == >= > <> != pour obliger le param` etre a ` v erier des conditions formul ees via ces op erateurs (sinon erreur !) in expression pour obliger le param` etre a ` etre dans un certain ensemble := expression qui assigne une valeur x ee ou calcul ee au param` etre default expression qui sp ecie une valeur par d efaut au param` etre quand aucune information nest disponible

Attributs optionnels

Les valeurs etant attribu ees par lutilisateur, les attributs d enis ci-dessus permettent essentiellement de v erier que les donn ees assign ees aux param` etres v erient bien des conditions voulues. Si au moins une dentre elles ne lest pas, une erreur appara tra lors de lex ecution. Exemples : param I := 2; param units{I}; param N := 20, integer, >=0, <=100; param A {n in 0..N, k in 0..n} := if k=0 or k=n then 1 else A[n-1,k-1]+A[n-1,k]; param p{i in I, j in J}, integer, >=0, <= i+j, in A[i] symdiff B[j], in C[i,j], default 0.5*(i+j); param month symbolic default May in {Mar, Apr, May};

Introduction ` a GLPK

Page 25

5.3

Variable : D enition des variables du probl` eme

OBJETS DE MODELISATION

5.3

Variable : D enition des variables du probl` eme

Variable permet de d enir les variables du probl` eme doptimisation et certaines conditions sur celles-ci.
Forme g en erale Avec var name {domain } , attrib , . . . , attrib ; name est le nom symbolique de la variable domain est optionnel et d enit les dimensions et/ou lensemble de d enition de la variable attrib, . . . , attrib est une s erie dattributs optionnels integer pour contraindre la variable a ` etre enti` ere binary pour contraindre la variable a ` etre binaire (0 ou 1) >= expression sp ecie une borne inf erieure a ` la variable <= expression sp ecie une borne sup erieure a ` la variable = (ou ==) expression sp ecie une valeur x ee a ` la variable

Attributs optionnels

Si le domaine nest pas speci e, la variable est une simple variable scalaire. Sinon, la variable est un tableau ` a n dimensions. Dautre part, les conditions doivent etre coh erentes entre elles pour ne pas avoir derreur ` a lex ecution (exemple : x ee la variable ` a une valeur n egative et la forcer ` a etre positive). Exemples : var x = 0; var y{I,J}; var A{n in I}, integer, >= b[n], <= c[n]; var z{i in I, j in J} >= i+j;

5.4

Constraint : D enition des contraintes du probl` eme

Constraint permet de d enir les contraintes du probl` eme doptimisation.


Forme g en erale subject subject subject subject subject to to to to to name name name name name {domain {domain {domain {domain {domain } } } } } : : : : : expression expression expression expression expression , , , , , = expression ; <= expression ; >= expression ; <= expression , <= expression ; >= expression , >= expression ;

Avec

name est le nom symbolique de la contrainte domain est optionnel et d enit le nombre de contraintes de ce type expressions sont des expressions lin eaires pour calculer les composants de la contrainte (la virgule est facultative) Le mot cl e subject to peut etre r eduit a ` subj to ou s.t. ou m eme etre supprim e.

Remarque

Introduction ` a GLPK

Page 26

5.5

Objective : D enition de la fonction objectif du probl` e5 me OBJETS DE MODELISATION

Si le domaine nest pas sp eci e, la contrainte est une simple contrainte. Sinon le nombre d el ements du domaine d enit le nombre de contraintes. Les contraintes d enies doivent etre forc ement lin eaires. Exemples : s.t. C1 : x + y + z >= 0 ;

subject to C2 {t in 1..T, i in 1..I} : x[t] + y[t] <= sqrt[2]*i ; subj to C3 {t in Ens1, r in Ens2} : sum{k in 1..t} x[k] + y[r] <= 2;

5.5

Objective : D enition de la fonction objectif du probl` eme

Objective permet de d enir lobjectif du probl` eme doptimisation.


Forme g en erale Avec minimize name {domain } : expression ; maximize name {domain } : expression ; name est le nom symbolique de lobjectif domain est optionnel et d enit lensemble de d enition de lobjectif expression est une expression lin eaire qui d enit lobjectif

Si le domaine nest pas sp eci e, lobjectif est un simple objectif scalaire. Sinon le nombre d el ements du domaine d enit la dimension de lobjectif. Lobjectif d eni doit etre forc ement lin eaire. Dautre part, on ne peut consid erer dans le probl` eme quun seul objectif. Si plusieurs objectifs sont d enis dans le mod` ele, le premier rencontr e est suppos e etre lobjectif du probl` eme. Les suivants sont ignor es. Exemples : minimize obj : x + 1.5*(y+z) ; maximize profit_total : sum{p in 1..P} profit[p] * produits[p] ;

5.6

Solve : R esolution

solve lance la r esolution du probl` eme doptimisation.

Introduction ` a GLPK

Page 27

5.7

Check : V erication des donn ees

OBJETS DE MODELISATION

Forme g en erale Remarque

solve ; solve est facultatif et ne peut etre utilis e quune seule fois. Sil nest pas mentionn e, GLPK r esoud tout de m eme le mod` ele en consid erant quil est plac e en n du mod` ele.

solve d eclanchant la r esolution du probl` eme doptimisation, tous les param` etres, variables, objectif ou contraintes doivent etre d enis avant sa d eclaration.

5.7

Check : V erication des donn ees

Check permet de v erier certaines expressions logiques. Si la valeur est fausse, le mod` ele retourne une erreur.
Forme g en erale Avec check {domain } : expression ; domain est optionnel et d enit lensemble de v erication expression est une expression logique qui doit etre v eri ee

Exemples : check: x+y <= 1 and x >= 0 and y >= 0; check: sum{i in ORIG} supply[i] = sum{j in DEST} demand[j]; check{i in I, j in 1..10}: S[i,j] in U[i] union V[j];

5.8

Display : Achage

Display permet d evaluer des expressions et d ecrire leurs valeurs sur loutput standard.
Forme g en erale Avec display {domain } : item, . . . , item ; domain est optionnel et d enit lensemble dachage item, . . . , item sont les el ements a ` acher

Les item ` a acher peuvent etre des ensembles, des param` etres, des variables, des contraintes, un objectif, des expressions,. . . Si litem est un objet calculable (ensemble, param` etre,. . . ), lobjet est evalu e sur le domaine entier et son contenu est enti` erement ach e. Si lobjet est une contrainte, GLPK ache le d etail de la contrainte : Exemple : La contrainte Cj , j = 1, 2 : C[1] <= Val1: 1 x[1,1] 2 x[2,1]
j 3 i=1 ixi

2 sera ach ee de la forme :

Introduction ` a GLPK

Page 28

5.9

Printf : Achage format e

OBJETS DE MODELISATION

3 x[3,1] C[2] <= Val2: 1 x[1,2] 2 x[2,2] 3 x[3,2] avec V al1 et V al2 les valeurs de la contrainte estim ees par le mod` ele. Si lobjet est une expression, lexpression est evalu ee et le r esultat est ach e. Si le display est situ e dans le mod` ele, seules les quantit es de litem calcul ees avant display sont ach ees. Cest pourquoi il est pr ef erable de placer la partie display apr` es le solve. Exemples : display: x=, x, y=, y, z=, z; display: sqrt(x**2 + y**2 + z**2); display{i in I, j in 1..10}: i, j, a[i,j], b[i,j];

Exemples : On souhaite faire acher une variable x[i,j] avec display : Volume[1,1] Volume[1,2] Volume[1,3] Volume[2,4] Volume[2,5] Volume[2,6] ... = = = = = = 56100 56200 56300 56205 56110 56015

5.9

Printf : Achage format e

Printf permet d evaluer des expressions et d ecrire leurs valeurs sur loutput standard selon un formalisme choisi.
Forme g en erale Avec printf {domain } : format, expression, . . . , expression ; domain est optionnel et d enit lensemble dachage format sp ecie le format dachage expression, . . . , expression est la liste des el ements a ` formater et a ` acher

Le format est facultatif : soit on ne lindique pas et les caract` eres sont copi es tels quels, soit on lache et il d enit un format particulier. Les principaux types de format sont d enis comme en C par %d, %f, %e, %E, %g, %G, %s. On rappelle que :

Introduction ` a GLPK

Page 29

5.10

For : R ep etition dactions

OBJETS DE MODELISATION

%d %f %e %E %g %G %s

: : : : : : :

entier r eel (oat) r eel sous format xxx.yyy e+X r eel sous format xxx.yyy E+X format le plus court entre %f et %e format le plus court entre %f et %E cha ne de caract` eres

De m eme, on rappelle que \n permet de passer ` a la ligne, \t dintroduire une tabulation, \b un backspace et \v un Tab vertibal. Exemples : printf: Hello world! \n; printf: "x= %.3f; y=%.3f z=%.3f\n", x, y, z; printf{i in I}: flot total de %s est %g \n, i, sum{j in J} x[i,j]; printf{k in K} "x[%s] = " & (if x[k] < 0 then "?" else "%g"),k,x[k];

Exemple : On souhaite faire acher une variable x[i,j] avec printf : printf{i in 1..T}:%d %.5f %.5f 1 56100.00000 170.00000 2 56205.00000 217.00000 ... \n,i,Volume[1,i],Volume[2,i];

5.10

For : R ep etition dactions

For permet de r ep eter des actions un nombre d etermin e de fois.


Forme g en erale Avec for {domain } : statement ; for {domain } : {statement . . . statement } ; domain d enit lensemble de r ep etition statement est lexpression qui est it er ee {statement . . . statement } est une s equence dexpressions a ` it erer Seules des expressions avec check, display, printf et for sont autoris ees dans un for.

Remarque

Si le domaine nest pas sp eci e, lobjectif est un simple ojectif scalaire. Sinon le nombre d el ements du domaine d enit la dimension de lobjectif. Lobjectif d eni doit etre forc ement lin eaire. Dautre part, on ne peut consid erer dans le probl` eme quun seul objectif. Si plusieurs objectifs sont d enis dans le mod` ele, le premier rencontr e est suppos e etre lobjectif du probl` eme. Les suivants sont ignor es.

Introduction ` a GLPK

Page 30

5.10

For : R ep etition dactions

OBJETS DE MODELISATION

Exemples : for {1..72} printf("*");

for {(i,j) in E: i != j} { printf "flow from %s to %s is %g \n", i, j, x[i,j]; check x[i,j] >= 0; }

Introduction ` a GLPK

Page 31

DONNEES

Donn ees

Dans cette partie, nous allons voir comment d enir des donn ees. Il faut bien voir que toute donn ee qui est d enie dans la section Donn ees doit etre pr ealablement d eclar ee dans la section mod` ele. Les r` egles de codage sont les m emes que dans la section mod` ele. Une seule exception est la non-obligation des pour d enir les cha nes de caract` eres contenant uniquement des caract` eres alphanum eriques, des + et - et/ou le point d ecimal. Exception : Si une donn ee doit etre calcul ee, il faut la placer dans la section Modele. On peut d enir 2 types de donn ees : les ensembles et les param` etres.

6.1

Ensembles

Dans la section Donn ees, on ne peut d enir des ensembles quavec des donn ees g ees.
Forme g en erale Avec set name , record , . . . , record ; set [ symbol, . . . , symbol ] , record , . . . , record ; name est le nom symbolique de lensemble symbol, . . . , symbol sont les indices qui sp ecient un el ement particulier de lensemble record , . . . , record sont les di erentes entr ees de donn ees := est facultatif mais permet une meilleure lisibilit e ( slice ) sp ecie un n-uplet simple-data d enit un ensemble dans un format simple : matrix data d enit un ensemble dans un format matriciel (tr) : matrix data d enit un ensemble sous la forme de la transpos ee dune matrice

Records

Exemples : set month := "Jan" "Fev" "Mar" "Avr" "Mai" "Jui"; set A[3,Mar] := (1,2) (2,3) (4,2) (3,1) (2,2) (4,4) (3,4); set A[3,Mar] : 1 2 3 4 := 1 - + - 2 - + + 3 + - - + 4 - + - + ; set B := (1,2,3) (1,3,2) (2,3,1) (2,1,3) (1,2,2) (1,1,1) (2,1,1); set B := (1,*,*) : 1 2 3 := 1 + - 2 - + +

Introduction ` a GLPK

Page 32

6.1

Ensembles

DONNEES

3 - + (2,*,*) : 1 2 3 1 + + 2 3 := + -

Dans cet exemple, lensemble month est un ensemble de singletons, A est un tableau bi-dimensionnel de couples et B un ensemble de triplets. Supposons le n-uplet (s1 , s2 , . . . , sn ). Chaque composant peut etre un nombre, un symbole ou un *. Le nombre de composants doit toujours etre identique. Lutilisation dun * est utile dans la saisie. Par exemple, si on consid` ere les couples (1,2) et (1,3), on peut d enir un format xe (1,*) o` u seule la deuxi` eme composante varie et peut valoir 2 ou 3. En pratique, on peut remplacer A := (1,2) (1,3); par A := (1,*) 2 3; . On peut ainsi r eduire une longue liste assez facilement Si le n-uplet est un couple, on peut les d enir sous la forme matricielle : : l1 l2 lm c1 c2 a11 a12 a21 a22 am1 am2 cn := a1n a2n amn

o` u li est le num ero/symbole correspondant ` a une ligne de la matrice, ci le num ero/symbole correspondant ` a une colonne de la matrice et chaque aij est un el ement possible de la matrice (correspondant au couple (li , cj )), qui peut etre + et -. Si aij est le symbole +, le couple correspondant appartient ` a lensemble. Sinon, cest un - et il ny appartient pas. On peut d enir de la m eme sorte la transpos ee de la matrice : (tr) : l1 l2 lm c1 c2 a11 a12 a21 a22 am1 am2 cn := a1n a2n amn

La saisie est la m eme que pr ec edemment hormis le fait que l el ement aij correspond d esormais au couple (cj , li ) au lieu de (li , cj ).

Introduction ` a GLPK

Page 33

6.2

Param` etres

DONNEES

6.2

Param` etres
param param param param name , record , . . . , record ; name default value , record , . . . , record ; : tabbing-data ; default value : tabbing-data ;

Forme g en erale

Avec

name est le nom symbolique du param` etre value est une valeur par d efaut du param` etre record , . . . , record sont les di erentes entr ees de donn ees tabbing-data repr esente lentr ee des donn ees sous la forme dun tableau := est facultatif mais permet une meilleure lisibilit e [ slice ] sp ecie un n-uplet plain-data d enit un ensemble dans un format plain (indice1 , . . . , indicen , valeur) : tabular data d enit un ensemble dans un tableau (tr) : tabular data d enit un param` etre sous la forme de la transpos ee dune matrice

Records

Supposons le n-uplet [s1 , s2 , . . . , sn ]. Chaque composant peut etre un nombre, un symbole ou un *. Le nombre de composants doit toujours etre identique. Lutilisation dun * est utile dans la saisie. Par exemple, si on consid` ere les couples [1,2] et [1,3], on peut d enir un format xe [1,*] o` u seule la deuxi` eme composante varie et peut valoir 2 ou 3. En pratique, on peut remplacer A := [1,2] [1,3]; par A := [1,*] 2 3; . On peut ainsi r eduire une longue liste assez facilement. Quand le param` etre est un simple tableau, on peut le remplir dans le format plain, cest ` a dire de la forme : param T := 1, 1, 2, 2, 3, 3; ou param T := 1 1 2 2 3 3; ou m eme param T:= 1 1 2 2 3 3; Les espaces n etant pas pris en compte, la disposition peut etre adapt ee comme on le souhaite. Tout comme pour les ensembles, si le n-uplet est un doublet, on peut les d enir sous la forme matricielle : : l1 l2 lm c1 c2 a11 a12 a21 a22 am1 am2 cn := a1n a2n amn

o` u li est le num ero/symbole correspondant ` a une ligne de la matrice, ci le num ero/symbole correspondant ` a une colonne de la matrice et chaque aij est la veleur correspondante au doublet (li , cj )), qui peut etre un nombre, un symbole ou le point d ecimal. Si aij est un nombre ou un symbole, cette quantit e est assign ee ` a l el ement [li ,rj ] du param` etre. Si cest un point d ecimal, la valeur par d efaut d enie est attribu ee. Si aucune valeur par d efaut na et e attribu ee, l el ement

Introduction ` a GLPK

Page 34

6.2

Param` etres

DONNEES

[li ,rj ] du param` etre nest pas d eni (dans ce cas, faire bien attention de ne pas faire dop eration avec cet el ement nexistant pas). Tout comme pour les ensembles, on peut aussi d enir les donn ees en remplissant la transpos ee : (tr) : l1 l2 lm c1 c2 a11 a12 a21 a22 am1 am2 cn := a1n a2n amn

Dans ce cas, chaque aij correspond correspond ` a l el ement dindices [rj ,li ] au lieu de [li ,rj ]. Un moyen tr` es pratique de d enir des param` etres de m emes dimensions est le tabbing data format. Au lieu de d enir chaque param` etre un ` a un, on peut les d enir dans un tableau dun seul coup : param r11 , r21 , rm1 , default value :s r12 , , r1n , r22 , , r2n , rm2 , , rmn , : l1 l2 lm p1 p2 a11 a12 a21 a22 am1 am2 pr := a1r a2r amr

Le nom symbolique :s est facultatif, il permet de cr eer un ensemble. Les virgules le sont aussi. Cette ecriture g en erale correspond en fait ` a la s erie dinstructions :

set s :=(r11 , r12 , . . . , r1n ) (r21 , r22 , . . . , r2n ) . . . (rm1 , rm2 , . . . , rmn ); param p1 default value := [r11 , r12 , . . . , r1n ] a11 [r21 , r22 , . . . , r2n ] a21 . . . [rm1 , rm2 , . . . , rmn ] am1 ; param p2 default value := [r11 , r12 , . . . , r1n ] a12 [r21 , r22 , . . . , r2n ] a22 . . . [rm1 , rm2 , . . . , rmn ] am2 ; ......... param pr default value := [r11 , r12 , . . . , r1n ] a1r [r21 , r22 , . . . , r2n ] a2r . . . [rm1 , rm2 , . . . , rmn ] amr ;

Introduction ` a GLPK

Page 35

6.2

Param` etres

DONNEES

Exemples : param T := 4;

param month := 1 Jan 2 Fev 3 Mar 4 Avr 5 Mai; param month := [1] Jan, [2] Fev, [3] Mar, [4] Avr, [5] Mai; # Pour ces 3 versions, il faut pr ealablement d eclarer le param month dans le fichier .mod en # param month{1..5} symbolic; param stock_init := acier 7.32 nickel 35.8 ; param cout := [acier] .025 [nickel] .03 ; param quant := acier 20, nickel 12; # On peut d efinir tous les param : stock_init acier 7.32 nickel 35.8 param` etres dun bloc (sils ont les m^ emes dimensions): cout quant := .025 20 .03 12 ;

#D efinition dun ensemble param : bilan : stock_init cout acier 7.32 .025 nickel 35.8 .03 param demand default 0 : FRA DAN GBR acier 300 . 100 fer 500 750 400 nickel 100 . . (tr) ALL SUE 75 . 250 . 50 .

quant := 20 12 ;

ITA ESP := 225 250 850 500 200 . ;

param couts_trans := [*,*,acier]: FRA DAN GBR ALL SUE ITA ESP := usine1 30 10 8 10 11 71 6 usine2 22 7 23 14 17 28 26 usine3 10 12 9 18 14 51 16 [*,*,fer]: usine1 usine2 usine3 FRA DAN GBR ALL SUE ITA ESP := 40 20 18 20 21 81 16 32 17 33 24 27 38 36 20 22 19 28 24 61 26

[*,*,nickel]: FRA DAN GBR ALL SUE ITA ESP := usine1 20 10 8 10 1 61 6 usine2 12 17 13 4 7 18 16 usine3 1 2 9 8 4 41 6

Introduction ` a GLPK

Page 36

Vous aimerez peut-être aussi