L3 Informatique / L3 Miage 2017-18
Option Introduction à l'Intelligence Artificielle

Présentation du cours :

Le pdf des diapositives de la présentation du cours.

TD 3 (sur machine) : Algorithmes pour les jeux

Pour ce td, télécharger cette archive

Décompressez cette archive en ouvrant un terminal et en utilisant la commande suivante:
(enlevez l'option "z" si l'archive a déjà été décompressée lors du téléchargement)

tar xzf iia.td3-4.tgz

Avant toute chose on vous demande de :
  1. Placer ce répertoire à l'endroit approprié danss votre arborescence
    (par exemple un dossier intro_ia que vous aurez créé).
  2. Renommer le répertoire iia.td3-4_Nom1_Nom2 obtenu en remplaçant Nom1 et Nom2 par les noms respectifs des deux membres du binôme, dans l'ordre alphabétique.
    (exemple : mv iia.td3-4_Nom1_Nom2 iia.td3-4_Bidule_Machin)
  3. Pour ceux qui utilisent l'IDE Eclipse pour éditer leur code :
    la version d’Eclipse installée (Neon) permet d’importer directement des projets Maven existants. Cependant, comme cet IDE utilise par défaut sa propre version (intégrée) de l’utilitaire Maven, le style d’adressage des machines de certaines salles de TP nécessite de déclarer au préalable une adresse de proxy pour Maven. Pour cela, après avoir lancé Eclipse :
    1. ouvrir la fenêtre "Preferences" d’Eclipse et sur la gauche déployer le sous-menu "Maven" en cliquant sur triangle correspondant
    2. Cliquez sur User Settings et, dans le champs Global Settings, rajouter le chemin le chemin : /etc/maven/settings.xml

    Vous pouvez à présent importer un projet Maven existant via le menu :
    File > Import
    puis en sélectionnant dans la liste les projets Maven (cliquer sur le petit triange à gauche) puis Existing Maven Project.
    Indiquez alors le chemin jusqu'au répertoire où se trouve le fichier pom.xml.

    Mais vous pouvez utiliser aussi bien l'éditeur ou l'IDE de votre choix.
  4. Le fichier pom.xml (pom = Project Object Model) est un descripteur des caractéristiques de votre projet pour l'utilitaire Maven.
    Editez-le et changer le nom de votre projet (entre les balises name) et modifiez le nom du projet en remplacant Nom1 et Nom2 par vos noms respectifs.
  5. Lisez les explications ci-dessous relatives aux projets Maven.
  6. Ne cherchez pas à compiler ni exécuter votre projet à partir de l'IDE eclipseb (d'autres paramétrages seraient nécessaires). Ouvrez un terminal et suivez les indications concernant maven indiquées ci-dessous.
Merci de ne pas sauter cette étape.
La semaine prochaine, vous aurez à rendre votre travail sous la forme d'une archive, et cela permettra à vos chargés de TD d'avoir une structure homogène pour tester votre travail et de ne pas se retrouver avec 20 dossiers tous nommés de façon identiques.

ATTENTION à ne pas modifier l'organisation du code du projet dans votre répertoire (sous-répertoires, noms de packages,...) car le travail rendu sera testé sous l'hypothèse d'avoir préservé cette organisation.

Vous pouvez à présent commencez à travailler.

TD 6 (sur machine) : Algorithmes de recherche non informés dans les graphes d'états

Pour ce td, télécharger cette archive td6

TD 8 (sur machine) - Algorithmes de recherche informés

Pour ce td, télécharger cette archive.

Si besoin, décompressez la, à l'aide de la commande suivante:

tar xzf iia.td8_Nom1_Nom2.tar.gz

Comme pour le TP précédent, le projet est livré sous la forme d'une archive Maven. Commencez par renommer le répertoire en remplacant Nom1_Nom2 par les noms de votre binôme, et modifier de la même façon le nom du projet dans le fichier pom.xml.

Devoir

Quarto

[29/03/2019] Suite à des problèmes de santé... le code de l'arbitre n'a pu être finalisé dans les temps et vous sera donné très prochainement.
Vos chargés de tds s'excusent pour ce retard involontaire.

[30/03/2019]
Date limite pour le rendu du projet : 23 avril 2018

Pour pouvoir lancer le serveur de jeu en réseau, vous avez besoin d'intégrer votre propre projet avec les 4 classes du paquetage quartoplus que vous trouverez ici . Vous devez télécharger ces sources java et les mettre dans un répertoire (qui fait office de paquetage) appelé quartoplus. Ces quatres classes sont :

Une archive JAR contenant les classes (compilées) du serveur de jeu en réseau est disponible.
Pour lancer le serveur, il faut lancer la commande suivante, après avoir récupéré le .jar comme il se doit :
java -cp obquartoplus.jar quartoplus.ServeurJeu 1234 1

Cette commande permet de lancer un ServeurJeu sur la machine courante. Vous noterez que le serveur est indépendant, à l'intérieur de son propre jar et vous n'avez pas à le placer avec votre propre projet. Sur cet exemple, le serveur attend des connections sur le port de la machine locale, numéro 1234.
Le dernier paramètre permet de spécifier si l'on souhaite utiliser l'applet pour l'interface graphique (1) ou pas (0).

Une fois que le serveur est lancé, il faut lancer deux ClientJeu, chacun avec une classe de IJoueur à charger. Pour cela, il faut obligatoirement que ClientJeu soit compilé avec la même version Java que votre IJoueur. Comme chaque ClientJeu communique avec le serveur via le réseau, chaque joueur pourra être compilé avec sa propre version de Java. Vous devrez impérativement compiler ces fichiers avec votre projet pour entrer dans le tournoi.

Pour lancer un ClientJeu, en supposant par exemple qu'on veuille lancer la classe JoueurSuperFort (qui implante la classe IJoueur), et en supposant que tout le projet est dans un paquetage nommé fousfous il faut compiler le tout et lancer :
java -cp . quartoplus.ClientJeu quartoplus.JoueurSuperFort localhost 1234

Le ClientJeu va charger la classe fousfous.JoueurSuperFort (que vous avez créé) et se connecter sur le serveur qui devrait être sur la machine localhost, sur le port 1234. Vous noterez qu'il faut faire cela deux fois, de manière à connecter deux joueurs. Au total, vous aurez donc 3 terminaux shell qui s'agiteront! Vous pouvez aussi changer à loisir les classes dont vous avez les sources, dans la mesure où seuls les coups circulent sur le réseau, sous forme de chaines de caractères (et non des objets java).

Remarque : pour simplifier le mode d'interaction avec l'arbitre, tous les coups joués sont transis sous la forme d'une chaine comprenant à la fois une position et la pièce sélectionnée pour l'adversaire. Pour le premier coup joué, la position est ignorée. Vous pouvez donc mettre une valeur arbitraire, parmi les 16 possibles.

Nous vous fournissons aussi, dans l'archive jar donnée ci-dessus, un joueur aléatoire pour tester vos IA. Pour lancer ce joueur aléatoire, il faut lancer :
java -cp obquartoplus.jar quartoplus.ClientJeu quartoplus.JoueurAleatoire localhost 1234

La durée maximale sera fixée à 5 minutes de temps cpu par partie et par joueur.

A rendre:
  1. Le rapport (cf. indications dans le sujet)
  2. Les sources de votre projet
  3. Un .jar executable Nom1Nom2.jar

Si des précisions devait être apportées sur le déroulement du projet, les réponses seront formulée sur cette page. Pensez à la consulter régulièrement.

Questions posées sur le devoir

Examen

Pour l'examen, les documents autorisés sont une copie double (i.e. 4 pages) manuscrite de résumé de cours (pas de photocopie, ni d'impression), que vous rédigerez à votre guise. Choisir que vous décidez d'y mettre (ou pas) est déjà une façon de réviser.

Vous devez naturellement être capable de faire tourner les algorithmes que nous avons vus. Vous devez aussi avoir bien compris les principaux résultats du cours (qui pourront être évalués par quelques questions à réponse courte).

A titre d'exemple, vous touverez ici le sujet de l'examen de l'an passé.

Bonnes révisions.

Juste un mot sur Maven

Maven (http://maven.apache.org) est un utilitaire très pratique de gestion de projet, qui facilite un grand nombre de tâches récurrentes dans le processus de développement d'un projet, comme la compilation, vérification des tests unitaires, validation, documentation, déploiement, ....
Il est très largement utilisé pour tout ce qui est développement d'applications Java et la connaissance de cet outil est un atout apprécié dans le milieu professionnel.

La philosophie est d'avoir une structuration rationelle de l'organisation du code et de décrire les caractéristiques d'un projet et de l'ensemble des tâches à accomplir par quelque lignes de XML dans le fichier pom.xml.
Un grand nombre de tâches classiques peuvent être intégrées au processus via un certain nombre de plugins, qui se chargent automatiquement en cas de besoin (la premier appel à Maven provoque généralement le chargement de tout un tas de plugins, mais cela ne se fera qu'une fois).

Si vous n'êtes pas un habitué des IDE de développement tel Eclipse, Netbeans, etc
retenez juste que Maven permet en une seule ligne de compiler, lancer les tests unitaire et packager votre code très simplement depuis un terminal.
Il suffit de se placer à la racine du projet (i.e. au même niveau que le fichier pom.xml) et d'utiliser la commande :

mvn package

Cela créera dans un répertoire target une archive iia.td3_Nom1_Nom2-1.0.jar (bien évidemment avec vos propres noms)

Vous pouvez alors simplement exécuter une classe java (possédant une méthode main()) à l'aide de la commande

java -cp target/iia.td3_Nom1_Nom2-1.0.jar NomDeLaClassePrecedeDeSonPackage

D'autres commandes Maven :
mvn compile
compile le projet (dans le répertoire target/classes)
mvn test
lance les tests unitaires (résultats dans le répertoire target)
mvn clean
efface tous les fichiers intermédiaires générés
mvn install
installe le projet dans le répertoire Maven Local de votre machine
Il est donc tout à fait possible d'utiliser votre éditeur favori pour modifier votre code et de gérer tout le processus de compilation directement depuis un terminal.

Si vous préférez travailler avec votre IDE, les projets Maven sont reconnus en standard par Netbeans. Pour Eclipse il faut s'assurer d'utiliser une version assurant le support des projets de type Maven.
Sous Eclipse, vous pouvez compiler / effacer le repertoire target en faisant un clic droit sur l'icone de votre projet en sélectionnant les commandes Run as>Maven install et Run as>Maven clean


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