Académique Documents
Professionnel Documents
Culture Documents
PRATIQUES EN PROGRAMMATION
LINEAIRE INITIATION AU LOGICIEL GLPK
Exercice 1 : Lartisan Chocolatier
Description du problme
Un artisan chocolatier dcide de confectionner des ufs en chocolat. En allant inspecter ses rserves, il
constate quil lui reste :
- 18 kg de cacao
- 8 kg de noisettes
- 14 litres de lait
Il a deux spcialits : luf Extra et luf Sublime.
Rsolution manuelle
Notons x1 le nombre dufs Extra et x2 le nombre dufs Sublime produire. Le chocolatier cherche
maximiser la fonction objectif z:
Max z = 20 x1 + 30 x2
Etant donnes les rserves du chocolatier, les contraintes suivantes devront tre respectes :
x1 + 3 x2 18
x1 + x2 8
2 x1 + x2 14
Evidemment, on a aussi les contraintes : x1 0 et x2 0
Rsolution graphique :
Chaque inquation dfinit un demi-plan. Le domaine admissible D est l'intersection de tous les demi-
plans. Les lignes de niveau z = c de la fonction objectif sont les droites parallles, toutes
perpendiculaires son vecteur normal, ici (20, 30). La dernire ligne de niveau qui touche le
domaine D, c'est z = 210. Le point optimal (3, 5) est l'intersection de D et de cette ligne.
1
Le point optimal est (3 ; 5) ce qui signifie que x1 = 3 et x2 = 5.Pour maximiser son bnfice, le
chocolatier doit confectionner 3 oeufs Extra et 5 oeufs Sublime. Son bnfice sera alors de 210 . Il
utilisera 18 kg de cacao, 8 kg de noisettes et 11 kg de lait.
2-) Sauvegarder le fichier qui est initialement vide dans votre rpertoire avec le nom souhait (Fichier
Enregistrer sous ) en ajoutant lextension .mod (Exemple: exo1.mod )
/* blablablaaaaaaaaaaaa */
2
4-)Dclarer lensemble des contraintes
6-) Ecrire les deux lignes suivantes pour terminer la description du problme.
solve ;
end ;
Rsoudre le problme (cliquer sur F5 ou aller dans Tools Go). On obtient lcran ci-aprs :
On obtient bien le rsultat de la fonction objectif optimise mais on ne sait pas combien dufs de
chaque type lartisan chocolatier a du produire.
3
Les rsultats correspondent bien aux rsultats thoriques cependant nous pouvons crer un programme
plus complet, qui nous permettra dobtenir plus dinformations sur les diffrents paramtres.
Nous allons donc crire un programme linaire en incluant les paramtres du problme tels que :
4
2. Ecriture du programme avanc
Ouvrir le logiciel GLPK Lab Editor
Sauvegarder le fichier qui est initialement vide dans votre rpertoire avec le nom souhait
(Fichier Enregistrer sous) en ajoutant lextension .mod
a) Dfinition du programme :
Dclarer le paramtre types doeufs puis dterminer son ensemble
param jmax, integer > 0;
set J := 1..jmax;
Faire de mme pour le paramtre imax reprsentant les types dingrdients , I tant
l'ensemble des ingrdients.
Dclarer le paramtre d qui reprsente l'ensemble des bnfices en fonction du produit ; les
lments de d sont indics dans l'ensemble J.
ATTENTION: les valeurs numriques de c, d, e sont dfinies dans la partie donnes (b)
Dclarer la variable x indice dans lensemble J : x[j] reprsente le type duf; (x[1]
correspond luf Extra et x[2] correspond luf Sublime
Dclarer les contraintes formules lors de la rsolution manuelle concernant les stocks du
chocolatier. Ces contraintes dpendent de la matrice c (quantit dingrdients par type duf),
de la variable x (types dufs) et du paramtre e (stocks initiaux).
A titre d''exemple, la premire contrainte : x1 + 3*x2 <=18 scrit de la faon suivante :
s.t. c1 : c[1,1]*x[1]+c[1,2]*x[2]<=e[1];
5
b) Dfinition des donnes
Chaque paramtre dclar prcdemment possde une ou plusieurs valeurs connues. Pour trouver la
solution de la fonction objectif, il faut maintenant renseigner les valeurs de ces paramtres dans la
partie "data" du programme.
Faire de mme pour le paramtre imax sachant quil y a 3 ingrdients : cacao, noisettes,
lait.
Dfinir le paramtre c sous la forme dune matrice 3 lignes et 2 colonnes:
param c: 1 2 :=
1 13
2 1 1 coefficients des contraintes (inquations)
3 21 ;
indices
Dfinir le paramtre d sous la forme dune matrice une ligne et imax colonnes. Ce type
de matrice scrit de la manire suivante :
param d := 1 20 2 30 ;
Pour j=1 (uf Extra) donc le chocolatier fait un bnfice de 20 et pour j=2 (uf Sublime), il fait un
bnfice de 30
end ;
display {j in J} :x[j];
display "benef", obj;
6
Lavantage de ce second programme est de pouvoir modifier facilement chaque paramtre pour
valuer limpact sur la fonction objectif et les rsultats.
Manipulation 1 :
Modifier le bnfice ralis 40 pour luf extra et 20 pour luf sublime dans la matrice d
Modifier le stock initial de noisettes la valeur 9 dans la matrice e.
Manipulation 2 :
En utilisant les matrices c et e, dterminer une seule inquation gnrale permettant de satisfaire les
trois contraintes prcdentes.
Retrouvez-vous le mme rsultat ?
Indications
Manipulation 3 :
A laide du glossaire crez un fichier . DAT et un .MOD partir de ce programme et testez les.
7
Exercice 2 : Calcul des besoins (multi-priodes, mono-produit)
Une entreprise souhaite effectuer le calcul des besoins dun produit sur 5 priodes de
sorte maximiser le plus possible le profit (fonction objectif).
Indication
5 variables (type ensemble) seront utilises dans le modle: le stock (S), le besoin net (BN), le
besoin net jalonns (BNJ), le retard (R) et la livraison (L).
t 0 (init) 1 2 3 4 5
BB - 10 15 20 8 35
S 30
Variables
BN -
BNJ 0
L -
R 0
Questions
8
Modlisation et rsolution avec GLPK
Etape 1 : Dclaration des diffrents paramtres, variables et de leur domaine de dfinition.
/* Calcul du besoin */
solve ;
9
Etape3 : Dfinition des valeurs des paramtres
data;
10
Annexes
<Affichage dtaill>
printf "\n";
printf "--------------------------------------------\n";
printf " Objectif: %10g\n",20*x1+30*x2;
printf "\n";
printf " Oeuf Extra: %10g\n",x1;
printf " Oeuf Sublime: %10g\n",x2;
printf "--------------------------------------------\n";
Important :
Lcriture printf permet dafficher, le terme qui suit cette criture dcrit le type daffichage (saut de
ligne, valeur, etc)
Par exemple, lcriture \n permet de revenir la ligne donc printf "\n"; permet de sauter une ligne.
Lcriture pour afficher le nom dune variable et sa valeur se fait de la manire suivante :
printf " Oeuf Extra : %10g \n", x1;
Cette criture peut tre dcoupe en 5 parties:
- Printf est suivi du critre daffichage not entre guillemets puis dune virgule avec la
valeur ou la formule afficher.
- uf Extra : permet dafficher le nom de la variable
- %10g permet au logiciel de savoir sous quel format (entier, exposant, pourcentage) il
doit afficher la valeur de la variable
- \n, permet de revenir la ligne aprs laffichage de la valeur
- x1; permet dafficher la valeur de la variable
On obtient lcran ci-aprs :
11
2. Ecriture du programme avanc
<Affichage dtaill>
printf "\n";
printf "------------------------------\n";
printf " Bnfice: %2s Euros\n", sum{j in j} d[j] * x[j];
printf "\n";
12