L3 Informatique / L3 Miage 2016-17
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

Les Fous-Fous

Date limite pour le rendu du projet : 7 avril 2017

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 fousfous 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é fousfous. Ces quatres classes sont :

L'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 obfousfous.jar fousfous.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.

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 . fousfous.ClientJeu fousfous.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).

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 obfousfous.jar fousfous.ClientJeu fousfous.JoueurAleatoire localhost 1234

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.

Pour information, vous touverez ici le sujet de l'examen de l'an passé. Bonnes révisions.

Commentaires sur les résultats de l'examen

Les résultats sont vraiment décevants !
La moyenne générale est à 8.28.

La moyenne par exercice est de : Le faible niveau de ces résultats s'explique s'explique sans doute en partie par le fait que certains étududiants se sont très peu investi dans cet enseignement, avec des taux d'absences tres importants et et des résutlats en conséquence (8 étudiants sur 35 on une note inférieure à 5).

Mais d'un autre côté il est tout de même surprenant de constater à quel point certaines notions, pourtant élémentaires ne sont pas maîtrisées. Pour ceux susceptible de passer au rattrapage, essayez de faire le point sur vos lacunes et sur ce que vous souhaitez revoir lors de la séance de soutien.

Résultats du tournoi

Vous trouverez ci dessous les résultats complets du tournois avec la syntèse des matchs :



Et les résultats détaillés de chaque match sont ici.

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.