L3 Informatique / L3 Miage -- 2018-19
Option Introduction à l'Intelligence Artificielle

Présentation du cours :

Le pdf des diapositives de la présentation de ce 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.

Devoir

Escampe

[05/04/2019] Date limite pour le rendu du projet : 5 mai 2019

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

Une archive JAR contenant les classes (compilées) du serveur de jeu en réseau est disponible ici Pour lancer le serveur, il faut lancer la commande suivante, après avoir récupéré le .jar comme il se doit :
java -cp escampeobf.jar escampe.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 1234 de la machine locale.
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é escampe il faut compiler le tout et lancer :
java -cp . escampe.ClientJeu escampe.JoueurSuperFort localhost 1234

Le ClientJeu va charger la classe fousfous.JoueurSuperFort (que vous avez créée) 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! V
ous 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 obescampe.jar escampe.ClientJeu escampe.JoueurAleatoire localhost 1234

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

A rendre sur Dokeos :
  1. Le rapport (cf. indications dans le sujet)
  2. Les sources de votre projet
  3. Un .jar executable nommé 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.

[05/05/2010] L'arbitre a été mis à jour pour tenir compte d'une erreur qui permettait à une licorne de prendre la licorne adverse.
Merci de recharger la nouvelle version pour vos tests.

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.

Résultats du tournoi

Vous trouverez ci dessous les résultats complets du tournois :



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

Commentaire PC :
Il y a vraiment de quoi être déçu par les performances de vos joueurs.
Près de 40% des parties se terminent en moins de trois coups !
Cela veut dire qu'un nombre non négligeable de vos projets ne sont même pas capables d'aligner les pions au départ ou de jouer un 1er coup valide après avoir les avoir posés.
Près de 60% des parties se terminent par un coup illégal.

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.