Intelligence Artificielle : Logique et Contraintes

Les transparents de présentation de l'option IALC :

alt= "si vous ne pouvez les visualiser dans la page, ils sont téléchargeables" ici


La visualisation n’est pas encore disponible sur votre navigateur, veillez à le mettre à jour.

Comment obtenir la suite IBM ILOG CPLEX Optimization Studio 12.8 (licence étudiant) ?

Bien que cela ne soit pas strictement indispensable pour ce cours (vous pouvez toujours travailler à distance par ssh en vous connectant sur l'une des machines tp-ssh{1,2}.dep-informatique.u-psud.fr) il est possible de télécharger la suite d'optimisation d'IBM, avec une licence "étudiant".

IBM a un des accords avec diverses institutions du monde académique et par ce biais, permet aux étudiant pouvant justifier de leur statut d'accéder à un certain nombre de ressources.

Cela nécessite un enregistrement préalable en tant qu'utilisateur étudiant, pour laquelle vous devrez utiliser votre adresse email @u-psud.fr, vérifiée sur la page :

https://ibm.onthehub.com/WebStore/Account/VerifyEmailDomain.aspx
(Cliquer sur "s'inscrire")

Vous pourrez ensuite télécharger la suite en suivant le lien suivant :

https://ibm.onthehub.com/WebStore/OfferingDetails.aspx?o=9b4eadea-9776-e611-9421-b8ca3a5db7a1

(NB : le site d'IBM est en constante évolution, si le lien ne marche plus, faites un recherche par nom sur "IBM ILOG CPLEX Optimization Studio")

Documentation locale de IBM ILOG CPlex Optimization Studio

La version actuellement installée sur les machines du PUIO est la 12.7.1
Une version de la documentation est accessible en local via l'url :

file:///opt/ibm/ILOG/CPLEX_Studio1271/doc/html/en-US/documentation.html

Documentation de la suite CPLEX Optimization Studio

Il est fortement conseillé de se créer (tout de suite) un bookmark dans votre navigateur à cette adresse, pour pouvoir y accéder facilement.

Pour accéder à la partie de la documentation concernant les langages OPL IBM ILOG Script for OPL, il suffit de déplier la table des matières, dans le menu latéral gauche.

Attention aux informations que vous pourriez trouver en passant par un moteur de recherche. Il existe des variations significatives entre les différentes versions de la suite CPLEX Optization Studio. Certaines constructions peuvent s'avérer obsolètes.

Conseils préalables

Essayez de rester organisés.

Commencez par créer un répertoire pour ce cours (par exemple ialc) à l'emplacement de votre choix sous votre hiérarchie.

Dans ce répertoire, vous allez placer un répertoire opl
qui contiendra tout le code Opl que vous allez écrire au fur à mesure des tps à venir, ainsi que le code que vous réaliserez pour votre devoir.

Dans la suite, pour une meilleure efficacité, il vous est suggéré de travailler en binôme, à deux devant le même écran (plutot que chacun sur son écran). Cela permet généralement de gagner du temps car l'un peut vérifier ce que tape l'autre et corriger plus rapidement les erreurs.

En fin de TP, vous penserez à partager le code réalisé durant le TP avec votre binome (Il est fortement conseillé de gérer votre dossier avec le gestionnaire de version git, et de le partager via le serveur de l'université gitlab.u-psud.fr (voir les indications ci-dessous).

TD 5 (sur machine)

Conseil Préalable
Télécharger le fichier : archiveTD5.tgz

Si c'e n'est déjà fait, vous pouvez décompresser à l'emplacement de votre choix avec la commande :
tar xzf archiveTD5.tgz

Déplacez ensuite le dossier opl de cette archive dans le dossier que vous avez créé pour ce cours et suivez les instructions de la feuille de td.

Rappel : Evaluez vos modèles dans un terminal avec une commande du type :
oplrun .mod

TD 6 (sur machine)

Archive à télécharger : archiveTD6.tgz

Ajouter les dossiers figurant dans cette archive dans le répertoire opl de votre projet que vous avez créé lors de la séance précédente.

TD 7 (sur machine)

Archive à télécharger : archiveTD7.tgz

Ajouter les dossiers figurant dans cette archive dans votre répertoire opl.

TD 8 (sur machine)

Archive à télécharger : td8_ialc_nom1_nom2.tgz à compléter

TD 9 (sur machine)

Archive à télécharger : sudoku.tgz

TD 10 (sur machine)

Archive à télécharger : usine.tgz

Devoir

[2019/02/27]
Vous pouvez télécharger le sujet du devoir.

Vous pouvez télécharger une archive vous indiquant la façon de structurer votre code de façon adéquate, et contenant les les librairies et données présentées dans le sujet du devoir.

[2019/03/11] Un serveur OSRM a été mis en place sur le réseau des machines du département. Il est accessible en interne via : http://osrm.dep-informatique.u-psud.fr:5000 (sur le port 5000).

A partir de l'extérieur (e.g. depuis chez vous) il est possible d'y accéder en vous connectant par ssh sur sur l'une des passerelles tp-sshX du département (c.f. http://www.dep-informatique.u-psud.fr/node/350)

[2019/03/13] La DI de l'université a ouvert le traffic vers le serveur OSRM interne. Vous pouvez donc directement y accéder à partir de votre machine personnelle depuis l'extérieur de l'université, sans avoir besoin de passer par ssh.

[2019/04/08] Précisions sur format demandé pour les résultats (voir ci-dessous)

[2019/04/09] Nouvelle version de l'archive avec des instances et le code fourni pour l'affichage et la sauvegarde.

Précisions sur le format adopté pour sauvegarder les résultats

Afin de simplifier la sauvegarde des résultats et d'homogénéiser la visualisation des solutions de vos modèles sur une carte on se propose de modéliser l'ensemble des informations relatives aux planning de l'infirmière (des infirmières) par : Une étape correspond correspond ici :

Code additionnel fourni :

Afin d'éviter toute ambiguité, la structure permettant de représenter une étape vous est donnée dans le fichier structuresResultat.mod.
tuple Etape {
	string infirmiere;	// la chaine correspondant au nom de l'infirmière
	int	etape;		// numéro d'étape pour le planning de l'infirmière (0 pour la premier passage au cabinet)
				// nb s'il y a plusieurs infirmières qui travaillent, chacune d'entre elle a une étape 0.
	string visite;		// Nom du Patient visité ou "cabinet" (pour première et la dernière étape d'un planning )
	string adresse; 	// Adresse (au format string) du patient ou du cabinet (telle que dans l'instance)
	float latitude; 	// Latitude de l'adresse 
	float longitude;	// Longitude de l'adresse 
	string description;	// codes de soins ou "Depart Bureau" ou "Transmissions"
	int debut;      	// horaire (en mn) du début de l'étape (entier compris entre 0 et 1439)
	int duree;      	// (durée de la visite en mn) ou  0 (pour la premire étape) ou durée des transmissions (en mn)
	int fin;      		// horaire de la fin de l'étape (en mn) du début des soins (entier compris entre 0 et 1439)
	int transit; 		// vers l'étape suivante (O si c'est la dernière étape)
}
Remarques :

Sauvegarde des résultats

On souhaite sauvegarder les résultats dans un fichier .res dont la syntaxe est similaire à celle des fichiers .dat, de façon à pouvoir relire par la suite ces données pour les vérifier automatiquement.

Une bonne nouvelle c'est que vous trouverez dans le fichier ../libs/results.js une fonction save_result(cost,steps,modelName) qui permet de sauvegarder directement le résulat au format demandé.
Vous n'avez donc pas à écrire de code pour cela.
Cette fonction à trois paramètres, correspondant respectivement au coût optimal (l'objectif de votre modèle), à l'ensemble d'étapes de vos plannings, et au nom du fichier de modèle ayant permi de produire cette solution.

En pratique, la seule chose que vous avez donc à faire consiste à :
  1. définir dans votre fichier de modèle une variable modelName que vous initialiserez avec le nom du fichier correspondnant au modèle :
    Exemple : string modelName = "visite1";
  2. définir dans la partie posttraitement une variable optimum que vous initialiserez avec la valeur de votre objectif (qui peut varier suivant les modèles)
    Exemple : int optimum = la valeur de votre objectif;
  3. définir dans la partie posttraitement une variable steps correspondant à un ensemble d'étapes (initialisée à l'ensemble vide au au départ)
    Exemple : {Etape} steps = {};
  4. ecrire un bloc de script qui, à partir de valeurs de vos variables de décisions et de celles initialisées lors du prétraitement, ajoute les différentes étapes des plannings dans l'ensemble steps
  5. appeler dans un bloc de script la fonction save_result(optimum,steps,modelName);
Les fichiers modèles de la nouvelle version de l'archive montre un exemple de structuration adéquate. Le code mutualise cette partie dans un fichier postProcessing.mod qui ne vous reste qu'à complèter. Remarque : Si vous inspectez les tuples créés dans le fichier résultat, vous pourrez noter que les attributs des tuples ne sont pas séparés par des virgules. Il en est de même des éléments constituant
Il est néanmoins possible de relire directement de tels fichiers, comme s'ils avaient la syntaxe Opl dans un fichier .dat, qui peut permettre ensuite de vérifier automatiquement les solutions.

Visualisation des solutions

Sous réserve d'avoir bien défini dans votre modèle les trois variables modelName, optimum et steps, vous pouvez également ajouter en fin de posttraitement la ligne
include "postProcessingMap.mod";
Ceci a pour effet de convertir les données décrivant les plannings construits et celles utiles à leur visualisation sur une carte OpenStreetMap dans la syntaxe javascript. Le fichier dataVis.js est généré dans le répertoire ../visualizaton. Il vous suffit alors d'ouvrir avec votre navigateur préféré le fichier map.html situé dans le répertoire ../visualizaton pour visualiser l'ensemble des plannings construit par votre modèle.

Exemple :

[Visualisation d'une solution sur une carte OpenStreetMap']

Mise à jour de l'archive

Vous pouvez télécharger une nouvelle version de l'archive, qui contient le code évoqué ci dessus ainsi que quelques instances que vous utiliser pour tester vos modèles.
Merci de signaler rapidement tout problème éventuel.
Attention à ne pas écraser le travail réalisé en décompressant cette nouvelle archive.
Procédez plutot en regardant ce qui a été modifié dans la nouvelle archive pour l'intégrer progressivement à votre travail.

Report de la date de rendu du devoir

La date limite pour le rendu du devoir est reportée au 07/05/2019 - 23h59

Réponses aux questions posées sur le devoir

Pas encore de question à ce jour.
Notez qu'il ne sera plus possible de répondre aux éventuelles questions à compter du 25/04. Donc n'attendez pas le dernier moment pour vous y mettre.

Pour réviser

Enoncé du sujet d'examen
2018

L'examen durera 2h30.
Les documents ne sont pas autorisés, mais vous pouvez amener un résumé de cours de 4 pages (2 feuilles recto/verso) manuscrites.

Utilisation de git pour ce cours

  1. Chacun d'entre vous a la possibilité de gérer des projets sur le serveur gitlab.u-psud.fr de l'université.
  2. Il suffit pour chaque binôme, que l'un des membres du binôme crée une archive privée pour ce cours et donne accès à cette archive à l'autre membre du binôme. (vous pouvez aussi créer une autre archive dans le seul but de vous entrainer avec les commandes de git).
  3. de faire chacun un clone de cette archive sous votre compte utilisateur.
A présent, vous allez pouvoir à chaque séance compléter cette archive en rajoutant au fur et à mesure de la résolution des différents problèmes abordés, les codes source correspondants. Pour cela, vous devrez apprendre à vous servir des commandes suivantes : D'autres commandes utiles : Quelques conseils :

Si vous faites attention à ne pas travailler à plusieurs simultanément sur des mêmes parties de projet, vous pouvez déjà gagner énormément en compétence en utilisant régulièrement ces commandes de base.

Naturellement, git permet de faire des choses plus avancées. Le site de référence concernant git est https://git-scm.com.

Vous trouverez une traduction francaise du livre "Pro Git" accessible en ligne à : https://git-scm.com/book/fr/v2.

Rédacteur de cette page (pour toute remarque) : Philippe Chatalic.