DEVOIR 1 MAT-2920 : recherche opérationnelle Hiver 2015 A remettre vendredi le 13 mars avant 16h00. Note: On fera le devoir à l aide du logiciel Matlab. Pour les questions qui n exigent pas Matlab, on répondra dans un document manuscrit. De plus, on enverra par courriel une copie électronique des fichiers Matlab de sorte que le professeur soit capable d exécuter les programmes pour chacune des parties du devoir. Partie A: méthode du simplexe Ecrire un programme Matlab de résolution du problème d optimisation linéaire min z = c t x Ax b, à l aide de la méthode du simplexe en incorporant la phase I et la phase II. La syntaxe de la fonction Matlab sera function [x, zmin, B, T, iter] = nom_du_programme(c,a,b,nmax) où T est le tableau final du simplexe, iter le nombre d itérations de la phase II, x est la solution finale sans les variables d écart, B est la base optimale, nmax le nombre maximal d itérations permises du simplexe et finalement zmin est la valeur minimale du problème. On utilisera la règle usuelle pour le choix de la colonne de pivot. On utilisera les programmes Matlab qui sont disponibles sur le site web du cours. La phase II a déjà été fait lors d une séance de travaux pratiques. Il suffit d ajouter la phase I à votre code. Voici quelques consignes de programmation. Si b 0, on évitera la phase I. 1
Si le problème n admet pas de solution réalisable, on affichera un message d erreur. Si le problème est non borné, on affichera aussi un message d erreur. Le programme devra éviter de boucler indéfiniment. Il faut calculer les variables de base B à chaque étape du simplexe. Ceci est nécessaire pour identifier la solution à partir du tableau final du simplexe. On portera une attention particulière lorsque l on désire vérifier la positivité ou la négativité. Pour éviter les problèmes causés par les erreurs d arrondies, on introduira deux valeurs très petites ɛ 0 et ɛ p qui servirons de tolérance. Par exemple, pour vérifier que c i 0, on écrira c i > ɛ 0. De même, il faut choisir les a ij > 0 pour le choix de la ligne de pivot. On écrira a ij > ɛ p. Plusieurs auteurs suggèrent de prendre les valeurs: ɛ 0 = 10 5 et ɛ p = 10 8. Il est recommandé de valider votre code à partir des séries d exercices. En particulier, il devra pouvoir résoudre le problème suivant de la série 3. Minimiser z = 2x 1 x 2 + x 3 x 4 sous les conditions x 1 + x 2 4x 3 + 4x 4 1, x 1 + x 2 + x 3 x 4 2, x 1 + 3x 2 + 2x 3 2x 4 3, x 1 3x 2 2x 3 + 2x 4 3, x 1, x 2, x 3, x 4 0. 2
Partie B: Application à un problème de diète Il s agit de déterminer la meilleure diète journalière à partir d une série d aliments provenant du restaurant McDonalds. Les données proviennent d un document de Robert Vanderbei. Les aliments de la diète sont dans cet ordre Aliments Prix unitaire en $ US Quart de livre fromage 1.84 Hamburger Deluxe fromage 2.19 Big Mac 1.84 Filet de poisson 1.44 Mac Poulet 2.29 Frites 0.77 Saucisses McMuffin 1.29 Lait 0.60 Jus d orange 0.72 La diète doit respecter une consommation minimale de plusieurs nutriments: Nutriments Seuil minimal Calories 2000 Hydrate de carbone 350 Protéine 55 Vitamine A 100 Vitamine C 100 Calcium 100 Fer 100 A l aide des données du fichier proboptlindiete.m disponible sur le site du cours, le problème s écrit sous la forme min coût = c t x, Ax Seuil, Répondre aux questions suivantes en utilisant obligatoirement votre code de la partie A. Ceci étant dit, on peut toujours vérifier les réponses à l aide de la commande linprog de Matlab. 1. Déterminer le choix des aliments qui minimise le coût. Quel sera le nombre de calories de cette diète? 3
2. Refaire a) en ajoutant une borne sur le nombre de calories: 2000 calories 2500. Il faut ajouter une inégalité au système. 3. Peut-on avoir une diète à 2000 calories? 4. Déterminer le choix des aliments qui minimise le nombre de calories. Pour cela, modifier la fonction objective par les calories et réduire la matrice. Quelle sera le nombre minimal de calories? Quel sera le coût de cette diète? 5. Ajouter de la variété au menu. On impose que le nombre de chaque aliment est limité à 2: 0 x i 2. Résoudre le problème initial en a) avec ces nouvelles contraintes et calculer les calories. Partie C: Problème général avec des contraintes d égalité et des variables libres Considérons le problème général min z = c t x + d t y, Ax + By b, Cx + Dy = g (1) comportant un ensemble de contraintes d inégalitét un autre ensemble de contraintes de type égalité. De plus, il y a un certain nombre de variables libres regroupées sous la variable y. Pour traiter les variables libres, nous allons introduire une seule variable y 0 et poser y = ỹ y 0 e où y 0, ỹ 0 et e = (1, 1,..., 1) t est le vecteur dont toutes les composantes sont égales à 1. Le rôle de la variable supplémentaire y 0 est d absorber la plus grande valeur négative des y i de sorte que y 0 + y i 0 pour tous les i = 1, 2,..., p sachant que y R p. Le problème (1) deviendra min z = c t x + d t (ỹ y 0 e), Ax + B(ỹ y 0 e) b, Cx + D(ỹ y 0 e) = g x, ỹ, y 0 0. (2) 4
Finalement, pour traiter les contraintes d égalité, il est préférable de procéder de la manière suivante. On utilise la propriété z 0 et e t z 0 z = 0. Par conséquent, une contrainte d égalité va s écrire Cx + Dy = g Cx + Dy g et e t (Cx + Dy g) 0 Autrement dit, il suffit d ajouter qu une seule contrainte de plus. La forme générale devient min z = c t x + d t y, Ax + By b, Cx + Dy = g, min z = c t x + d t y, Ax + By b, Cx + Dy g e t (Cx + Dy g) 0 (3) 1. Ecrire le problème (3) sous forme matricielle par rapport aux variables (x, ỹ, y 0 ). 2. Minimiser z = 2x 1 + x 2 + x 3 + 2x 4 sous les conditions x 1 x 2 + x 3 x 4 = 1, x 1 x 2 x 3 x 4 = 3, x 1 + x 2 x 3 + x 4 1, x 1 + x 2 x 3 x 4 1, x 1 x 2 + x 3 + x 4 1, x 1 + x 2 + x 3 x 4 2, x 1, x 4 0. On observera que les variables x 2, x 3 sont libres. On utilisera la formulation décrite ci-dessus. 5
Partie D: Applications On dénotera par A une matrice de format m n, b un vecteur de taille m et x un vecteur de taille n. En général, le système linéaire Ax = b n admet pas de solution. Toutefois, on pourrait calculer la solution x qui s approche au mieux de Ax = b. Ainsi, nous sommes conduit à considérer le problème d approximation en norme l 1, l 2 ou l min Ax b p (4) x sans aucune contrainte sur x pour p = 1 ou p = 2 ou p =. On rappelle que la n norme l 1 est définie par x 1 = x i et que la norme l 2 est x 2 = n x i 2. i=1 Finalement la norme l est définie par x = max i x i Si p = 2, ce problème est bien connu et porte le nom de moindres carrés. Sa solution sous Matlab est fournie par la commande > x = A\b Mais si p 2, le problème d approximation (4) n est pas un problème de programmation linéaire. Toutefois, il est possible de le résoudre à l aide de l optimisation linéaire. On notera le vecteur e = (1, 1,..., 1) t. i=1 1. Considérons le cas p = 1. On introduit les variables supplémentaires z i = (Ax b) i et on considère le problème de programmation linéaire min e t z z Ax b z, z 0 et x libre. (5) (a) Montrer que les deux problèmes (4) et (5) sont équivalents, i.e. admettent la même solution x. (b) Montrer que le problème (5) admet toujours une solution, donc aussi pour (4) si p = 1. Par la suite, on considère le problème de régression linéaire qui consiste à déterminer la meilleure droite d équation y = α + β t 6
qui représente au mieux un ensemble de points {(t i, y i )} m i=1 du plan. En norme l 1, il s agira de minimiser la fonction min (α,β) m α + βt i y i i=1 (c) Ecrire le problème de régression linéaire sous la forme min Ax b 1. Identifier A et x b. (d) En utilisant les données du fichier ex13data.m, résoudre le problème de régression linéaire en norme l 1. 2. Considérons le cas p =. On introduit la variable supplémentaire µ = Ax b et on considère le problème de programmation linéaire min µ µ Ax b µ, µ 0 et x libre. (6) (a) Montrer que les deux problèmes (4) et (6) sont équivalents, i.e. admettent la même solution x. (b) Montrer que le problème (6) admet toujours une solution, donc aussi pour (4) si p =. (c) En utilisant les mêmes données que le problème précédent, résoudre le problème de régression linéaire en norme l. 3. Représenter graphiquement les trois droites de régression en norme l 1, l 2 et l, ainsi que les points {(t i, y i )} m i=1. Commenter les résultats obtenus. 7