Présentation de l'applet G2DS

Cet "applet" (le nom semble masculin pour Sun), nommé G2DS pour Graphical 2 Dimensional (linear programs) Solver, c'est-à-dire, en français, Solveur Graphique de programmes linéaires en Dimension 2, permet la représentation et la résolution (graphiques) de programmes linéaires à 2 variables (x et y). Depuis la version 2.0, l'applet permet également de résoudre des programmes linéaires avec deux variables entières (ce qui signifie que ces variables sont restreintes à ne prendre que des valeurs entières).
Les paragraphes qui suivent ont pour but de vous guider dans l'utilisation de cet applet.

Remarques et commentaires généraux
Les différents éléments d'un programme linéaire
(Fonction de base) Comment ajouter/supprimer une contrainte ?
(Fonction de base) Comment définir une fonction objectif ?
La zone de statut
Le zoom automatique
Fonctions supplémentaires
Nouvelles fonctions (depuis la version 2.0)


Remarques et commentaires généraux

Les différents éléments d'un programme linéaire

Un programme linéaire est défini par un ensemble de contraintes linéaires et une fonction objectif linéaire. Nous nous intéresserons exclusivement ici aux programmes linéaires contenant 2 variables, x et y, ce qui signifie que toute contrainte s'écrira "ax + by op c" (avec op valant "≥", "=" ou "≤") et que la fonction objectif s'écrira "min/max (dx + ey)".

En résumé, résoudre un programme linéaire consiste à optimiser une fonction linéaire sur un ensemble convexe (polyèdre) représenté, en dimension 2, par un polygone (éventuellement vide ou non borné). Dans la suite, ce polygone sera appelé polygone admissible ou polygone des contraintes. Les "côtés" du polygone sont appelés facettes. Le point commun à deux facettes adjacentes est appelé point de base. Si la valeur optimale d'un programme linéaire est z* et que sa fonction objectif est [opt] dx + ey, la droite d'équation dx + ey = z* est appelée droite optimale.

Si on impose en outre que les variables x et y ne prennent que des valeurs entières, le problème obtenu est appelé programme linéaire en nombres entiers.

(Fonction de base) Comment ajouter/supprimer une contrainte ?

Pour ajouter une contrainte, c'est très simple : placez-vous sur la 3e ligne et remplissez les 3 champs de texte. Le premier correspond au coefficient de x dans la contrainte, le second au coefficient de y, et le dernier au second membre de la contrainte. N'oubliez pas non plus de sélectionner le symbole d'inégalité souhaité ("≥" ou "≤"). Appuyez ensuite sur le bouton "Ajouter" et votre contrainte apparaitra dans la liste déroulante des contraintes, tandis que le polygone admissible se mettra à jour automatiquement. Il existe une autre façon d'ajouter une contrainte, mais elle est détaillée dans la section Fonctions supplémentaires. En appuyant sur le bouton "Annuler", vous remettez à zéro tous les champs de texte de la 3e ligne.

Quelques remarques supplémentaires :

Pour supprimer une contrainte, sélectionnez-la dans la liste des contraintes de la 2e ligne, puis appuyez sur le bouton "Enlever". Pour supprimer toutes les contraintes, appuyez sur le bouton "Vider". N'oubliez pas que les 2 contraintes "x≥0" et "y≥0" ne peuvent pas être supprimées.

(Fonction de base) Comment définir une fonction objectif ?

Une fonction objectif se définit quasiment de la même manière qu'une contrainte. Les 2 champs de texte de la 1ère ligne correspondent respectivement au coefficient de x et au coefficient de y dans la fonction objectif (les 3 remarques de la section précédente portant sur la procédure d'entrée des données s'appliquent également). Sélectionner ensuite "min" (pour minimiser), "max" (pour maximiser) ou "aucune" (pour ne définir aucun objectif), puis appuyer sur le bouton "Définir". La résolution du programme linéaire se lance alors automatiquement. Notez que chaque fois qu'une nouvelle fonction objectif est redéfinie (en appuyant sur "Définir"), l'ancienne est effacée.

La zone de statut

La zone de statut est située sous les 3 lignes de saisie de l'applet, juste au-dessus de la zone où s'affiche la représentation graphique du problème. Cette zone de statut, qui s'affiche en rouge, est utilisée par l'applet pour vous avertir du statut courant de la résolution (nombre de solutions de base admissibles, valeur optimale, affichage ou non des solutions entières, etc.). Lors d'une utilisation de l'applet, vous pouvez bien sûr ajouter autant de contraintes que vous le voulez (la limite étant celle du temps de calcul !) et redéfinir la fonction objectif autant de fois que vous le souhaitez. À chaque fois qu'une contrainte est ajoutée ou retirée, le polygone des contraintes se met à jour automatiquement (les facettes du polygone sont les traits noirs), ainsi que la zone de statut. De même, lorsque l'objectif est défini/redéfini, la droite optimale s'affiche à l'écran et le statut se met à jour, sauf si le programme linéaire n'admet pas de solution optimale (auquel cas, cela vous sera notifié de toute façon dans le statut).

Le zoom automatique

Pour dessiner correctement le polygone admissible, l'applet calcule automatiquement le facteur de zoom le plus "adapté". Il vous informe de l'échelle utilisée à travers les valeurs "Xmax" et "Ymax". Sur chaque axe (celui des abscisses et celui des ordonnées) se trouvent représentés 10 points à intervalle régulier. Le 10e point sur l'axe des x correspond au point d'abscisse Xmax, le 10e sur l'axe des y à celui d'ordonnée Ymax. Les autres points sur l'axe des x ont donc pour coordonnées respectives Xmax/10, 2*Xmax/10, etc.

Fonctions supplémentaires

Cette section détaille les fonctionnalités supplémentaires offertes par l'applet qui ne sont pas indispensables pour une utilisation basique. Nous allons commencer par les fonctionnalités liées à des boutons :

D'autres fonctions sont disponibles :

Nouvelles fonctions (depuis la version 2.0)

Cette section détaille les nouvelles fonctionnalités offertes par l'applet depuis sa version 2.0. Elles concernent la possibilité de résoudre le programme linéaire entré par l'utilisateur comme un programme linéaire en nombres entiers. Plus précisément, il sera d'abord résolu comme un programme linéaire, puis comme un programme linéaire en nombres entiers. Pour activer ce mode, il suffit de cliquer (un seul clic) sur la zone de texte "Sous contraintes :" (qui affiche, dès le moment où la souris passe dessus, le nombre de contraintes) : alors, le suffixe "(e)" est ajouté à cette zone de texte (pour indiquer le fait qu'on est entré en mode d'affichage des solutions entières), et les informations sur les solutions entières du programme linéaire (nombre de solutions entières, polyèdre des contraintes non borné, existence ou non d'une solution entière optimale, etc.) apparaissent dans la zone de statut. En outre, les solutions entières contenues dans la zone d'affichage sont affichées sous la forme de petits carrés noirs, et, si une fonction objectif a été définie et si la valeur optimale entière est finie (et la solution optimale entière contenue dans la zone d'affichage !), alors cette solution optimale entière est affichée sous la forme d'un petit carré de couleur (4).

Pour quitter ce mode (et revenir au mode normal), il suffit de recliquer (un seul clic) sur la zone de texte "Sous contraintes :". Il convient de remarquer que la raison pour laquelle la zone d'affichage est définie en fonction des solutions de base admissibles et non en fonction des solutions entières (et, en particulier, de la solution entière optimale) est que cette dernière peut être très éloignée de toutes les solutions de base admissibles (et donc de la solution de base optimale). Par exemple, si l'on considère le programme linéaire suivant : maximiser -3x+y, sous contraintes y ≥ 3/2, -x+20y ≤ 30, x ≥ 0 et y ≥ 0, la solution de base optimale est (x = 0, y = 3/2), alors que la solution entière optimale est (x = 10, y = 2) !