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