Programmation linéniaire

9 527 vues

Publié le

Programmation linéniaire

0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
9 527
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
439
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Programmation linéniaire

  1. 1. Université Ibn Zohr, Faculté des Sciences, Agadir Master Informatique des Systèmes RépartisÉtude théorique de certains logiciels de la programmation linéaire Réalisé par : Encadré par :  Prof. Ahmed ASIMI  Mohamed ZAOUI
  2. 2. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRETables des matières :I. Introduction :……………………………………………………………………………………..2II. Les logiciels actuels :…………………………………….…………………………………..3 1. Principes de fonctionnement :……………………………………………....3 2. Les principaux solveurs :……………………………………………………...4 3. Les principaux modeleurs :…………………………………………………..4 4. Les environnements de développement intégrés (EDI) :………………5 5. Sites web des éditeurs de logiciels:………………………………………..5III. Étude théorique de certains logiciels de la programmation linéaire : Excel……………………………………………………...…………………………6 Lindo…………………………………………..…………………………………..12 Cplex………………………...…………………………………………………....25 Opl Studio……………………………….……………………………………...27 Matlab…………………………………………………………………………….29 Ampl……………………………………………………………………………….33 MPL for windows………………………..…………………………………...36 GAMS………………………………………….…………………………………..37 Maple……………………………………………………………………………..42IV. Conclusion :……………………………………...…………………………….……………48 1 MISR-fsa-Agadir Mohamed ZAOUI
  3. 3. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE I. Introduction : L’importance de l’optimisation et la nécessité d’un outil simple pour modéliser desproblèmes de décision que soit économique, militaire ou autres on fait de la programmationlinéaire un des champs de recherche les plus actifs au milieu du siècle précédent. Lespremiers travaux (1947) sont celle de George B. Dantzig et ses associés du département desforces de l’air des Etats Unis d’Amérique.Les problèmes de programmations linéaires sont généralement liés à des problèmesd’allocations de ressources limitées, de la meilleure façon possible, afin de maximiser un profitou de minimiser un coût. Le terme meilleur fait référence à la possibilité d’avoir un ensemblede décisions possibles qui réalisent la même satisfaction ou le même profit. Ces décisions sonten général le résultat d’un problème mathématique.Généralement il y a trois étapes à suivre pour pouvoir construire le modèle dun programmelinéaire :1. Identifier les variables du problème à valeur non connues (variable de décision) et les représenter sous forme symbolique (exp. x1, y1 ).2. Identifier les restrictions (les contraintes) du problème et les exprimer par un système d’équations linéaires.3. Identifier l’objectif ou le critère de sélection et le représenter sous une forme linéaire en fonction des variables de décision. Spécifier si le critère de sélection est à maximiser ou à minimiser. 2 MISR-fsa-Agadir Mohamed ZAOUI
  4. 4. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREII. Étude théorique de certains logiciels de la programmationlinéaire : Grâce aux progrès de l’informatique, l’offre de logiciels commerciaux permettant derésoudre des PL de plus en plus gros a considérablement augmenté. On peut maintenantrésoudre en routine des PL à 100 000 variables et contraintes et des PLNE à 1 000 variables etcontraintes avec les codes les plus performants. Les prix de ces logiciels autrefois réservés àune petite communauté ont fortement diminué et deviennent très abordables. 1. Principes de fonctionnement : La résolution d’un problème de programmation linéaire s’effectue en deux grandes phases :La modélisation, puis la résolution (on pourrait aussi ajouter une troisième phase d’analysedes résultats). Historiquement, les premiers logiciels ne servaient qu’à résoudre desprogrammes linéaires déjà modélisés et donnés sous forme numérique. Il s’agissait donc decodes algorithmiques de résolution, appelés aussi solveurs. Par la suite sont venus se grefferles langages de modélisation ou modeleurs.Les solveurs sont distribués sous forme de logiciels autonomes, ou encore de bibliothèques desous-programmes à inclure dans des programmes d’application. Le programme linéaire doitêtre au préalable préparé en mémoire, sous forme de matrices ou de listes de valeursnumériques. La plupart des solveurs offrent cependant une fonction permettant de chargerun PL saisi au préalable dans un fichier texte.Selon les produits, les PL sont stockés dans des fichiers sous forme matricielle ou sousforme d’équations proches de l’écriture mathématique, par exemple “3*X1+2*X2 = 3”. Leformat matriciel MPS a été popularisé par le premier solveur célèbre, MPSX d’IBM. Ilpermet de découper la matrice d’un grand PL en lignes de longueur fixe, de définir desportions de lignes et de colonnes, etc. Ce format est encore utilisé comme moyend’échanger des données entre les logiciels actuels.Les modeleurs aident l’utilisateur à formuler son problème correctement et à analyser lessolutions obtenues après résolution par un solveur. Un modeleur s’appuie sur un langage dedescription du problème et lie cette modélisation symbolique (le modèle) à un jeu dedonnées. Typiquement, un modeleur permet de définir des paramètres (par exemple unnombre de produits à fabriquer), des variables indicées, des tableaux de données, dessommations de variables indicées, etc. L’utilisateur peut ainsi formuler son problème defaçon compacte, dans une syntaxe proche de l’écriture mathématique.Avec un solveur, l’ajout d’un produit supplémentaire dans un problème de planification deproduction oblige à insérer des nouvelles colonnes ou lignes de valeurs numériques dans lamatrice du programme linéaire. Un modeleur permet de définir un modèle générique,paramétré par le nombre n de produits. Ce modèle peut être rendu complètementindépendant des valeurs numériques, stockées dans des fichiers séparés. Pour ajouter unnouveau produit, il suffira de préciser la nouvelle valeur de n et de modifier les fichiers dedonnées.Le modèle ne sera pas changé. Cette souplesse accélère les développements, diminue lesrisques d’erreurs et donne des modèles faciles à documenter et à relire.Comment marche un modeleur ? Il commence par compiler le modèle pour détecterd’éventuelles erreurs de syntaxe. Si la syntaxe est correcte, il ouvre les fichiers de donnéeset se charge de la tâche fastidieuse de générer le programme linéaire sous forme matricielle.La matrice des valeurs numériques, qui peut être énorme par rapport au modèle sous formesymbolique, sera traitée par un solveur.Aujourd’hui, certains modeleurs peuvent être achetés seuls puis interfacés avec diverssolveurs d’autres éditeurs de logiciels, par exemple grâce au format d’échange matricielMPS. D’autres modeleurs sont étroitement imbriqués avec un solveur propriétaire, c’est unedes raisons pour laquelle l’amalgame entre modeleur et solveur est très vite fait. Il est toutde même important de bien faire la distinction. 3 MISR-fsa-Agadir Mohamed ZAOUI
  5. 5. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE 2. Les principaux solveurs :En tête de liste on retrouve deux concurrents : OSL, renommé Optimization Solutions(d’IBM) et Cplex Callable Library (d’ILOG), qui ont été les premiers à proposer des codescommerciaux robustes et rapides. OSL a été le premier solveur commercial comprenant unalgorithme de point intérieur. Il n’est pas proposé avec un modeleur particulier. Robuste etrapide, il est interfaçable avec la plupart des langages de modélisation. Depuis une récenteacquisition de Cplex Inc. par ILOG, l’offre du solveur Cplex s’est beaucoup développée.On le retrouve par exemple comme solveur interne dans des logiciels d’optimisationcomme ILOG Planner.A côté de ces deux grands, on trouve d’autres codes très robustes et qui ont su se faire uneplace sur le marché des logiciels d’optimisation. Citons C-Whiz de Ketron ManagementScience qui tourne sur mainframe et PC, HS/LP, le solveur de Harvely System Inc. quis’interface très bien avec le modeleur OMNI de la même société, LAMPS d’AdvancedMathematical Software Ltd., LINDO de Lindo Systems Inc., GAUSS d’Aptech SystemsInc., LOQO de l’université de Princeton qui propose des versions gratuites pour le mondeacadémique, MINOS de Stanford Business Software Inc., et bien d’autres encore. Desproduits plus connus comme Maple, Matlab ou Excel proposent aussi des extensionspermettant de résoudre des PL. Enfin, il existe même un solveur simple du domaine public,LPSolve, diffusé avec son source en C. 3. Les principaux modeleurs :Parmi les modeleurs, AMPL est le plus connu et le plus célèbre. Sa particularité est depouvoir appeler pratiquement tous les solveurs existants. Les éditeurs de codesalgorithmiques en ont fait une référence et se servent de la popularité d’AMPL pourpromouvoir leur solveur. C’est sans doute ce qui a rendu AMPL plus célèbre encore. Cetype de langage, qui est très utile aux décideurs d’entreprise en simplifiant la modélisationet la résolution de problèmes d’optimisation, est en pleine expansion. L’offre s’estconsidérablement étoffée ces cinq dernières années.Les autres langages de modélisation les plus connus, et qui seront brièvement décrits auparagraphe 3.3, sont GAMS (de Gams Developpement Corp.), qui permet des modèles nonlinéaires, OPL Studio (d’ILOG), qui peut appeler des solveurs de propagation decontraintes en parallèle avec la programmation linéaire, Lingo (de Lindo Systems), trèsemployé dans le monde académique pour les enseignements outre-Atlantique, et MPL forWindows (de Maximal Software). On ne peut pas dire qu’un langage est définitivement 4 MISR-fsa-Agadir Mohamed ZAOUI
  6. 6. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREsupérieur à un autre. En fait, pour choisir un langage, la meilleure façon est de tester lesversions limitées qui sont proposées sur les sites web des éditeurs de logiciels. 4. Les environnements de développement intégrés (EDI) :Pour satisfaire une clientèle de plus en plus exigeante, les interfaces de développement(EDI) sont apparues et proposent des menus, des fenêtres et d’autres fonctionnalités pouraider l’utilisateur à rédiger et déboguer son modèle. Pour les PC, la plupart des éditeursfournissent un EDI agréable à utiliser. Cette interface est souvent la version disponiblegratuitement sur le web. Parmi les éditeurs déjà cités, ceux qui proposent une interface sontGAMS, OPL Studio, Lingo, MPL for Windows et, bien sûr, Visual Xpress, qui sera utilisédans ce livre. La nouvelle version Xpress-IVE propose elle aussi un EDI très proche decelui de Visual Xpress. 5. Sites web des éditeurs de logiciels :Un article de R. Fourer [Fourer 1999] très complet reprend les caractéristiques des différentslogiciels et montre tous les liens que l’on peut trouver entre les langages de modélisation, lessolveurs utilisés et les environnements de développement intégrés. La liste suivante donne lessites web des éditeurs de logiciels dont nous avons parlé. D’autres sites sont indiqués dansl’article de Fourer. Il existe aussi des versions gratuites de ce type de logiciel :  AMPL http://www.ampl.com  Cplex http://www.ilog.fr  C-Whizz http://www.keytronms.com  GAMS http://www.gams.com  GAUSS http://www.aptech.com  HS/LP http://www.harvely.com  LAMPS info@amsoft.demon.co.uk  Lindo et Lingo http://www.lindo.com  LOQO http://www.princetn.edu/~rvdb  MINOS http://www.SBSI-SOL-Optimize.com  MPL for Windows http://www.maximal-usa.com  OPL Studio http://www.ilog.fr  OSL http://www6.software.ibm.com/es/oslv2/startme.html  Xpress http://www.dash.co.uk  Xpress http://www.artelys.fr (distributeur Français de Dash) 5 MISR-fsa-Agadir Mohamed ZAOUI
  7. 7. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE Excel 1. Introduction :Le Solveur permet de rechercher la valeur optimale dune formule dans une cellule, appeléecellule cible ou fonction objectif, de la feuille de calcul. Il fonctionne avec un groupe decellules associées (directement ou indirectement) à la formule de la cellule cible. Il adapteles valeurs des cellules quon souhaite modifier, appelées cellules variables, pour fournir lerésultat spécifié à partir de la formule de la cellule cible. On peut spécifier des contraintespour limiter les valeurs susceptibles dêtre utilisées par le Solveur, et ces contraintes peuventfaire référence à dautres cellules qui ont une incidence sur la formule de la cellule cible.On utilise également le Solveur pour déterminer la valeur minimale ou maximale dunecellule en modifiant dautres cellules. Les cellules sélectionnées doivent être associées pardes formules dans la feuille de calcul.Le solveur agit par itérations successives sur une ou plusieurs variables jusquà obtenir unevaleur définie pour la valeur cible, en tenant compte des contraintes imposées. 2. Installation :Pour utiliser le solveur, il faut:  Choisir : OUTILS /MACROS COMPLEMENTAIRES…  Dans la boîte de dialogue " Macro complémentaire ", activer la case à cocher " Solveur ".  Si loption " Solveur " nest pas répertoriée dans la boîte de dialogue " Macro complémentaire ", cliquer sur " Parcourir " et rechercher le lecteur, le dossier et le nom de fichier de la macro complémentaire " Solver.xla ", qui se trouve habituellement dans le dossier MacrolibSolveur, ou ré-exécuter le programme dinstallation. 6 MISR-fsa-Agadir Mohamed ZAOUI
  8. 8. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRERemarque : Les macros complémentaires sélectionnées demeurent actives jusquà ce quonles supprime. 3. ContraintesLimites imposées à un problème du Solveur. On peut appliquer des contraintes à des cellulesajustables (modifiables), à la cellule cible ou à dautres cellules liées directement ouindirectement à la cellule cible :  pour les problèmes linéaires, il nexiste aucune limite sur le nombre de contraintes;  pour les problèmes non linéaires, chacune des cellules modifiables peut avoir les contraintes suivantes : une contrainte binaire, une contrainte de nombre entier avec limite supérieure et / ou inférieure. On peut spécifier une limite supérieure ou inférieure pour 100 autres cellules au maximum.Les opérateurs suivants peuvent être utilisés dans les contraintes :Opérateur Signification<= Inférieur ou égal à>= Supérieur ou égal à= Égal àint Nombre entier (applicable uniquement aux cellules modifiables)bin Binaire (applicable uniquement aux cellules modifiables)Exemple :Calcul dun budget loisirsJe voudrais me rendre 20 fois au spectacle (Cinéma, Théâtre et Concert) et  je veux voir au moins 5 films et assister à au moins 3 concerts,  il ne faut pas que le nombre de films dépasse le double du nombre de pièces de théâtre,  le prix dune place de cinéma est de 200 F, dune place de théâtre est de 350 F et dune place de concert est de 500 F. Entre quelles valeurs minimale et maximale mon budget loisirs peut-il varier ? Création de la feuille de calcul : o Dans cet exemple, on réserve les cellules B11 à F11 pour créer le modèle. Ces cellules sont nommées respectivement x, y, z, BUDGET et N. o On initialise le nombre de places de cinéma, de théâtre et de concert en B11, C11 et D11 (x, y, z) à 0. 7 MISR-fsa-Agadir Mohamed ZAOUI
  9. 9. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE o Ensuite, on entre la formule de la fonction objectif en E11 (BUDGET) : =200*X+350*Y+500*Z (le prix dune place de cinéma est de 200 F …). o Enfin, on indique en F11 (N) la formule : =X+Y+Z (Je voudrais me rendre 20 fois au spectacle …). Les contraintes : Je voudrais me rendre 20 fois au spectacle … N=20 je veux voir au moins 5 films et x >= 5 assister à au moins 3 concerts z >= 3 il ne faut pas que le nombre de films dépasse x <= 2y le double du nombre de pièces de théâtre, x = entier les nombres de places doivent des nombres entiers y = entier Pour utiliser le solveur, il faut : o Sélectionner la cellule qui contient la fonction objectif : E11 ou BUDGET o Utiliser la commande : SOLVEUR…/OUTILS o Indiquer les paramètres du solveur à laide de la boîte de dialogue suivante :  la cellule cible à définir, cest la cellule qui contient la fonction objectif, ici : E11 ou BUDGET ;  cette fonction doit atteindre le minimum, choisir MIN ;  les cellules variables sont les nombres de séances de cinéma, théâtre et concert, ici : B11 à D11 ;  ajouter la contrainte suivante N = 20 : bouton " Ajouter ", " Cellules " : F11, " Signe " =, " Contrainte " : 20 et valider avec OK ou AJOUTER ;  de la même manière, ajouter les autres contraintes ; 8 MISR-fsa-Agadir Mohamed ZAOUI
  10. 10. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE  valider ces paramètres à laide du bouton : " Résoudre ".  On ré-exécute une deuxième fois le solveur en remplaçant MIN par MAX. Voici les résultats obtenus : Nombres de places de Budgets loisirs cinéma théâtre concert Minmum 5 800 11 6 3 Maximum 8 050 5 3 124. Résultats du Solveur : Garder la solution du solveur : Cliquer sur cette option pour accepter la solution et placer les valeurs obtenues dans les cellules variables. Rétablir les valeurs dorigine : Cliquer sur cette option pour rétablir les valeurs dorigine dans les cellules variables. Rapports : Crée le type de rapport spécifié et place chaque rapport dans une feuille distincte du classeur. o Réponses : Répertorie la cellule cible et les cellules variables accompagnées de leurs valeurs dorigine et finale, des contraintes ainsi que des informations sur ces dernières. o Sensibilité : Fournit des informations sur le niveau de sensibilité de la solution aux modifications mineures apportées à la formule figurant dans la zone Cellule cible à définir de la boîte de dialogue Paramètres du solveur ou aux contraintes. Ce rapport nest pas généré pour les modèles imposant des contraintes sur les nombres entiers. Pour les modèles non linéaires, le rapport fournit des valeurs pour les gradients réduits et les multiplicateurs Lagrange. Pour les modèles linéaires, le rapport inclut des coûts réduits, des prix fictifs, un 9 MISR-fsa-Agadir Mohamed ZAOUI
  11. 11. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE coefficient objectif (augmentation et réduction autorisées) et des contraintes sur les plages de droite. o Limites : Répertorie la cellule cible ainsi que les cellules variables accompagnées de leurs valeurs respectives, de leurs limites inférieure et supérieure et de leurs valeurs cibles. Ce rapport nest pas généré pour les modèles nimposant aucune contrainte sur des nombres entiers. La limite inférieure correspond à la plus petite valeur quune cellule variable peut accepter tout en maintenant les autres cellules variables inchangées et en respectant les contraintes. La limite supérieure est la valeur la plus élevée.Options du solveur :Vous pouvez contrôler les fonctionnalités avancées du processus de résolution, charger ouenregistrer des définitions de problèmes, ainsi que définir des paramètres pour des problèmeslinéaires et non linéaires. Chaque option est associée à un paramètre par défaut qui estadapté à la plupart des problèmes.  Temps max : Limite la durée du processus de résolution. Bien que vous puissiez introduire toute valeur inférieure ou égale à 32 767, la valeur par défaut, 100 (secondes), convient à la plupart des problèmes mineurs.  Itérations : Limite la durée du processus de résolution en limitant le nombre de calculs intermédiaires. Bien que vous puissiez introduire toute valeur inférieure ou égale à 32 767, la valeur par défaut, 100, convient à la plupart des problèmes mineurs.  Précision : Contrôle le niveau de précision des solutions en utilisant le nombre que vous introduisez pour déterminer si la valeur dune cellule soumise à une contrainte atteint une cible ou correspond à une limite inférieure ou supérieure. Vous devez indiquer le niveau de précision sous la forme dun nombre décimal compris entre 0 (zéro) et 1. Plus le nombre tapé comporte de décimales, plus le niveau de précision est élevé : par exemple, 0,0001 correspond à une précision plus élevée que 0,01. Toutefois, plus le niveau de précision est élevé, plus le processus de résolution est long.  Tolérance : Représente le pourcentage dans la mesure duquel la cellule cible dune solution qui satisfait aux contraintes de nombre entier peut différer de la valeur optimale vraie tout en demeurant acceptable. Cette option sapplique uniquement aux problèmes imposant des contraintes sur les nombres entiers. Un niveau de tolérance plus élevé tend à accélérer le processus de résolution.  Convergence : Lorsque la modification relative de la valeur de la cellule cible est inférieure au nombre spécifié dans la zone Convergence, le Solveur sarrête. La convergence sapplique uniquement aux problèmes non linéaires et doit être indiquée par un nombre décimal compris entre 0 (zéro) et 1. Plus le nombre tapé comporte de décimales, plus la convergence est faible : par exemple, 0,0001 correspond à une modification relative inférieure à 0,01. Toutefois, plus la valeur de convergence est faible, plus le processus de résolution par le Solveur est long. 10 MISR-fsa-Agadir Mohamed ZAOUI
  12. 12. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE  Modèle supposé linéaire : Activer cette case à cocher pour accélérer le processus de résolution lorsque toutes les relations du modèle sont linéaires et que vous souhaitez résoudre un problème doptimisation linéaire ou une approximation linéaire à un problème non linéaire.  Afficher le résultat des itérations : Activer cette case à cocher pour interrompre le Solveur et afficher les résultats de chaque itération.  Échelle automatique : Activer cette case à cocher pour appliquer la mise à léchelle automatique lorsque lécart est important entre les entrées et les sorties, par exemple, en cas de maximisation du pourcentage du bénéfice obtenu à la suite dinvestissements exprimés en millions.  Supposé non-négatif : Impose au Solveur une limite inférieure égale à 0 (zéro) sur toutes les cellules variables pour lesquelles vous navez pas défini une limite inférieure dans la zone Contrainte de la boîte de dialogue Ajouter une contrainte.  Estimations : Spécifie lapproche utilisée pour obtenir les estimations dorigine des variables de base dans le cadre de chaque recherche unidimensionnelle.  Tangente : Utilise lextrapolation linéaire à partir dun vecteur tangentiel.  Quadratique : Utilise lextrapolation quadratique, qui permet daméliorer les résultats pour les problèmes hautement non linéaires.  Dérivées : Spécifie la différenciation utilisée pour estimer les dérivées partielles des fonctions dobjectif et de contrainte.  À droite : Utiliser cette option pour la plupart des problèmes dans lesquels les valeurs de contrainte changent relativement lentement.  Centrée : Utiliser cette option pour les problèmes dans lesquels les contraintes changent rapidement, particulièrement près des limites. Bien que cette option nécessite davantage de calculs, elle peut savérer utile lorsque le Solveur renvoie un message indiquant quil nest pas en mesure daméliorer la solution.  Recherche : Spécifie lalgorithme utilisé pour chaque itération afin de déterminer le sens de la recherche.  Newton : Fait appel à une méthode de type Newton qui nécessite généralement davantage de mémoire, mais moins ditérations que la méthode de recherche par gradient conjugué.  Gradient conjugué : Nécessite moins de mémoire que la méthode Newton, mais requiert généralement un plus grand nombre ditérations pour atteindre un niveau de précision particulier. Utiliser cette option pour résoudre un problème important avec une quantité de mémoire limitée ou lorsque lexamen des itérations révèle une progression lente entre chaque étape.  Charger un modèle : Affiche la boîte de dialogue Charger un modèle, dans laquelle vous pouvez indiquer la référence du modèle à charger.  Enregistrer le modèle : Affiche la boîte de dialogue Enregistrement du modèle, dans laquelle vous pouvez indiquer lemplacement où le modèle doit être enregistré. Utilisez cette option uniquement lorsque vous souhaitez enregistrer plusieurs modèles avec une feuille de calcul, dans la mesure où le premier modèle est automatiquement enregistré.. 11 MISR-fsa-Agadir Mohamed ZAOUI
  13. 13. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE LindoI. Introduction :Lindo (Linear INteractive and Discrete Optimizer) est un logiciel utilisé pour résoudre lesmodèles d’optimisation linéaires, entiers et quadratiques. Une des caractéristiques de Lindoc’est qu’il offre des outils qui peuvent aider à l’analyse des modèles en utilisant la méthode deSimplexe.Caractéristiques de LINDO:II. Installation du LogicielPour utiliser cette version de Lindo il est conseillé d’avoir au moins un processeur 486 et 8Mode mémoire RAM. Il faut aussi prévoir un espace disque dur de 2Mo pour pouvoir l’installer.Les étapes de l’installation sont :1. Démarrer Windows.2. Insérer le CD-ROM ou la disquette.3. Cliquer sur l’icône Setup (install) dans votre explorateur de Windows4. Suivre les instructions sur l’écranPour plus d’information sur ce logiciel visiter l’adresse web : www.lindo.comIII. Résolution d’un exempleDans cette section, et sur la base de l’exemple de l’agriculteur, on va focaliser notreattention sur les opérations suivantes : introduire les données, résoudre le problème, etanalyser les résultats que donne LINDO.a. Le problème de l’agriculteurLe programme linéaire qui modélise le problème de l’agriculture est :Max 100 x1  200 x2s.c. x1  x2  150 4 x1  2 x2  440 x1  4 x2  480 x1  90 x1  0, x2  0 12 MISR-fsa-Agadir Mohamed ZAOUI
  14. 14. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREb. Introduction des donnéesDouble cliquer sur l’icône «lindo 6.0 for Windows » de votre menu démarrer/programmes. Lelogiciel va s’exécuter et vous aurez cette fenêtre qui s’affiche sur votre écran :Dans tous les modèles de Lindo la fonction objectif est définie en première ligne. Dans notreexemple la fonction objectif est :Max _ 100 _ x1 _  _ 200 _ x2Les tirés bas indique la présence d’un espace obligatoire entre les entrées pour pouvoir lesdifférentiées.Il faut noter qu’on peut remplacer x1 et x2 par n’importe quel mot qui indique ces deuxvariables, par exemple, on peut remplacer x1 par "tomates" et x2 par "piments". Une autrecaractéristique est que Lindo ne fait pas de différence entre majuscule et minuscule. Pour luila variable « TOMATE » est la même que la variable « tomAtE ».Pour commencer à écrire les contraintes, il faut introduire la mention « subject to » ou toutsimplement son abréviation « st ».Dans notre exemple les contraintes sont :subject _ toterrain) x1 _  _ x 2 _  _ 150eau) 4 _ x1 _  _ 2 _ x 2 _  _ 440M o) x1 _  _ 4 _ x 2 _  _ 480bureau) x1 _  _ 90On remarque qu’on peut appeler chaque contrainte par un nom nominatif que Lindo vautiliser pour afficher les résultats.L’écran qu’on obtient après avoir introduit les différents paramètres est le suivant :On n’a pas à ajouter les contraintes de non-négativité, Lindo suppose par défaut que lesvariables de décision sont de types nonnégative.c. Résolution du problèmeAprès avoir écrit convenablement le programme linéaire, on passe maintenant à larésolution.Pour résoudre notre programme il faut cliquer sur le bouton « » dans la barre d’outils.Lindo va commencer ainsi à compiler le modèle. Si un message d’erreur s’affiche c’est quele programme, par exemple, est non borné ou bien non réalisable... 13 MISR-fsa-Agadir Mohamed ZAOUI
  15. 15. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRELors de la compilation, on voit une barre qui montre le pourcentage de travail effectué.d. Interprétation des résultatsS’il n’y a pas d’erreur de formulation, Lindo va commencer à résoudre le problème. Pardéfaut, il va vous demander si vous voulez faire une analyse de sensibilité. Pour le moment onva répondre « Non ».Avant que Lindo nous propose un premier rapport sur la solution optimale, il nous donnel’état du problème exprimé par cette fenêtre :Ce rapport préliminaire nous indique que :a) Status : Optimal ; Il nous informe sur l’état de la solution actuelle. Elle peut être Optimal (optimale), Feasible (réalisable), Infeasible (non réalisable) ou Unbounded (non bornée).b) Iterations : 2 ; Il indique le nombre d’itérations nécessaire pour résoudre le problème (en utilisant la version révisée de la méthode de Simplexe).c) Infeasibility : 0 ; Ceci indique la quantité de violation dans les contraintes.d) Objective : 26000 ; C’est la valeur de fonction objectif relative à la solution actuelle.e) Best IP : N/A ; C’est la meilleure valeur de la fonction objectif. Ceci n’est vrai que pour les problèmes de type entier.f) IP Bound : N/A ; C’est la borne de la fonction objectif pour cette solution. Ceci n’est vrai que pour les problèmes de type entier.g) Branches : N/A ; C’est le nombre de variables entiers « branched on » par Lindo. Ceci n’est vrai que pour les programmes de type entier.h) Elapsed Time : 00 :06 :45 ; C’est le temps écoulé avant que le résolveur ne soit invoqué (ce temps est variable même pour le même exemple).Si on ferme cette fenêtre, on remarque qu’un autre rapport s’affiche. Ce rapport contientdes informations sur la solution optimale. 14 MISR-fsa-Agadir Mohamed ZAOUI
  16. 16. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREDans le tableau ci-dessus s’affichent dans la première colonne les différentes variables dedécision et aussi les variables d’écart relatives à chaque contrainte du programme. Leursvaleurs sont données dans la deuxième colonne. On vérifie bien que la solution optimalecoïncide avec la solution déjà retrouvée dans les précédants chapitres. La troisième colonnereprésente les valeurs nettes, i.e. c j  z j . Pour les variable d’ecart c’est les prix duals.III. Les commandes de LindoDans cette section, on décrit brièvement les différentes commandes présentes dans lelogiciel Lindo.Dans l’environnement Windows, Lindo divise ces commandes en six catégories.1. Filea) New : Créer un nouveau document.b) Open : Ouvrir un document existant et le placer dans une fenêtre d’édition (cette fenêtre a une capacité maximale de 64000 caractères).c) View : Ouvrir un document existant dans une fenêtre de vision (view window). Ce genre de fenêtre permet d’importer des programmes à plus de 64000 caractères de votre éditeur (tels que Word). Quelques opérations ne sont pas autorisées dans un view window tels que : couper, copier, coller, effacer…d) Save : Enregistrer. Le format par défaut est le *.ltx, et c’est le format texte de Lindo.e) Save as : Enregistrer sous. D’autres formats sont présents tels que le *.lpk (c’est un format compressé qui ne peut être lu par aucun autre éditeur autre que celui de Lindo) ou le *.mps (malgré qu’il n’accepte pas les commentaires dans le rapport, ce format est utilisé par d’autres logiciels)f) Close : fermé.g) Print : Imprimé.h) Priter setup : propriétés de l’imprimante.i) Log Output : Pour ouvrir ou fermer des log file utilisés pour enregistrer les résultats de votre session. 15 MISR-fsa-Agadir Mohamed ZAOUI
  17. 17. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREj) Take Commands : Pour exécuter des macros.k) Basis Read : Pour charger du disque une solution de base pour le modèle actif.l) Basis Save : Enregistrer sur le disque la solution de base du modèle actif.m) Title : Afficher le nom pour le modèle actif.n) Date : Afficher la date.o) Elapsed Time : Afficher le temps écoulé depuis le commencement de la session.p) Exit : Quitter Lindo.2. Editiona) Undo :Annuler la dernière opération.b) Cut : Couperc) Copy : Copierd) Paste : Collere) Clear : Effacerf) Find /Replace : Rechercher/Remplacerg) Options : Utiliser pour modifier les paramètres par défaut du système.h) Go to Line : aller à la ligne numéro .. de la fenêtre active.i) Paste Symbol : Elle affiche une fenêtre de dialogue qui contient les syntaxes, les variables et les noms des lignes réservés par Lindo. On peut utiliser cette commande pour ajouter des contraintes supplémentaires au modèle. 16 MISR-fsa-Agadir Mohamed ZAOUI
  18. 18. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREj) Select All : Sélectionner Toutk) Clear All : Effacer toutl) Choose New Font : Choisir les polices dans la fenêtre active.3. Solvea) Solve : Résoudre le modèle dont la fenêtre est activeb) Compile Model : Compiler (sans résoudre) le modèle dont la fenêtre est activec) Debug : Débugger le modèle dont la fenêtre est active, s’il est non réalisable ou non borné. Dans le cas d’un problème non réalisable, la commande Debug détecte l’ensemble des contraintes (sufficient set), dont l’élimination est suffisante pour garantir une solution optimale. Et il détermine aussi un ensemble de contraintes (necessary set), dont la modification entraîne nécessairement un modèle réalisable. Dans le cas d’un problème non borné, la commande Debug détecte l’ensemble des variables de décision (sufficient set), dont la fixation de leurs valeurs est suffisante pour garantir une solution optimale. Et il détermine aussi un ensemble de variables de décision (necessary set), dont la modification entraîne nécessairement un modèle borné.d) Pivot : Une des opérations fondamentales dans la méthode de Simplexe est l’opération pivot, qui correspond à une itération du simplexe. Lindo nous donne la possibilité de choisir nous même les variables entrantes et sortantes et nous permet ainsi de résoudre le programme itération par itération.Exemple : Essayons de résoudre le problème de l’agriculteur en utilisant la commande« Pivot ».La variable entrante dans le premier tableau de Simplexe est X2 et la variable sortante est lavariable d’écart de la contrainte dans la 4ième ligne. 17 MISR-fsa-Agadir Mohamed ZAOUI
  19. 19. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRELe rapport suivant s’affiche :Donc cette itération a fait passer la valeur de la fonction objectif à 24000.Pour pouvoir choisir les variables entrantes et sortantes on peut afficher le tableau deSimplexe relatif à la dernière itération en utilisant la commande « Tableau » dans le menu« Reports ». On obtient :D’après le tableau ci-dessus, la variable entrante est X1 et la variable sortante est SLK 2.On obtient ainsi le résultat suivant :La valeur de la fonction objectif est optimale et on peut vérifier que le tableau de simplexerelatif à cette dernière itération est optimal :e) Preemptive Goal : Cette commande peut résoudre un problème à objectif multiples en adoptant une manière lexicographique. Ainsi on optimise le premier objectif puis le second sous une contrainte supplémentaire que le premier est égale à la valeur optimale déjà trouvée. Plus précisément, supposons que l’agriculteur peut acheter des ressources supplémentaires avec un prix de 40 dinars pour un hectare de terrain(Y1), 10 dinars le m 3 d’eau (Y2) et 8 dinars l’heure supplémentaire de main d’œuvre (Y3). Les quantités disponibles sur le marché respectivement pour Y1, Y2 et Y3 sont de 10 hectares de terrain, 5 m3 d’eau et 4 heures de main d’œuvre. On appelle G le gain issu de la culture et D les dépenses d’achat des ressources supplémentaires. Le programme peut s’écrire sous cette forme : 18 MISR-fsa-Agadir Mohamed ZAOUI
  20. 20. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRELa résolution avec la commande « Preemptive Goal » nous donne les résultats suivants :4. Reportsa) Solution : Elle donne un rapport de résolution standard avec ou sans les variables nonnulles.b) Range : Cette commande donne la marge de variation des coefficients de la fonctionobjectif et du second membre sans que la base dans la solution optimale ne change. Pourl’exemple de l’agriculteur, cette commande donne les résultats suivants : 19 MISR-fsa-Agadir Mohamed ZAOUI
  21. 21. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREc) Parametrics : Cette commande permet de faire une analyse paramétrique du secondmembre des contraintes. Par exemple, après avoir résolu le problème de l’agriculteur, onaimerait avoir une idée sur la variation de la valeur de la fonction objectif suite à unevariation entre 150 à 300 hectares de la surface de terrain disponible. En utilisant cettecommande, une fenêtre de dialogue s’ouvre. On fait entrer le numéro de la contrainte àétudier (2) ainsi que la variation du second membre (300). On peut aussi choisir le type derapport de résultat. Dans notre cas, le choix sest porté sur un graphique à deux dimensions.Le rapport qu’on obtient est le suivant :d) Statistics : Cette commande affiche des statistiques relatives au problème actif dans lafenêtre du rapport tel que le nombre de variables de décision, le nombre de lignes…e) Pereuse : Cette commande est utilisée pour générer un rapport sous forme de texte ou degraphique (en 2D ou en 3D) relatif aux résultats du problème actif. Le menu associé à cettecommande est le suivant : 20 MISR-fsa-Agadir Mohamed ZAOUI
  22. 22. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREOn a choisi ici d’avoir un rapport graphique sur les valeurs des variables de décision ainsi surles variables duales qui leurs sont associées dans le problème de l’agriculteur. Le résultat estle tableau suivant :f) Picture : Cette commande permet de créer un texte ou une figure qui illustre les différents paramètres du problème. La fenêtre de dialogue associée à cette commande est la suivante : Le résultat obtenu pour le problème de l’agriculteur est le suivant :g) Basis Picture : Cette commande affiche dans la fenêtre rapport une figure qui représente la matrice de base actuelle (relatif à la solution trouvée en exécutant la commande solve du même menu). Le rapport qu’on obtient en exécutant cette commande pour le problème de l’agriculteur est : 21 MISR-fsa-Agadir Mohamed ZAOUI
  23. 23. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREh) Tableau : Cette commande affiche le tableau de Simplexe relatif à la solution en cours. Si la solution est optimale, cette commande permet d’avoir le tableau de Simplexe optimal. Dans le problème de l’agriculteur le tableau de Simplexe optimal obtenu en utilisant cette commande est :i) Formulation : Elle permet de visualiser un élément sélectionné (des lignes) ou tout le problème dans la fenêtre rapport.j) Show Column : Cette commande vient s’ajouter à la commande formulation, elle nous permet de visualiser des colonnes (choix relatifs aux variables de décision) dans la fenêtre du rapport.k) Positive Definite : Cette commande est utilisée pour les problèmes quadratiques pour s’assurer que la valeur optimale est globale.5. Windowa) Open Command Window : Cette commande ouvre une fenêtre de dialogue qui sert à éditer des macros pour Lindo.b) Open Status Window : Cette commande ouvre la fenêtre de dialogue qui affiche l’état du programme Lindo (Lindo Solver Status).c) Send to Back : Cette commande est utilisée pour balancer les fenêtres en arrière plan.d) Cascade : Cette commande arrange les fenêtres qui s’affichent sur l’écran sous une forme dite cascade.e) Title : Cette commande arrange les fenêtres de manière à redimensionner ces fenêtres et les afficher horizontalement ou verticalement selon votre choix. 22 MISR-fsa-Agadir Mohamed ZAOUI
  24. 24. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREf) Close All : Cette commande permet de fermer toutes les fenêtres actives.g) Arrange Icons : Cette commande permet d’arranger les fenêtres réduites sous forme d’icône.6. Helpa) Contents : Cette commande ouvre la fenêtre d’aide de Lindob) Search for Help On… : Cette commande permet la recherche rapide par mots clés.c) How to Use Help : Cette commande affiche un menu qui informe sur la manière dont on peut utiliser le menu Help.d) About LINDO… : Cette commande affiche quelques informations concernant la version du logiciel Lindo utilisé.VI. Programmation à nombres entiersOn peut utiliser Lindo pour résoudre des problèmes en nombres entiers. Il suffit de mentionnerque les variables du problème sont de type entier.On va supposer ici que dans le problème de l’agriculteur les variables de décision X1 et X2sont de type entier. On sait déjà que la solution optimale va demeurer inchangée puisque lesvaleurs de ces variables à l’optimum sont des entiers.Pour utiliser Lindo, il faut procéder comme avant :1/ On fait entrer la fonction objectif2/ Commencer à écrire les contraintes après avoir introduit la mention « Subject to »Après avoir terminer l’édition des contraintes il faut ajouter la commande « END », qui indiqueque l’édition des contraintes est terminée. Ainsi on peut définir la nature des variables dedécision.Pour dire qu’une variable X est de typea) Entiers (XIN), on écrit : « GIN _ X »b) Binaire (X={0,1}), on écrit : « INT _ X »c) Non bornée (XIR), on écrit : « FREE _ X »Pour le problème de l’agriculteur à variables entiers on écrit : 23 MISR-fsa-Agadir Mohamed ZAOUI
  25. 25. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRELa résolution de ce problème donne le résultat suivant : 24 MISR-fsa-Agadir Mohamed ZAOUI
  26. 26. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE CPLEXIntroduction :CPLEX (édité par la société ILOG) est un solveur de programmation linéaire, c’est-à-dire unlogiciel permettant de résoudre des problèmes d’optimisation linéaire. Plusieurs typesd’algorithmes de résolution sont disponibles, en particulier l’algorithme du simplexe et unalgorithme de points intérieurs.Deux modes d’utilisation sont disponibles : via une API, permettant d’interfacer CPLEX à l’aided’un langage de programmation (de type Java ou C++), et un mode interactif, en lignes decommande.Principales commandes du mode interactif :Sous Windows, on peut lancer CPLEX à partir du menu Démarrer (dans le répertoire ILOG, ouun de ses sous-répertoires). Une fois que CPLEX est lancé, un prompt apparaît et on peutentrer l’ensemble des commandes du mode interactif. Dans ce mode, un seul PL peut êtrechargé à la fois dans CPLEX (un nouveau PL “chassant” l’ancien). Nous allons lister iciles principales commandes utilisables dans ce mode. Commençons par les commandes debase :  La commande help fournit la liste de toutes les commandes disponibles. La commande help nom_commande fournit des informations sur la commande nom_commande.  La commande xecute ligne_commande exécute, sans quitter CPLEX, la commande Windows ligne_commande (par exemple dir ).  La commande quit permet de quitter CPLEX.  La commande set affiche la liste des paramètres de CPLEX modifiables. On peut ensuite modifier n’importe lequel de ces paramètres en entrant son nom (on peut aussi le faire directement avec la commande set nom_parametre).  La commande optimize lance la résolution du PL actuellement chargé dans CPLEX. Par défaut, c’est l’algorithme du simplexe qui est utilisé.Deux remarques : 1. Pour la plupart des commandes qui attendent un argument (comme help nom_commande ou set nom_parametre, par exemple), entrer le nom de la commande uniquement (sans argument) a pour effet d’afficher la liste de tous les arguments possibles. 2. CPLEX est capable de compléter automatiquement les noms de commandes, lorsqu’ils ne sont pas ambigus. Par exemple, CPLEX comprendra que h signifie help (car aucune autre commande ne commence par la lettre “h”).Détaillons à présent les autres commandes.  La commande enter nom_pb permet d’entrer un nouveau PL, qui s’appellera nom_pb. On peut alors commencer la saisie de ce PL, au format LP, détaillé plus loin.  La commande display argument permet d’afficher toutes les informations dont dispose CPLEX concernant l’option argument. L’option argument a cinq valeurs possibles : iis, problem, sensitivity, settings, solution.  La commande write mon_fichier.lp écrit le PL actuellement chargé dans CPLEX (au format LP) dans le fichier texte mon_fichier.lp. La commande write mon_fichier.bas 25 MISR-fsa-Agadir Mohamed ZAOUI
  27. 27. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE écrit la solution optimale du PL qui vient d’être résolu par CPLEX dans le fichier texte mon_fichier.bas.  La commande read mon_fichier.lp charge dans CPLEX le PL contenu dans le fichier mon_fichier.lp (au format LP).  La commande add permet d’entrer de nouvelles contraintes au PL courant (comme après le mot-clé st, cf la description du format LP), au format LP. Si elle est suivie du mot-clé bounds, elle permet d’entrer de nouvelles bornes pour une ou plusieurs variables (cf encore la description du format LP). Il faut terminer la saisie par le mot- clé end.  La commande change affiche la liste des modifications possibles à appliquer au PL courant (effacer un élément, changer les bornes d’une variable, un coefficient, un nom, etc.). La modification désirée peut alors être effectuée.Le format de fichier LPTous les PL que l’on veut résoudre avec le mode interactif de CPLEX doivent être entrés auformat LP, que ce soit dans un fichier texte (qui sera chargé dans CPLEX à l’aide de lacommande read) ou après la commande enter nom_pb. Le nom d’un fichier textecontenant un PL au format LP doit finir par “.lp”. Voici une description d’un PL au format LP :Ce fichier LP correspond au PL suivant :Quelques remarques :  Le mot-clé maximize peut être remplacé par minimize (si on minimise la fonction de coût).  Le mot-clé st peut être remplacé par subject to.  La section commencée par le mot-clé bounds contient uniquement des contraintes de bornes (du type a _ x _ b). Par défaut, si on ne précise pas de borne inférieure pour une variable x, on a x _ 0. Si on ne précise pas de borne supérieure, il n’y en a aucune par défaut.  Le mot-clé end est obligatoire à la fin.  Le nom de la fonction objectif (“Nom_objectif” ici) et les noms des contraintes (“Nom_contrainte1”, “Nom_contrainte2”, “Nom_contraintei” ici) sont facultatifs. Par défaut (c’est-à-dire, si on ne les redéfinit pas), le nom de la fonction objectif est “obj” et les noms des contraintes sont “c1”, “c2”, etc. (dans l’ordre d’apparition). Dans ce cas, on n’écrit pas “:” devant la contrainte. 26 MISR-fsa-Agadir Mohamed ZAOUI
  28. 28. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE OPL Studio 1) Introduction :Ilog OPL Studio est un produit de la société Ilog. C’est un outil de modélisation et derésolution des problèmes en :  Programmation mathématique 1. Programmation linéaire, 2. Programmation linéaire en nombres entiers, 3. Programmation mixte  Programmation par contraintesOPL studio est caractérisé essentiellement par la simplicité de son langage et par lapuissance de ses méthodes de résolution des problèmes en programmation par contraintes. 2) Manipulation de OPL StudioEn lançant OPL studio, la fenêtre principale de OPL s’affiche comme suit : Figure : Menu principal de OPL Studio 27 MISR-fsa-Agadir Mohamed ZAOUI
  29. 29. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRECommencer par créer un nouveau projet, en cliquant sur File new Project. Le projets’affiche par défaut sous le nom noname dans la fenêtre gauche de l’espace de travail.Pour insérer un nouveau modèle au projet, cliquer avec le bouton droit, sur le projet puischoisir Add New Model File comme le montre la figure ci-dessus. Dans la fenêtre droite del’espace de travail, saisir le programme à exécuter et lancer l’exécution.Pour lancer l’exécution du programme, Cliquer sur Execution Run. Sinon, cliquerdirectement sur l’icône dans la barre d’outils. Pour arrêter l’exécution ou lancer une autreexécution cliquer sur Execution Abort, ou bien cliquer directement sur dans la barred’outils. 3) Syntaxe du langage OPLPrésentation de la syntaxeUn programme OPL se présente sous la forme suivante :  Pour écrire un message sur plusieurs lignes, utiliser /*………………*/. Par ailleurs, quand il s’agit d’un message sur une seule ligne, il suffit d’écrire / / au début de la ligne.  Quand on utilise le type int pour une variable, il faut préciser l’intervalle dans lequel l’entier peut se trouver.Exemple : var int X[1..3] in 0..10000; 4) Exemple de modèle OPL 28 MISR-fsa-Agadir Mohamed ZAOUI
  30. 30. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE Matlab1. Introduction :Matlab est en même temps un langage de programmation et un environnement permettantdutiliser ce langage. Ce langage fut développé dans les années 70 pour des applicationsimpliquant des matrices, lalgèbre linéaire et lanalyse numérique. Le mot "Matlab" est en faitla forme courte de "Matrix Laboratory".2. ENVIRONNEMENT MATLAB :L’environnement MATLAB se présente sous la forme d’un espace de travail (Workspace), o`uun interpréteur de commandes exécute des opérations et fonctions MATLAB. Les sources decelles-ci sont disponibles, écrites en “ langage ”MATLAB, voire en C ou en Fortran. L’utilisateur peut à sa guise les modifier, mais en s’eninspirant, il peut surtout créer et rajouter ses propres fonctions.">>" symbole/prompt apparaissant à gauche et indiquant que linterpréteur est prêt àrecevoir une commande.3. Variables :Les variables définies par lutilisateur sont rangéesdans lespace mémoire de Matlab, ces variables sontdites globales.Le "Workspace browser" permet dobserver lesvariables existantes. Les commandes who ou whospermettent dobtenir les mêmes informations.Pour lancer le Workspace browser, icône:4. Répertoires de travail :Matlab permet douvrir, de créer, de modifier etc…des fichiers. Matlab sauvegarde tous les fichierscréés dans le répertoire par défaut quil est possiblede modifier à laide de la commande "cd" ou enlançant le "path browser" à laide de licône suivant :La fenêtre suivante apparaît, il est alors possible dechanger le répertoire courant. 29 MISR-fsa-Agadir Mohamed ZAOUI
  31. 31. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREQuand une commande est tapé, matlab recherche celle-ci dans lensemble des répertoiresdont la liste apparaît dans la fenêtre "path", on peut ajouter ou supprimer un répertoire deson choix.5. Editeur :On l’appelle soit par son icône à partir du gestionnaire de programmes, soit directement àpartir de MATLAB en sélectionnant FileNew-Mfile.6. Aide en ligne :En plus de l’aide de Windows, une aide en ligne est disponible pour chaquecommande de MATLAB. Il suffit d’introduire : help nom de commandehelpwin ouvre une fen^etre contenant la liste des commandes Matlab ainsi que leursdocumentationshelp donne la liste de toutes les commandes par th_emeslookfor nom recherche une instruction _a partir du mot cl_e nomCommentairesLe symbole % introduit un commentaire, celui-ci nest pas évalué par linterpréteur. 30 MISR-fsa-Agadir Mohamed ZAOUI
  32. 32. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE7. Données :Vecteurs :Vecteur ligne>> v=[1 2 3 4 5] ; % vecteur 1*5>> v=[1:5]; % résultat identique à la ligne précédente (incrément de 1 par défaut)>> v= [1:1:5]; % idem incrément spécifiéVecteur transposé>> v=[1 2 3 4 5] ; % vecteur 5*1>> v=[1:5];>> v= [1:1:5];>> w=v;>> v1 =[borne inf:increment:borne sup];>> v1(i) ; %ième élément ATTENTION le premier est à i=1>> length(v) %dimension du vecteurMatrices :>>A=[1 2 3; 4 5 6;7 8 9; 10 11 12]; %matrice rectangle 4*3>>B=[123] %matrice 3*1>> size(A); %dimension de la matrice>>A(i,j); % élément ligne i colonne j>>A(:,n); % nième colonne>>A(p,:); % pième ligne>>A(i:j,:); % sous matrice des lignes i à j>>A(i:j,k:l); % sous matrice des lignes i à j colonnes k à lSuppression des données :>> clear % supprime toutes les variables>> clear A % supprime la variable ARemarque : Dans MATLAB, les indices des vecteurs et matrices doivent être desentiers positifs. L’indice zéro n’est donc pas plus admis que les indices négatifs.8. GRAPHISME :Tout tracé avec Matlab, seffectue dans une fenêtre graphique que lon crée par lacommande figure ou quand on exécute une commande de dessin (plot …). On peut créerautant de fenêtres graphiques que lon veut celles-ci étant numérotées de 1 à N au fur et àmesure de leur création. La fenêtre graphique par défaut et la dernière qui a été créée parfigure ou la dernière activée par une commande de dessin ou sélectionnée avec la souris.  figure % crée une fenêtre graphique qui devient la figure par défaut,  figure(n) % crée une fenêtre graphique numéro n qui devient la fenêtre active. Fonctions plot t = 0:0.1:5; x = 2*sin(2*pi*t); plot(t,x); % dessin de x en fonction de t, interpolation linéaire entre les points. plot(t,x,-) % idem avec style - - - plot(t,x,b-) % idem style --- couleur bleue plot(t,x,o) % idem pas dinterpolation, chaque point marqué par oUn plot provoque leffacement du dessin précédent (par défaut) on peut superposer desdessins en mettant le commutateur hold à on 31 MISR-fsa-Agadir Mohamed ZAOUI
  33. 33. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE  hold on % désactivation par hold off  title(Titre de la figure);  xlabel(commentaire sur laxe x);  ylabel(idem axe y);  axis([xmin,xmax,ymin,ymax]); % définit léchelle des axes  egend(tracé 1,tracé 2,….) ; %chaque tracé est associé à une légende  grid % affiche une grille  text(x,y,texte) % place texte à la position x y dans la fenêtre  gtext(texte") % place texte à la position définie avec la sourisUne fenêtre graphique peut être subdivisée en plusieurs tracés,subplot(n,p,q) % subdivision en n*q dessin et sélectionne à qième9. SIMULINK:Dans la fenêtre de commande de Matlab: La fenêtre suivante contenant les librairies de simulink, apparaît ainsi quune fenêtre de travail. 32 MISR-fsa-Agadir Mohamed ZAOUI
  34. 34. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE AMPL1. IntroductionAMPL est un logiciel qui permet de formuler mathématiquement des problèmesd’optimisation. Le modèle est décrit par l’utilisateur dans un langage humainementcompréhensible. Le rôle d’AMPL est de générer une autre représentation équivalente maisfacilement compréhensible par l’algorithme qui résoudra le problème. Cette dernièrereprésentation est typiquement extensive (par exemple la matrice pour un problèmelinéaire).2. Constantes :Les constantes numériques s’écrivent de la manière habituelle :Exemple : 0.0123, 1.23D-2, 1.23e-2, 1.23E-2 sont toutes des déclarations valides etéquivalentes.Les littéraux sont délimités par ’ ou par ”.Exemple : ’abc’,’x’,’y’.Note la constante 1 est différente du littéral ’1’.Les commentaires commencent par # jusqu’à la fin de la ligne ou peuvent commencer par/* et finir par */ en utilisant plusieurs lignes.3. Déclaration de set :La déclaration d’un ensemble se fait selon le format général suivant :set nom [ alias ] [ index ] [ attribs ] ;où attribs est une liste des attributs de l’ensemble :attribs :dimen n, dimension de l’ensemble.within sexpr, l’ensemble defini est un sousensemble de sexpr:= sexpr, definition de l’ensembledefault sexpr ; definition par défault de l’ensemble.Note : default et := sont mutuellement exclusifs. default est utilisé seulement si l’ensemblen’est pas défini par les déclaration des éléments de l’ensemble a la même ligne.Exemple :set nodes ; # il doit ^etre défini dans la section data.set step {s in 1..maxiter } dimen 2 :=if s == 1 then arcselse step[s-1] union setof {k in nodes,(i,k) in step[s-1], (k,j) in step[s-1]} (i,j) ;set A := 1..n ;set C := A union B ; # A et B sont deux ensembles.set C := A diff B ;set C := A symdiff B ;4. Déclaration de paramètre :On déclare un paramètre selon le format général suivant :param nom [ alias ] [ index ] [ attribs ] ;attribs :binary, le paramètre doit être binaire,integer, le paramètre doit être entier, 33 MISR-fsa-Agadir Mohamed ZAOUI
  35. 35. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREsymbolic, le paramètre peut prendre une valeur alphanumérique (par exemplele nom d’un élément d’un autre ensemble).relop expr, o`u relop peut être < <= = == ! = <> > >=.in setxpr, vérifie si le paramètre appartient àunensemble donné.:= expr, définition du paramètre.default expr même chose que pour la déclaration d’un ensemble.Exemple :param units {raw,prd} >= 0; # units[i,j] is the quantity of raw material i# needed to manufacture one unit of product jparam profit {prd,1..T}; # profit[j,t] is the estimated value (if >= 0)# or disposal cost (if <= 0) of# a unit of product j in period tparam comb ’n choose k’ {n in 0..N, k in 0..N }:= if k = 0 or k = N then 1 else comb[n-1,k-1] + comb[n-1,k];param dem ’demand’ {prd,first..last+1} >= 0;# Requirements (in 1000s) to be met from current production and inventory5. Déclaration des variables :Le format général de déclaration des variables est le suivant :var nom [ alias ] [ index ] [ attribs ] ;attribs :binary, la variable est binaireinteger, la variable est entière>= expr, si la variable est inférieurement bornée<= expr, si la variable est supérieurement bornée:= expr, valeur d’une solution initiale (information utilisé6. Déclaration de contraintes :déclaration de une contrainte :[subject to] name [alias] [index][ := initial dual ] [default initial dual] [ : contraint expression ] ;Exemple :subject to limit {t in 1..T}: sum {j in prd} Make[j,t] <= max_prd;7. Déclaration de l’objectif :déclaration de l’objectif :maximize name [alias] [index] : expression ; minimize name [alias] [index] : expression ;expression :vexprto come + vexprvexpr + to cometo comeExemple :maximize total_profit: sum {p in PROD} profit[p] * Make[p];8. Exemple:Problème : trois étudiants doivent choisir un projet parmi trois proposés. Pour satisfairetout le monde, le professeur demande à chacun de donner une note de préférence àchaque projet (de 3 à 1 : 3 pour le projet préféré, 1 pour le moins préféré). Le premierétudiant donne les notes 1, 2 et 3 aux projets 1, 2 et 3 (il voudrait le projet 3 en priorité), ledeuxième, les notes 3, 2, 1, le troisième les notes 3, 1, 2. Pour choisir à qui attribuer quel 34 MISR-fsa-Agadir Mohamed ZAOUI
  36. 36. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREprojet, le professeur écrit un modèle de programmation linéaire maximisant la satisfactiontotale des étudiants. Soit n le nombre d’étudiants et de projets, pij la note donnée parl’étudiant i au projet j et xij, une variable binaire valant 1 si l’étudiant i récupère le projet j.Le programme linéaire s’écrit de la manière suivante :La fonction objectif (1) maximise la somme des préférences pour les affectations choisies,la contrainte (2) spécifie qu’un seul étudiant est affecté par projet, la contrainte (3) quechaque projet est pris par un étudiant. La contrainte (4) donne le domaine de variation desvariables. Ce modèle a automatiquement des variables entières à l’optimum (voirchapitre 2), c’est pourquoi la contrainte (4) ne sera pas reprise dans les modèles ci-dessous,mais remplacée par la contrainte (4’). Le fichier de données est écrit de la manière suivante : 35 MISR-fsa-Agadir Mohamed ZAOUI
  37. 37. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE MPL for Windows1. Introduction:Le dernier langage présenté ici est MPL for Windows de Maximal Software. Encore unefois, sa syntaxe est très proche des autres langages de modélisation. Les commentaires sontplacés entre accolades.2. Exemple :Problème : trois étudiants doivent choisir un projet parmi trois proposés. Pour satisfairetout le monde, le professeur demande à chacun de donner une note de préférence àchaque projet (de 3 à 1 : 3 pour le projet préféré, 1 pour le moins préféré). Le premierétudiant donne les notes 1, 2 et 3 aux projets 1, 2 et 3 (il voudrait le projet 3 en priorité), ledeuxième, les notes 3, 2, 1, le troisième les notes 3, 1, 2. Pour choisir à qui attribuer quelprojet, le professeur écrit un modèle de programmation linéaire maximisant la satisfactiontotale des étudiants. Soit n le nombre d’étudiants et de projets, pij la note donnée parl’étudiant i au projet j et xij, une variable binaire valant 1 si l’étudiant i récupère le projet j.Le programme linéaire s’écrit de la manière suivante :La fonction objectif (1) maximise la somme des préférences pour les affectations choisies,la contrainte (2) spécifie qu’un seul étudiant est affecté par projet, la contrainte (3) quechaque projet est pris par un étudiant. La contrainte (4) donne le domaine de variation desvariables. Ce modèle a automatiquement des variables entières à l’optimum (voirchapitre 2), c’est pourquoi la contrainte (4) ne sera pas reprise dans les modèles ci-dessous,mais remplacée par la contrainte (4’). 36 MISR-fsa-Agadir Mohamed ZAOUI
  38. 38. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE GAMS 1. Introduction :GAMS est l’acronyme de Generalized Algebric Modeling System (Système modelantalgébrique général). Il s’agit avant tout d’un langage servant à la formulation et à larésolution de modèle de programmation mathématique. En pratique, il s’agit d’unpaquetage intégré qui permet de :  spécifier la structure du modèle d’optimisation ;  spécifier et calculer les données qui entrent dans le modèle ;  résoudre ce modèle ;  produire un rapport sur un modèle ;  conduire une analyse comparative.GAMS peut être téléchargé à l’adresse http://www.gams.com. La licence de GAMS et dessolveurs académique est passablement élevés, toutefois il est utilisable de manière gratuiteen version de démonstration, ce qui permettra d’illustrer certains concepts de base du cours.Sous des environnements de type UNIX (incluant Mac OS X et la majorité des distributionsLinux), GAMS s’utilise uniquement en ligne de commande. Sous Microsoft Windows, il disposed’une interface graphique. 2. Formulation d’un problème simple :Considérons le problème d’optimisation linéaireMax 109x1 + 90x2 + 115x3xs.c. x1 + x2 + x3 <100;6x1 + 4x2 + 8x3 <500;x1; x2; x3 >0:Le fichier GAMS décrivant se problème est constitué des parties suivantes:1. spécification des variables ;2. spécification des équations:  déclaration ;  spécification de la structure algébrique ;3. définition du modèle ;4. définition de la méthode de résolution.Ce problème peut être formulé sous GAMS comme suit: 37 MISR-fsa-Agadir Mohamed ZAOUI
  39. 39. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRERemarquons d’ores et déjà que chaque instruction se termine par un point-virgule. Leuromission produit une erreur de compilation. Détaillons les instructions. 3. Spécification des variables :GAMS exige que les variables soient identifiées. Dans l’exemple précédent, nous avons lesvariables Z, X1, X2, X3:VARIABLESZ Variable Z;POSITIVE VARIABLESX1 Variable X1 (Optional Text)X2 Variable X2X3 Variable X3; 4. Dénomination des équations :La spécification d’une équation consiste en deux parties. Il convient tout d’abord dedéclarer ces équations:GAMS exige du modélisateur de nommer chaque équation à l’oeuvre dans le modèle. Dansl’exemple, les équations sont déclarées après le mot-clé EQUATIONS 38 MISR-fsa-Agadir Mohamed ZAOUI
  40. 40. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREEQUATIONSEquation1 Equation 1Equation2 Equation 2Equation3 Equation 3;Comme pour les variables, le nom d’une équation peut prendre jusqu’à 31 caractères. Adroite du nom de l’équation figure un (bref) texte d’explications.Il nous faut de plus spécifier la structure algébrique: après avoir nommé les équations, lastructure algébrique exacte doit être spécifiée en utilisant la notation ..:Equation1..Z =E= 109*X1 + 90*X2 + 115*X3;Equation2..X1 + X2 + X3 =L= 100;Equation3..6*X1 + 4*X2 + 8*X3 =L= 500;La forme algébrique exige l’utilisation d’une syntaxe speciale afin de définir la forme exactede l’équation:=E= contrainte d’égalité=L= inférieur ou égal=G= supérieur ou égal 5. Spécification du modèle :Le mot-clé MODEL est utilisé pour identifier les modèles à résoudre. Il convient de1. donner un nom au modèle (par exemple Example1) ;2. spécifier les équations à inclure, entre des barres italiques / /.Ceci donne pour notre exempleMODEL Example1 /ALL/;Nous pourrions aussi avoirMODEL Example1 /Equation1, Equation2/; 6. Spécification du solveur :Le mot-clé SOLVE indique à GAMS d’appliquer un solveur au modèle nommé, en utilisant lesdonnées définies juste avant l’instruction SOLVE. Ainsi, dans notre exemple, nous avions:SOLVE Example1 USING LP MAXIMIZING Z;Si nous avions affaire à un problème linéaire de minimisation, nous pourrions écrireSOLVE Example1 USING LP MINIMIZING Z;En place de LP, nous devrions écrire MIP pour traiter un problème de programmation entièremixte:SOLVE Example1 USING MIP MAXIMIZING Z;De même, nous spécifierons un problème non-linéaire avec le mot-clé NLP:SOLVE Example1 USING NLP MAXIMIZING Z; 7. Rapport de solution :A la fin de l’exécution, GAMS produit un rapport indiquant la solution trouvée, la valeur de lafonction objectif en cette solution, ainsi que différentes informations permettant d’analyser lecomportement de l’algorithme d’optimisation, et diverses propriétés du problème en coursd’étude. En particulier, le résumé de rapport donne le nombre total de cas non optimaux,non réalisables et non bornés rencontrés.**** REPORT SUMMARY : 0 NONOPT0 INFEASIBLE 39 MISR-fsa-Agadir Mohamed ZAOUI
  41. 41. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE0 UNBOUNDEDL’information sur les solutions peut être affichée de différentes manières:1. sortie standard de GAMS ;2. utilisation des commandes DISPLAY ;3. rappports additionels sur base des valeurs des solutions.La sortie standard de GAMS présente la solution sous forme d’un tableau, qui dans le cas del’exemple est:Le point simple “.” représente un zéro, tandis que INF représente l’infini. 8. Sommations :La notation mathématique ∑j xj se traduira parSUM(j,x(j))En d’autres termes, nous avons la syntaxe SUM( index of summation, names(index))Il est possible d’imbriquer les sommations. Ainsi,∑j∑i xji donnera SUM(j,SUM(i,x(j,i))ou encore SUM((j,i),x(j,i)) 9. Définition d’ensemble :Spécifier les variables une à une est vite fastidieux, pour ne pas dire irréaliste (par exemple sinous avons un million de variables), c’est pourquoi en modélisation algébrique, nous utilisonsdes indices. GAMS met à disposition le mot clé SET pour définir des ensembles, parcouru parun indice spécifié juste avant:SET ItemName optional explanatory text for item/ element1 optional explanatory text for element,element2 optional explanatory text for element /Par exemple,SET i index /1*10/défini l’ensemble f1; 2; : : : ; 10g, qui peut être parcouru avec l’indice i. Il est possibled’associer un autre indice au même ensemble au moyen de la commande ALIAS, parexemple ALIAS (i,j) ;permet d’utiliser j au lieu de i. Cette commande est utile par exemple pour traduire unecontrainte de la formexij + xji = 1; i = 1; : : : ; n; j = 1; : : : ; n;j et i doivent indicer le même ensemble, mais écrireSET i / 1*10 / 40 MISR-fsa-Agadir Mohamed ZAOUI
  42. 42. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE j / 1*10 /mènerait GAMS à considérer i et j comme indexant deux ensembles.Entrée de données Les données sont entrées au moyen de quatre différents types decommandes GAMS:SCALAR , pour les éléments ne dépendant pas d’ensembles ;PARAMETERS , pour les éléments qui sont des vecteurs ;TABLES , pour des éléments de deux dimensions ou plus ;PARAMETERS , en affectation directe.La manière la plus simple d’entrée des données est l’emploi de la commande SCALAR, quiprend la syntaxe suivantedans le format basique:SCALAR ItemName optional text / value /;Dans le cas de vecteurs, nous utiliserons la syntaxePARAMETER ItemName(Set) optional text;/ element1 value,element2 value /;Pour les entrées multidimensionnelles, nous auronsTABLE ItemName(set1dep,set2dep) optional textset2elem1 set2elem2set1element1 value11 value12set1element2 value12 value22 ;Plutôt que d’utiliser des constantes, nous pouvons affecter les valeurs au moyen d’expressionsmathématiques:PARAMETER ItemName(set1dep,set2dep) optional text;ItemName(set1dep,set2dep) = some expression;L’indice set2dep est optionnel.L’exemple peut ainsi se reformuler comme 41 MISR-fsa-Agadir Mohamed ZAOUI
  43. 43. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE Maple1. Découverte du logiciel : Principes de base :Maple est un logiciel de calcul formel, qui permet de faire du calcul exact et de laprogrammation. L’écran de votre logiciel ressemble à ceci :Un principe de base simple est la suivant :Une commande Maple se termine par le symbole ;Exemple :Les opérateurs de bases sont les suivants :+ addition − soustraction∗ multiplication / divisionˆou ∗∗ exponentiation ! factorielleLes fonctions élémentaires :ln exp cos sin tansqrt (square root), la racine carréecot la cotangenteabs valeur absolueLes constantes réservées :Pi Le nombre πI une solution de X2 = −1 42 MISR-fsa-Agadir Mohamed ZAOUI
  44. 44. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE2 - Expressions et variables : 2.1 – AffectationL’opération consistant à stocker une expression dans une variable est l’affectation et utilise lesymbole « := ». On écrira par exemple[ > x:=2;pour donner la valeur 2 à la variable x. 2.2 – RéinitialisationOn peut ensuite « vider » la variable de sa valeur en la réinitialisant par l’une des deuxcommandes :> unassign(x); ou bien [ > x:=x;Pourquoi les apostrophes ? La raison est importante à comprendre : il faut bien distinguer unevariable (que l’on peut considérer comme une case mémoire) de sa valeur. Tant qu’unevariable n’est pas affectée, elle représente un symbole, une variable abstraite.Sa valeur estalors simplement son nom. Mais dès qu’une variable contient une valeur (par exemple unnombre entier), Maple remplace toute occurrence de celle-ci par son contenu. Ainsi si ondésire parler de la variable x et non pas de l’expression stockée dans la variable x, on «protège » celle-ci en entourant son nom par des apostrophes.Pour réinitialiser toutes les variables on utilise la commande restart. Il est préférable de l’utiliserquand on commence un nouveau travail, indépendant de ce qui précède (par exempleune nouvelle feuille de calcul). 2.3 – Nom d’une variableNotons pour commencer que Maple fait la différence entre majuscules et minuscules. Unnom de variable commence en général par une lettre et peut contenir des chiffres et deslettres (non accentuées). Il peut aussi contenir le caractère de soulignement « _ ».Par exemple :[ > Nombre_de_solutions:=2;En fait un nom de variable peut contenir des caractères plus exotiques (et même desespaces) à condition de « protéger » celui-ci par des accents graves (AltGr+7). Par exemple :> Nombre de solutions de léquation (*):=2;Mais cet usage n’est pas recommandé pour des raisons de lisibilité.Pour terminer précisons qu’un nom ne peut pas dépasser 499 caractères et que l’on ne peutpas utiliser comme nom de variable un mot déjà utilisé en interne parMaple (par exemple Pi,infinity, sqrt, ...).3 - Types de données numériques et symboliques :La plupart des expression Maple ont un type qui caractérise leur nature. Il y a, par exemple,plusieurs types numériques (entier, rationnels, flottant, ...) ainsi que le type symbolique.On peut demander àMaple le type d’une expression par la commande :> whattype(3); whattype(3.0); integer floatPour chaque type de données présenté ici nous donnons en plus de sa description, quelquesfonctions qui lui sont spécifiques.Pour tous les types numériques et symboliques, les opérations arithmétiques élémentaires sontnotées +, -, *, / et ^(ou **) pour la fonction puissance. 3.1 - Nombres entiersLe type integer est celui des entiers relatifs.Maple peutmanipuler de très grands entiers et faitavec ceux-ci des calculs exacts. 43 MISR-fsa-Agadir Mohamed ZAOUI
  45. 45. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE> 50!-2_27; 30414093201713378043612608166064768844377641568960511999865782272 3.2 - Nombres rationnelsLe type fraction désigne les nombres rationnels non-entiers. Le type rational regroupe lestypes integer et fraction. Notons que Maple réduit automatiquement les fractions. 3.3 - Nombres réelsEn ce qui concerne les nombres réels il faut faire très attention. Le point essentiel est qu’unordinateur ne peut pas stocker une quantité infinie d’informations. Le nombres réels sont enfait de deux catégories. Il y a d’abord le type float pour les approximations en virguleflottante. Ces nombres sont codés par mantisse m (généralement entre 0 et 1) et exposant e(généralement 10) sous la forme mbe. Ces nombres réels sont donc tronqués avec uneprécision que l’on peut modifier en changeant la valeur de la variable Digits. Il faut doncabsolument avoir à l’esprit que les calculs et résultats avec des nombres de type float sontapprochés.Mais il existe une autre catégorie de nombres réels : ceux obtenus à partir de fonctionsclassiques (par exemple racine carrée, fonctions trigonométriques et hyperboliques, fonctionslogarithme et exponentielle, ...). Ces nombres ne sont pas évalués sauf si leurargument est déjà de type float. Leur résultat reste donc sous forme symbolique (commesin(1) ou p2), et les calculs sont dans ce cas exacts.Mais on peut « forcer » l’évaluation sous forme de float à l’aide de la commande evalf (evalto float). Pour obtenir une approximation de sin(3) avec 20 chiffres significatifs on tape parexemple :> evalf(sin(3),20); 0.14112000805986722210Il est bien sur possible lors d’un calcul de mélanger les types integer, fraction et float. Dans cecas le résultat est de type float (donc approché). 3.4 - Nombres complexesLe nombre complexe de module 1 et d’argument ¼ 2 est noté I en Maple (attention à lamajuscule). Un nombre complexe est une expression a+b*I, où a et b sont rationnels ou réels(dans ce dernier cas les calculs seront donc approchés). Notons que Maple remplacedirectement I2 par −1.Pour obtenir l’écriture cartésienne (a+b*I) d’une expression on utilise evalc. Les fonctions Re,Im, abs donnent respectivement la partie réelle, la partie imaginaire et le module d’unnombre complexe. La fonction argument(z) permet d’obtenir l’argument de z situé dans]−¼,¼].On peut appliquer la fonction evalf a un nombre complexe afin d’obtenir une valeurapprochée de sa partie réelle et de sa partie imaginaire. 3.5 – ConstantesMaple utilise un certain nombre de constantes symboliques. Par exemple Pi désigne lenombre ¼, gamma désigne la constante ° d’Euler (limite de Pnk=11k −ln(n), quand n!1) etinfinity désigne la notion abstraite d’infinie (utile pour l’écriture des limites).On peut par exemple obtenir la limite précédente par :> limit(sum(1/k,k=1..n)-ln(n),n=infinity); °Notons que l’utilisateur peut définir de nouvelles constantes symboliques en modifiant lavariable constants (voir l’aide en ligne). 3.6 – BooléensLe type boolean est celui des expressions logiques. Les valeurs possibles sont true (vrai), false(faux) et FAIL (pour représenter une expression dont on ne connait pas la véracité).On peut demander l’évaluation booléenne d’une expression contenant des opérateurs derelations (< strictement inférieur, > strictement supérieur, <= inférieur ou égal, >= supérieur ouégal, = égal, <> différent) en utilisant la fonction evalb :> evalb(I_2=-1); 44 MISR-fsa-Agadir Mohamed ZAOUI
  46. 46. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE trueOn dispose bien sûr des opérateurs logiques classiques : not (négation), and (et) et or (ou nonexclusif ) 3.8 - Chaînes de caractèresDepuis la version VR5 Maple fait la différence entre les variables symboliques (type symbol) etles chaînes de caractères (type string). Il s’agit tout simplement d’une suite de caractèresquelconques encadrée par le symbole « " ». Il ne s’agit plus d’un nom destiné à représenterune variable mais d’un mot au sens usuel. Les principales opérations sont les suivantes :• la concaténation à l’aide de l’opérateur « . » ;• la conversion d’une chaîne s en symbole par convert(s,symbol);• la conversion d’un symbole s en chaîne par convert(s,string);• l’extraction d’une sous-chaîne à l’aide de substring;> s:="Puissante est la force dans sa famille": substring(s,3..12); "issante es"• la recherche d’un motif par la fonction Searchtext;> SearchText("force",s);4-Tableaux, vecteurs et matrices :Tableaux, vecteurs et matrices sont des tables particulières. Mais contrairement au cas d’unetable générale, les indices ne peuvent plus être quelconques.Un tableau (type array) de dimension n est une table dont les indices sont des n-upletsconstitués d’entiers consécutifs. Par array(1..3,-10..10,0..5) crée un tableau à 3 dimensions, lepremier indice variant de 1 à 3, le deuxième de −10 à 10 et le dernier de 0 à 5.Une fois qu’un tableau a été créé, on peut définir la valeur des ses éléments de la mêmefaçon que pour une table générale.> tab:=array(1..2,0..1): tab[1,0]:=1: tab[2,0]:=2: tab[2,1]:=3:Et on peut ensuite utiliser ces éléments dans un calcul :> tab[1,0]-tab[1,1]+2*tab[2,1]; 7−tab1,1Il faut bien comprendre qu’un tableau (contrairement à une table) est un objet de taille fixée: une fois les dimensions définies, on ne peut pas rajouter ou supprimer d’éléments. Parcontre, on peut bien sûr modifier les éléments déjà existants.Une matrice (type matrix) de taille n ×p est un tableau de dimension 2, le premier indice(indice de ligne) variant de 1 à n, et le second (indice de colonne) variant de 1 à p. On peutcréer une matrice soit comme on le ferait pour un tableau, soit en donnant la liste de seslignes. On utilise pour cela le constructeur matrix (array marche aussi) :> A:=matrix([[1,2],[2,1]]); B:=array([[1,2,x],[3],[6,y],[0,0,0]]);Dans ce cas le nombre de colonnes est la taille de la première liste, et les suivantes doiventêtre de taille inférieure ou égale (certains éléments pouvant rester indéfinis).De même un vecteur (type vector) de taille n est un tableau de dimension 1, l’indice variantde 1 à n et comme précédemment il existe un constructeur spécifique nommé vector.> V:=vector([a, b, c]); V := [a,b, c]Les opérations classiques concernant les vecteurs et les matrices seront abordées dans ladeuxième partie de ce cours. 45 MISR-fsa-Agadir Mohamed ZAOUI
  47. 47. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE 5- Graphiques :Maple dispose de nombreuses commandes et fonctions pour tracer des graphiques desfonctions en deux ou trois dimensions.La syntaxe générale pour tracer un graphe avec Maple est la suivante : Plottype(Expression,Intervalle,Options)Plottype : est le type de graphique que l’on veut tracer, qui est plot en deux dimensions et plot2d en trois dimensions.Expression : est une expression mathématique, où un ensemble d’expressions définissant la ou les fonction(s) à tracerIntervalle : est de la forme x=a..b avec a et b des nombres réels et a<b.Option : correspond à une ou plusieurs spécifications optionnelles qui déterminent l’apparence du graphe (tels que le titre, les échelles,…) 4.1. Graphiques en deux dimensions  Le type le plus simple de graphiques en deux dimensions est obtenu par une expression de la forme : plot(f(x),x=a..b,y=c..d,opt1,opt2,…) où les termes en italiques sont optionnels. La fonction F(x) dépendante de la variable réelle x et le domaine où l’on va tracer la fonction est dénoté par x=a..b.  On peut tracer plusieurs graphiques à la fois en utilisant la commande plot avec differentes options tels que la couleur, le style etc pour chacune des courbes. La syntaxe générale est alors : plot([expr1,…,exprn],intervalle(s),color=[c1,…,cn],style=[s1,…,sn],…)Exemple :> plot(cos(x)+2*x^3,x=-Pi..Pi); 4.2. Graphisme 3D :Forme expliciteSoit a dessiner une surface dont l’equation de cette surface est donnee sous forme z=f(x,y).La syntaxe de la commande est :>plot3d ( f(x,y), x = a .. b, y = c .. d) ;Exemple : soit a dessiner la surface x2 + y2 = z pour -1 < x < 1 et -2 < y < 2>plot3d( x^2 + y^2, x= -1..1, y=-2..2) ;Forme impliciteSoit a dessiner la surface S lorsque l’equation de cette surface est donnee sous forme :f(x,y,z)=0.Les commandes sont :>with(plots) ; 46 MISR-fsa-Agadir Mohamed ZAOUI
  48. 48. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIREimplicitplot3d ( f(x,y,z), x=a..b, y=c..d, z=e..f) ;forme paramétriqueSoit a dessiner une courbe dans l’espace dont on connait les equations parametriquessuivantes :x = f(t)y = g(t) b < t < az = h(t)les commandes sont :>with(plots) ;spacecurve([f(t),g(t),h(t)], t=a..b) ;Exemple : soit a tracer dans l’espace l’helice circulaire dont les equations parametriquessont :x = cos(t)y = sin(t) 0 < t < 2πz=tles commandes sont :>with(plots) ;spacecurve([cos(t),sin(t),t], t = 0..2*Pi) ;soit a dessiner une surface dont on connait les equations parametriques suivantes :x = f(t,s)y = g(t,s) a < t < b et c < s < dz = h(t,s)la commande est :>plot3d([f(t,s),g(t,s),h(t,s)], t = a..b, s = c..d) ; 47 MISR-fsa-Agadir Mohamed ZAOUI
  49. 49. Mini-Projet ETUDE THEORIQUE DE CERTAINS LOGICIELS DE LA PROGRAMMATION LINEAIRE Conclusion: La programmation linéaire est appliquée dans plusieurs domaines comme lesréseaux, télécommunications, transports, finance… Grâce aux progrès del’informatique, l’offre de logiciels commerciaux permettant de résoudre des PL deplus en plus gros a considérablement augmenté comme Maple, LP solve, visualXpress, GLPK, Scilab, Maxima,Cplex,Matlab,…Références:Livre : Programmation Linéaire - 65 Problèmes d’Optimisation Modélisés Et RésolusAvec Visual Xpress, de Christian Prinswww.google.com 48 MISR-fsa-Agadir Mohamed ZAOUI

×