TP - Problème de Découpe (suite)

publicité
Licence d’informatique L3
2006-2007
Programmation Linéaire
TP - Problème de Découpe (suite)
Dans la première partie du TP, nous avons vu que la difficulté du problème était due au nombre
important de motifs et au fait qu’il est difficile de les énumérer tous. Nous avions alors limité la
résolution à un nombre réduit et arbitraire de motifs. Nous allons, dans cette partie, prendre en compte
tous les motifs essentiels. Pour cela, nous utilisons une procédure qui détermine un motif intéressant,
c’est-à-dire une colonne à ajouter au programme linéaire. Cette procédure est la suivante :
Algorithme de résolution du problème de découpe
Initialisation :Choisir un sous-ensemble de n motifs
Étape 1 :
– Résoudre le programme linéaire (P) ci-dessous, pour les motifs courants.
Z=
n
X
xj
sous
j=1
n
X
aij xj ≥ bi
(M in)
∀i = 1, . . . , 4
j=1
xj ≥ 0
∀j = 1, . . . , n
– Soit y = (y1 , y2 , y3 , y4 ) la solution duale optimale obtenue. Résoudre le programme linéaire en
nombre entier (PE) suivant.
W = y1 a1 + y2 a2 + y3 a3 + y4 a4
(M ax)
sous 45a1 + 36a2 + 31a3 + 14a4 ≤ 100
aj ≥ 0
∀j = 1, . . . , 4
aj entiers
∀j = 1, . . . , 4
Notons w∗ la valeur optimale obtenue.
Étape 2 :
si w∗ > 1 : la solution obtenue fournie un nouveau motif, donc une nouvelle variable à introduire
dans le programme linéaire (P). Retour à l’Étape 1 .
sinon : Arrêt. La solution courrante du problème (P) est optimale.
Sylvie Borne - Mathieu Lacroix
Implémentation
– Réaliser une fonction qui résout le sous-problème. Cette fonction prend en paramètre un vecteur
y = (y1 , y2 , y3 , y4 ) qui définit les coefficients de la fonction objective, et renvoie un vecteur
a = (a1 , a2 , a3 , a4 ) représentant les coefficients de la nouvelle variable dans (P). Remarquons
que a est un vecteur d’entiers.
– Mettre en œuvre l’algorithme de résolution du problème de découpe proposé. Les motifs initialement considérés sont ceux ne comportant qu’un seul final.
Pour aller plus loin ...
– Que représente le problème (PE) par rapport au problème (P) ?
– Quelle interprétation peut-on donner aux variables y1 , y2 , y3 , y4 ?
Rapport
Vous devez rendre un rapport et le code source de votre programme au plus tard le 11 mai. Passé
cette date, une forte pénalité sera appliquée.
Le rapport ne peut dépasser 7 pages et doit impérativement contenir une introduction et une conclusion. Il ne doit contenir aucun code. Dans ce rapport, vous devez clairement expliquer le sujet et
l’algorithme de résolution ainsi que répondre aux questions.
Le code source doit se trouver dans une archive nommée : nom1_nom2.tgz. Les fichiers devront
s’extraire dans le répertoire Nom1_Nom2. L’exécutable doit s’appeler decoupe. Le code source
devra aussi contenir un Makefile dont les règles suivantes sont nécessaires :
– all : crée le programme demandé,
– clean : nettoie tout ce qui a été généré pendant la compilation du programme.
Sylvie Borne - Mathieu Lacroix
Téléchargement