Академический Документы
Профессиональный Документы
Культура Документы
I. Introduction :……………………………………………………………………………………..2
II. Les logiciels actuels :…………………………………….…………………………………..3
Excel……………………………………………………...…………………………6
Lindo…………………………………………..…………………………………..12
Cplex………………………...…………………………………………………....25
Opl Studio……………………………….……………………………………...27
Matlab…………………………………………………………………………….29
Ampl……………………………………………………………………………….33
MPL for windows………………………..…………………………………...36
GAMS………………………………………….…………………………………..37
Maple……………………………………………………………………………..42
I. Introduction :
linéaire un des champs de recherche les plus actifs au milieu du siècle précédent. Les
premiers travaux (1947) sont celle de George B. Dantzig et ses associés du département des
de décisions possibles qui réalisent la même satisfaction ou le même profit. Ces décisions sont
Généralement il y a trois étapes à suivre pour pouvoir construire le modèle d'un programme
linéaire :
1. Identifier les variables du problème à valeur non connues (variable de décision) et les
2. Identifier les restrictions (les contraintes) du problème et les exprimer par un système
d’équations linéaires.
minimiser.
1. Principes de fonctionnement :
Parmi les modeleurs, AMPL est le plus connu et le plus célèbre. Sa particularité est de
pouvoir appeler pratiquement tous les solveurs existants. Les éditeurs de codes
algorithmiques en ont fait une référence et se servent de la popularité d’AMPL pour
promouvoir leur solveur. C’est sans doute ce qui a rendu AMPL plus célèbre encore. Ce
type de langage, qui est très utile aux décideurs d’entreprise en simplifiant la modélisation
et la résolution de problèmes d’optimisation, est en pleine expansion. L’offre s’est
considé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 au
paragraphe 3.3, sont GAMS (de Gams Developpement Corp.), qui permet des modèles non
linéaires, OPL Studio (d’ILOG), qui peut appeler des solveurs de propagation de
contraintes en parallèle avec la programmation linéaire, Lingo (de Lindo Systems), très
employé dans le monde académique pour les enseignements outre-Atlantique, et MPL for
Windows (de Maximal Software). On ne peut pas dire qu’un langage est définitivement
supérieur à un autre. En fait, pour choisir un langage, la meilleure façon est de tester les
versions limitées qui sont proposées sur les sites web des éditeurs de logiciels.
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 pour
aider l’utilisateur à rédiger et déboguer son modèle. Pour les PC, la plupart des éditeurs
fournissent un EDI agréable à utiliser. Cette interface est souvent la version disponible
gratuitement sur le web. Parmi les éditeurs déjà cités, ceux qui proposent une interface sont
GAMS, 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 de
celui de Visual Xpress.
Un article de R. Fourer [Fourer 1999] très complet reprend les caractéristiques des différents
logiciels et montre tous les liens que l’on peut trouver entre les langages de modélisation, les
solveurs utilisés et les environnements de développement intégrés. La liste suivante donne les
sites web des éditeurs de logiciels dont nous avons parlé. D’autres sites sont indiqués dans
l’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)
Excel
1. Introduction :
Le Solveur permet de rechercher la valeur optimale d'une formule dans une cellule, appelée
cellule cible ou fonction objectif, de la feuille de calcul. Il fonctionne avec un groupe de
cellules associées (directement ou indirectement) à la formule de la cellule cible. Il adapte
les valeurs des cellules qu'on souhaite modifier, appelées cellules variables, pour fournir le
résultat spécifié à partir de la formule de la cellule cible. On peut spécifier des contraintes
pour limiter les valeurs susceptibles d'être utilisées par le Solveur, et ces contraintes peuvent
faire référence à d'autres cellules qui ont une incidence sur la formule de la cellule cible.
Le solveur agit par itérations successives sur une ou plusieurs variables jusqu'à obtenir une
valeur définie pour la valeur cible, en tenant compte des contraintes imposées.
2. Installation :
Si l'option " Solveur " n'est 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 Macrolib\Solveur, ou ré-exécuter le programme d'installation.
3. Contraintes
Limites imposées à un problème du Solveur. On peut appliquer des contraintes à des cellules
ajustables (modifiables), à la cellule cible ou à d'autres cellules liées directement ou
indirectement à la cellule cible :
pour les problèmes linéaires, il n'existe 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.
Exemple :
Entre quelles valeurs minimale et maximale mon budget loisirs peut-il varier ?
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.
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
4. 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 d'origine : Cliquer sur cette option pour rétablir les valeurs d'origine
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 d'origine 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 n'est 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
Options du solveur :
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 d'une 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 d'un 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 d'une
solution qui satisfait aux contraintes de nombre entier peut différer de la valeur
optimale vraie tout en demeurant acceptable. Cette option s'applique 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 s'arrête. La
convergence s'applique 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.
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 d'optimisation 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
d'investissements 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 n'avez pas défini une limite inférieure
dans la zone Contrainte de la boîte de dialogue Ajouter une contrainte.
Estimations : Spécifie l'approche utilisée pour obtenir les estimations d'origine des
variables de base dans le cadre de chaque recherche unidimensionnelle.
Tangente : Utilise l'extrapolation linéaire à partir d'un vecteur tangentiel.
Quadratique : Utilise l'extrapolation quadratique, qui permet d'amé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 d'objectif 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 s'avérer utile lorsque le Solveur renvoie un
message indiquant qu'il n'est pas en mesure d'améliorer la solution.
Recherche : Spécifie l'algorithme 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 d'ité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 d'ité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 l'examen 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 l'emplacement 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é.
Lindo
I. Introduction :
Lindo (Linear INteractive and Discrete Optimizer) est un logiciel utilisé pour résoudre les
modèles d’optimisation linéaires, entiers et quadratiques. Une des caractéristiques de Lindo
c’est qu’il offre des outils qui peuvent aider à l’analyse des modèles en utilisant la méthode de
Simplexe.
Caractéristiques de LINDO:
a. Le problème de l’agriculteur
Le programme linéaire qui modélise le problème de l’agriculture est :
Max 100 x1 200 x2
s.c. x1 x2 150
4 x1 2 x2 440
x1 4 x2 480
x1 90
x1 0, x2 0
Dans tous les modèles de Lindo la fonction objectif est définie en première ligne. Dans notre
exemple la fonction objectif est :
Max _ 100 _ x1 _ _ 200 _ x2
Les tirés bas indique la présence d’un espace obligatoire entre les entrées pour pouvoir les
différentiées.
Il faut noter qu’on peut remplacer x1 et x2 par n’importe quel mot qui indique ces deux
variables, par exemple, on peut remplacer x1 par "tomates" et x2 par "piments". Une autre
caractéristique est que Lindo ne fait pas de différence entre majuscule et minuscule. Pour lui
la variable « TOMATE » est la même que la variable « tomAtE ».
Pour commencer à écrire les contraintes, il faut introduire la mention « subject to » ou tout
simplement son abréviation « st ».
Dans notre exemple les contraintes sont :
subject _ to
terrain) x1 _ _ x 2 _ _ 150
eau) 4 _ x1 _ _ 2 _ x 2 _ _ 440
M o) x1 _ _ 4 _ x 2 _ _ 480
bureau) x1 _ _ 90
On remarque qu’on peut appeler chaque contrainte par un nom nominatif que Lindo va
utiliser 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 les
variables de décision sont de types nonnégative.
c. Résolution du problème
Après avoir écrit convenablement le programme linéaire, on passe maintenant à la
ré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 que
le programme, par exemple, est non borné ou bien non réalisable...
Lors de la compilation, on voit une barre qui montre le pourcentage de travail effectué.
Avant que Lindo nous propose un premier rapport sur la solution optimale, il nous donne
l’état du problème exprimé par cette fenêtre :
Si on ferme cette fenêtre, on remarque qu’un autre rapport s’affiche. Ce rapport contient
des informations sur la solution optimale.
Dans le tableau ci-dessus s’affichent dans la première colonne les différentes variables de
décision et aussi les variables d’écart relatives à chaque contrainte du programme. Leurs
valeurs sont données dans la deuxième colonne. On vérifie bien que la solution optimale
coïncide avec la solution déjà retrouvée dans les précédants chapitres. La troisième colonne
représente les valeurs nettes, i.e. c j z j . Pour les variable d’ecart c’est les prix duals.
1. File
2. Edition
3. Solve
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 simplexe
relatif à cette dernière itération est optimal :
La résolution avec la commande « Preemptive Goal » nous donne les résultats suivants :
4. Reports
a) Solution : Elle donne un rapport de résolution standard avec ou sans les variables non
nulles.
d) Statistics : Cette commande affiche des statistiques relatives au problème actif dans la
fenê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 de
graphique (en 2D ou en 3D) relatif aux résultats du problème actif. Le menu associé à cette
commande est le suivant :
On a choisi ici d’avoir un rapport graphique sur les valeurs des variables de décision ainsi sur
les variables duales qui leurs sont associées dans le problème de l’agriculteur. Le résultat est
le 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 :
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 :
5. Window
a) 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.
f) 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. Help
b) 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.
On peut utiliser Lindo pour résoudre des problèmes en nombres entiers. Il suffit de mentionner
que 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 X2
sont de type entier. On sait déjà que la solution optimale va demeurer inchangée puisque les
valeurs de ces variables à l’optimum sont des entiers.
CPLEX
Introduction :
CPLEX (édité par la société ILOG) est un solveur de programmation linéaire, c’est-à-dire un
logiciel permettant de résoudre des problèmes d’optimisation linéaire. Plusieurs types
d’algorithmes de résolution sont disponibles, en particulier l’algorithme du simplexe et un
algorithme de points intérieurs.
Deux modes d’utilisation sont disponibles : via une API, permettant d’interfacer CPLEX à l’aide
d’un langage de programmation (de type Java ou C++), et un mode interactif, en lignes de
commande.
Sous Windows, on peut lancer CPLEX à partir du menu Démarrer (dans le répertoire ILOG, ou
un de ses sous-répertoires). Une fois que CPLEX est lancé, un prompt apparaît et on peut
entrer l’ensemble des commandes du mode interactif. Dans ce mode, un seul PL peut être
chargé à la fois dans CPLEX (un nouveau PL “chassant” l’ancien). Nous allons lister ici
les principales commandes utilisables dans ce mode. Commençons par les commandes de
base :
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 :
é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 LP
Tous les PL que l’on veut résoudre avec le mode interactif de CPLEX doivent être entrés au
format LP, que ce soit dans un fichier texte (qui sera chargé dans CPLEX à l’aide de la
commande read) ou après la commande enter nom_pb. Le nom d’un fichier texte
contenant un PL au format LP doit finir par “.lp”. Voici une description d’un PL au format LP :
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.
OPL Studio
1) Introduction :
Ilog OPL Studio est un produit de la société Ilog. C’est un outil de modélisation et de
résolution des problèmes en :
Programmation mathématique
1. Programmation linéaire,
2. Programmation linéaire en nombres entiers,
3. Programmation mixte
Programmation par contraintes
OPL studio est caractérisé essentiellement par la simplicité de son langage et par la
puissance de ses méthodes de résolution des problèmes en programmation par contraintes.
Commencer par créer un nouveau projet, en cliquant sur File new Project. Le projet
s’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 puis
choisir Add New Model File comme le montre la figure ci-dessus. Dans la fenêtre droite de
l’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, cliquer
directement sur l’icône dans la barre d’outils. Pour arrêter l’exécution ou lancer une autre
exécution cliquer sur Execution Abort, ou bien cliquer directement sur dans la barre
d’outils.
Présentation de la syntaxe
Un 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;
Matlab
1. Introduction :
2. ENVIRONNEMENT MATLAB :
L’environnement MATLAB se présente sous la forme d’un espace de travail (Workspace), o`u
un interpréteur de commandes exécute des opérations et fonctions MATLAB. Les sources de
celles-ci sont disponibles, écrites en “ langage ”
MATLAB, voire en C ou en Fortran. L’utilisateur peut à sa guise les modifier, mais en s’en
inspirant, il peut surtout créer et rajouter ses propres fonctions.
3. Variables :
4. Répertoires de travail :
Quand une commande est tapé, matlab recherche celle-ci dans l'ensemble des répertoires
dont la liste apparaît dans la fenêtre "path", on peut ajouter ou supprimer un répertoire de
son choix.
5. Editeur :
On l’appelle soit par son icône à partir du gestionnaire de programmes, soit directement à
partir de MATLAB en sélectionnant FileNew-Mfile.
6. Aide en ligne :
En plus de l’aide de Windows, une aide en ligne est disponible pour chaque
commande de MATLAB. Il suffit d’introduire : help nom de commande
helpwin ouvre une fen^etre contenant la liste des commandes Matlab ainsi que leurs
documentations
help donne la liste de toutes les commandes par th_emes
lookfor nom recherche une instruction _a partir du mot cl_e nom
Commentaires
Le symbole % introduit un commentaire, celui-ci n'est pas évalué par l'interpréteur.
7. 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 vecteur
Matrices :
Remarque : Dans MATLAB, les indices des vecteurs et matrices doivent être des
entiers positifs. L’indice zéro n’est donc pas plus admis que les indices négatifs.
8. GRAPHISME :
Tout tracé avec Matlab, s'effectue dans une fenêtre graphique que l'on crée par la
commande figure ou quand on exécute une commande de dessin (plot …). On peut créer
autant de fenêtres graphiques que l'on 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 par
figure 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 d'interpolation, chaque point marqué par o
Un plot provoque l'effacement du dessin précédent (par défaut) on peut superposer des
dessins en mettant le commutateur hold à on
9. SIMULINK:
La fenêtre suivante contenant les librairies de simulink, apparaît ainsi qu'une fenêtre de
travail.
AMPL
1. Introduction
2. Constantes :
3. Déclaration de set :
4. Déclaration de paramètre :
6. Déclaration de contraintes :
7. Déclaration de l’objectif :
déclaration de l’objectif :
maximize name [alias] [index] : expression ; minimize name [alias] [index] : expression ;
expression :
vexpr
to come + vexpr
vexpr + to come
to come
Exemple :
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 satisfaire
tout 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é), le
deuxième, les notes 3, 2, 1, le troisième les notes 3, 1, 2. Pour choisir à qui attribuer quel
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) que
chaque projet est pris par un étudiant. La contrainte (4) donne le domaine de variation des
variables. Ce modèle a automatiquement des variables entières à l’optimum (voir
chapitre 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 dernier langage présenté ici est MPL for Windows de Maximal Software. Encore une
fois, sa syntaxe est très proche des autres langages de modélisation. Les commentaires sont
placés entre accolades.
2. Exemple :
Problème : trois étudiants doivent choisir un projet parmi trois proposés. Pour satisfaire
tout 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é), le
deuxième, les notes 3, 2, 1, le troisième les notes 3, 1, 2. Pour choisir à qui attribuer quel
projet, le professeur écrit un modèle de programmation linéaire maximisant la satisfaction
totale des étudiants. Soit n le nombre d’étudiants et de projets, pij la note donnée par
l’é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) que
chaque projet est pris par un étudiant. La contrainte (4) donne le domaine de variation des
variables. Ce modèle a automatiquement des variables entières à l’optimum (voir
chapitre 2), c’est pourquoi la contrainte (4) ne sera pas reprise dans les modèles ci-dessous,
mais remplacée par la contrainte (4’).
GAMS
1. Introduction :
Remarquons d’ores et déjà que chaque instruction se termine par un point-virgule. Leur
omission produit une erreur de compilation. Détaillons les instructions.
GAMS exige que les variables soient identifiées. Dans l’exemple précédent, nous avons les
variables Z, X1, X2, X3:
VARIABLES
Z Variable Z;
POSITIVE VARIABLES
X1 Variable X1 (Optional Text)
X2 Variable X2
X3 Variable X3;
EQUATIONS
Equation1 Equation 1
Equation2 Equation 2
Equation3 Equation 3;
Comme pour les variables, le nom d’une équation peut prendre jusqu’à 31 caractères. A
droite 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, la
structure 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 exacte
de 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 de
1. donner un nom au modèle (par exemple Example1) ;
2. spécifier les équations à inclure, entre des barres italiques / /.
Ceci donne pour notre exemple
MODEL Example1 /ALL/;
Nous pourrions aussi avoir
MODEL Example1 /Equation1, Equation2/;
6. Spécification du solveur :
Le mot-clé SOLVE indique à GAMS d’appliquer un solveur au modèle nommé, en utilisant les
donné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 écrire
SOLVE Example1 USING LP MINIMIZING Z;
En place de LP, nous devrions écrire MIP pour traiter un problème de programmation entière
mixte:
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 :
0 UNBOUNDED
L’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 de
l’exemple est:
Le point simple “.” représente un zéro, tandis que INF représente l’infini.
8. Sommations :
9. Définition d’ensemble :
Spécifier les variables une à une est vite fastidieux, pour ne pas dire irréaliste (par exemple si
nous avons un million de variables), c’est pourquoi en modélisation algébrique, nous utilisons
des indices. GAMS met à disposition le mot clé SET pour définir des ensembles, parcouru par
un 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 possible
d’associer un autre indice au même ensemble au moyen de la commande ALIAS, par
exemple
ALIAS (i,j) ;
permet d’utiliser j au lieu de i. Cette commande est utile par exemple pour traduire une
contrainte de la forme
xij + xji = 1; i = 1; : : : ; n; j = 1; : : : ; n;
j et i doivent indicer le même ensemble, mais écrire
SET i / 1*10 /
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 de
commandes 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, qui
prend la syntaxe suivante
dans le format basique:
SCALAR ItemName optional text / value /;
Maple
1. Découverte du logiciel : Principes de base :
Maple est un logiciel de calcul formel, qui permet de faire du calcul exact et de la
programmation. L’écran de votre logiciel ressemble à ceci :
2 - Expressions et variables :
2.1 – Affectation
L’opération consistant à stocker une expression dans une variable est l’affectation et utilise le
symbole « := ». On écrira par exemple
[ > x:=2;
pour donner la valeur 2 à la variable x.
2.2 – Réinitialisation
On peut ensuite « vider » la variable de sa valeur en la réinitialisant par l’une des deux
commandes :
> unassign('x'); ou bien [ > x:='x';
Pourquoi les apostrophes ? La raison est importante à comprendre : il faut bien distinguer une
variable (que l’on peut considérer comme une case mémoire) de sa valeur. Tant qu’une
variable n’est pas affectée, elle représente un symbole, une variable abstraite.Sa valeur est
alors simplement son nom. Mais dès qu’une variable contient une valeur (par exemple un
nombre entier), Maple remplace toute occurrence de celle-ci par son contenu. Ainsi si on
dé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’utiliser
quand on commence un nouveau travail, indépendant de ce qui précède (par exemple
une nouvelle feuille de calcul).
Notons pour commencer que Maple fait la différence entre majuscules et minuscules. Un
nom de variable commence en général par une lettre et peut contenir des chiffres et des
lettres (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 des
espaces) à 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 peut
pas utiliser comme nom de variable un mot déjà utilisé en interne parMaple (par exemple Pi,
infinity, sqrt, ...).
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
float
Pour chaque type de données présenté ici nous donnons en plus de sa description, quelques
fonctions qui lui sont spécifiques.
Pour tous les types numériques et symboliques, les opérations arithmétiques élémentaires sont
notées +, -, *, / et ^(ou **) pour la fonction puissance.
> 50!-2_27;
30414093201713378043612608166064768844377641568960511999865782272
3.2 - Nombres rationnels
Le type fraction désigne les nombres rationnels non-entiers. Le type rational regroupe les
types integer et fraction. Notons que Maple réduit automatiquement les fractions.
3.3 - Nombres réels
En ce qui concerne les nombres réels il faut faire très attention. Le point essentiel est qu’un
ordinateur ne peut pas stocker une quantité infinie d’informations. Le nombres réels sont en
fait de deux catégories. Il y a d’abord le type float pour les approximations en virgule
flottante. 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 une
précision que l’on peut modifier en changeant la valeur de la variable Digits. Il faut donc
absolument avoir à l’esprit que les calculs et résultats avec des nombres de type float sont
approchés.
Mais il existe une autre catégorie de nombres réels : ceux obtenus à partir de fonctions
classiques (par exemple racine carrée, fonctions trigonométriques et hyperboliques, fonctions
logarithme et exponentielle, ...). Ces nombres ne sont pas évalués sauf si leur
argument est déjà de type float. Leur résultat reste donc sous forme symbolique (comme
sin(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 (eval
to float). Pour obtenir une approximation de sin(3) avec 20 chiffres significatifs on tape par
exemple :
> evalf(sin(3),20);
0.14112000805986722210
Il est bien sur possible lors d’un calcul de mélanger les types integer, fraction et float. Dans ce
cas le résultat est de type float (donc approché).
3.5 – Constantes
Maple utilise un certain nombre de constantes symboliques. Par exemple Pi désigne le
nombre ¼, gamma désigne la constante ° d’Euler (limite de Pnk=11k −ln(n), quand n!1) et
infinity 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 la
variable constants (voir l’aide en ligne).
3.6 – Booléens
Le 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 de
relations (< 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);
true
On dispose bien sûr des opérateurs logiques classiques : not (négation), and (et) et or (ou non
exclusif )
Tableaux, vecteurs et matrices sont des tables particulières. Mais contrairement au cas d’une
table 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-uplets
constitués d’entiers consécutifs. Par array(1..3,-10..10,0..5) crée un tableau à 3 dimensions, le
premier 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ême
faç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,1
Il 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. Par
contre, 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 peut
créer une matrice soit comme on le ferait pour un tableau, soit en donnant la liste de ses
lignes. 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 variant
de 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 la
deuxième partie de ce cours.
5- Graphiques :
Maple dispose de nombreuses commandes et fonctions pour tracer des graphiques des
fonctions 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) à tracer
Intervalle : 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,…)
Exemple :
> plot(cos(x)+2*x^3,x=-Pi..Pi);
4.2. Graphisme 3D :
Forme explicite
Soit 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 implicite
Soit 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) ;
forme paramétrique
Soit a dessiner une courbe dans l’espace dont on connait les equations parametriques
suivantes :
x = f(t)
y = g(t) b < t < a
z = 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 parametriques
sont :
x = cos(t)
y = sin(t) 0 < t < 2π
z=t
les 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 < d
z = h(t,s)
la commande est :
>plot3d([f(t,s),g(t,s),h(t,s)], t = a..b, s = c..d) ;
Conclusion:
Références:
www.google.com