Présentation du logiciel G2DS

Ce logiciel, qui s'appelle 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).

Ce logiciel a connu 3 versions publiques depuis 2005 : la version 1.0, la version 2.0, et la version 3.0 (qui est précisément la version actuelle). Jusqu'à la version 2.0 (incluse), ce logiciel était implémenté en tant qu'applet Java (un programme Java particulier, destiné à n'être exécuté qu'au sein d'une page web), et, depuis la version 2.0 (incluse), il 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). Depuis la version 3.0, ce logiciel prend la forme d'un simple programme Java.

Les paragraphes qui suivent ont pour but de vous guider dans l'utilisation de ce logiciel.

Remarques et commentaires généraux
Les différents éléments d'un programme linéaire
Comment exécuter ce logiciel ?
(Fonctionnalité de base) Comment ajouter/supprimer une contrainte ?
(Fonctionnalité de base) Comment définir une fonction objectif ?
La zone de statut
Le zoom automatique
Fonctionnalités supplémentaires
Nouvelles fonctionnalités (depuis la version 2.0)
Nouvelles nouvelles fonctionnalités (depuis la version 3.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) » (min pour « minimiser » et max pour « maximiser »), où a, b, c, d et e sont des constantes.

En résumé, résoudre un programme linéaire consiste à optimiser (minimiser ou maximiser) une fonction linéaire sur un ensemble convexe (polyèdre) correspondant, en dimension 2, à 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é sommet, point de base ou (avec un léger abus de langage) solution de base admissible. Si la valeur optimale d'un programme linéaire donné (i.e., la meilleure valeur qu'une de ses solutions de base admissibles puisse prendre) est finie et est notée z*, et que sa fonction objectif est « [opt] (dx + ey) » (où [opt] vaut min ou max), alors 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, alors le problème obtenu est appelé programme linéaire en nombres entiers.

Comment exécuter ce logiciel ?

Ce logiciel est implémenté, dans sa version actuelle, sous la forme d'un programme Java (et plus précisément distribué sous la forme d'une archive JAR). Comme tout programme Java, cela signifie que, pour l'exécuter, vous aurez besoin qu'une machine virtuelle Java (appelée Java Virtual Machine -ou JVM- en anglais) soit présente sur votre ordinateur.

La commande de base à écrire dans une console ou un terminal pour exécuter un programme Java nommé G2DS et fourni sous forme d'archive JAR (et dont le nom complet est par conséquent « G2DS.jar ») est la suivante (où « java » est précisément le nom du programme correspondant à la JVM, et où « > » est le symbole de l'invite de commande) :

> java -jar G2DS.jar

Néanmoins, ce logiciel possède plusieurs options. D'abord, on peut préciser la langue souhaitée lors du lancement du programme (anglais ou français), grâce à la première option : il suffit d'écrire « en » pour l'anglais, et « fr » pour le français. Si on ne précise rien (comme c'est le cas dans l'exemple précédent), alors le logiciel se lancera par défaut en anglais.

L'exemple précédent est donc équivalent à l'appel suivant (en d'autres termes, dans les deux cas, le logiciel se lancera en anglais) :

> java -jar G2DS.jar en

Si on souhaite lancer le logiciel en français, alors il suffit simplement d'écrire :
> java -jar G2DS.jar fr

Ensuite, il est possible d'initialiser le programme linéaire résolu par le logiciel à l'aide d'un fichier texte (qui contient ainsi des contraintes et/ou une fonction objectif pour ce programme linéaire). Il y a deux options associées à cette possibilité : la première est le nom du fichier texte contenant ces informations, et la seconde (facultative) est le symbole (caractère) utilisé comme séparateur dans ce fichier (qui sera noté sep dans la suite, et qui peut être n'importe quel caractère sauf « . »). En effet, le format d'un tel fichier doit être le suivant :
Il est à noter, d'une part, que la valeur par défaut du séparateur sep (celle qui sera appliquée si aucune autre valeur n'est précisée) est « , », et, d'autre part, qu'un exemple d'un tel fichier (représentant un programme linéaire ayant une fonction objectif en minimisation et 3 contraintes, et dans lequel le séparateur est celui par défaut), nommé « Test.txt », est disponible
ici.

Pour utiliser ce fichier au lancement, il suffit donc d'écrire (noter l'indication explicite du séparateur « , ») :

> java -jar G2DS.jar fr Test.txt ,

Néanmoins, comme le séparateur utilisé dans ce fichier est en réalité celui par défaut, on pourrait même ici se contenter d'écrire (noter cette fois-ci l'absence de « , » à la fin) :

> java -jar G2DS.jar fr Test.txt

(Fonctionnalité 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 (ou membre de droite) 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 apparaîtra 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 Fonctionnalités 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 déroulante 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, dans la version actuelle du logiciel, les 2 contraintes « x ≥ 0 » et « y ≥ 0 » ne peuvent pas être supprimées.

(Fonctionnalité 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 de saisie des données s'appliquent également dans ce cas). Sélectionnez ensuite « min » (pour minimiser), « max » (pour maximiser) ou « aucune » (pour ne définir aucun objectif), puis appuyez 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 du logiciel, 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 le logiciel 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 du logiciel, 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 de toute façon notifié dans le statut).

Le zoom automatique

Pour dessiner correctement le polygone admissible, le logiciel 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, et 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.

Fonctionnalités supplémentaires

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

D'autres fonctionnalités sont disponibles :

Nouvelles fonctionnalités (depuis la version 2.0)

Cette section détaille les nouvelles fonctionnalités offertes par le logiciel depuis sa version 2.0. Elles concernent la possibilité de résoudre le programme linéaire saisi 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 soulignée « Sous contraintes : » (qui affiche en fait, dès le moment où le curseur de la souris passe dessus, le nombre de contraintes du problème, également souligné) : 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 soulignée « 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) !

Nouvelles nouvelles fonctionnalités (depuis la version 3.0)

Cette section détaille les nouvelles (nouvelles) fonctionnalités offertes par le logiciel depuis sa version 3.0.

En premier lieu, si vous cliquez (un seul clic) sur la zone de texte soulignée « Statut du problème : » (qui affiche en fait, dès le moment où le curseur de la souris passe dessus, le nombre de facettes du problème, également souligné), alors une première facette du problème (parmi celles qui ne sont ni « x = 0 », ni « y = 0 », s'il en existe au moins une !) est sélectionnée (et prend donc la couleur (3)), et la contrainte correspondante est également sélectionnée dans la liste déroulante des contraintes (2e ligne). Si vous recliquez (toujours un seul clic) sur cette même zone de texte, une autre facette est sélectionnée (ainsi que la contrainte correspondante), puis une autre, et ainsi de suite. Si vous cliquez suffisamment de fois pour que toutes les facettes aient été sélectionnées successivement, alors le processus recommencera à nouveau à partir de la première facette. Notez que l'ajout ou la suppression d'une contrainte (et d'autres événements, comme le fait de faire résoudre le problème comme un programme linéaire en nombres entiers) vous fait sortir de ce mode (et il faut alors recommencer tout le processus depuis le début, le cas échéant).

En second lieu, si vous cliquez (un seul clic) sur la zone de texte soulignée qui indique le nombre de solutions de base admissibles du problème (1ère ligne de statut, en rouge), alors une première solution de base admissible du problème est sélectionnée (et prend donc la couleur (3)), et ses coordonnées s'affichent dans la zone de texte « Solution de base affichée : » (qui, tant que ce n'est pas le cas, affiche simplement « Solution de base affichée : aucune »). Si vous recliquez (toujours un seul clic) sur cette même zone de texte, une autre solution de base admissible est sélectionnée (et, à nouveau, ses coordonnées s'affichent dans la zone de texte « Solution de base affichée : »), puis une autre, et ainsi de suite. Si vous cliquez suffisamment de fois pour que toutes les solutions de base admissibles aient été sélectionnées successivement, alors le processus recommencera à nouveau à partir de la première solution de base admissible. Notez, ici aussi, que l'ajout ou la suppression d'une contrainte (et d'autres événements, comme le fait de faire résoudre le problème comme un programme linéaire en nombres entiers) vous fait sortir de ce mode (et il faut alors recommencer tout le processus depuis le début, le cas échéant).