Projets d'année 2000-2001 : dominante PROGRAMMATION
Vous trouverez ci-joint la liste de différents projets d'année de maîtrise
illustrant les concepts de programmation du cours POD. Ces projets sont
proposés en règle générale pour deux étudiants mais peuvent être adaptés selon le nombre de participants.
Plusieurs documentations
en ligne sont indiquées à lecture des étudiants désirant
étudier un sujet.
Pour d'autres références ou indications contacter par mél les enseignants du module.
Certains projets peuvent être choisis sur 2 spécialités (1 étudiant en spécialité ``programmation'' et 1 étudiant en IA ou algorithmique graphique).
Vous trouverez d'autres propositions de projets sur les pages de :
Pascal Manoury : http://www.pps.jussieu.fr/~eleph/
Marc Pouzet : http://www-spi.lip6.fr/~pouzet/
Christian Queinnec : http://youpou.lip6.fr/queinnec/Teaching/projects.html
1 Extensions et applications en O'CAML
Ces différents sujets propose de réaliser des applications et des extensions en Objective Caml.
1.1 OCAML Flight
CAML Flight est une extension data-paralèlle de caml-light. Un même programme tourne sur différentes machines.
Chaque machine possède un numéro unique. Chaque programme peut demander, dans une section synchronisée (SYNC( expr )),
un calcul distant (GET(num,expr)) où num est le numéro d'une machine et expr l'expression à calculer.
L'évaluation de l'expression ne peut se faire que si les deux machines sont dans le même bloc de synchronisation. Il n'y a pas
d'imbrication de blocs de synchronisation.
Le but de ce projet est de modifier l'implantation en l'adaptant à OCAML et en utilisant
les bibliothèques Marshalling et Thread pour simplifier l'implantation, en particulier au niveau du protocole.
L'extension de syntaxe introduite peut être réalisée avec l'outil camlp4 (http://caml.inria.fr/camlp4/).
Quand une machine reçoit une requète, elle lance un nouveau processus pour y répondre. Le calcul s'effectue alors
dans l'environnement
du bloc de synchronisation.
Pour que la sortie d'un bloc de synchronisation ne soit pas bloquante, une amélioration possible est de pouvoir conserver
plusieurs environnements de blocs de synchronisation pour qu'une machine puisse poursuivre son calcul tout en répondant à des requêtes de blocs antérieurs.
1.2 Robots footballeurs
La ``Robocup'' est un tournoi de robots footballeurs de différentes catégories. Une de ces catégories
est une simulation qui fait s'opposer des programmes sur le réseau à travers un serveur de jeu appelé
``RoboCup Official Soccer Server''. Toutes les communications et toutes les actions doivent passer par ce serveur.
Il existe déjà un programme O'CAML faisant joueur une équipe de chameaux pour une ancienne version du sevreur.
Ce programme comporte une partie d'implantation du protocole et une stratégie simple pour une équipe O'CAML.
Le but de ce projet est d'une part d'adapter cette bibliothèque de communication pour la dernière version du serveur
``RoboCup Official Soccer Server'' et d'autre part de proposer une stratégie de jeux pour ses joueurs. Cette stratégie
met en oeuvre la coopération entre les robots, sachant que l'information du jeu de chaque robot est partielle.
Cette stratégie sera confrontée à des programmes existants.
-
Connaissances préalables : langage OCAML, programmation TCP/IP
- Documents : http://www.robocup.org
- Nombre d'étudiants : 2 étudiants
1.3 Mondes virtuels multi-utilisateurs programmables en O'Caml
Le but de ce projet est de fournir une API O'CAML portable
pour la programmation de mondes virtuels multi-utilisateurs et multi-robots.
Une première application sera un salon de discussions.
Ce projet comporte 3 phases :
-
un état de l'art des moteurs de RV et de leurs APIs;
- la réalisation d'une API O'CAML;
- la réalisation d'une application utilisant cette API.
Etat de l'art
Un premier travail sera d'effectuer un état de l'art des moteurs de réalité virtuelle et de leurs APIs. On s'intéressera particulièrement aux liens suivants :
Les modèles 3D et surtout les modèles de communication diffèrent fortement
dans ces différentes <<communautés virtuelles>>. On s'attachera aux propositions <<portables>> et facilement interfaçables avec le langage O'CAML via C.
On priviligera l'aproche <<langage de communications>> à la SCOL plutôt que l'approche description de scènes animées à la VRML.
Réalisation d'une API
On peut découper cette API en trois parties :
-
moteur 3D
- interface 2D
- communications
Il y aura donc deux possibilités : soit de s'interfacer avec une API existante satisfaisante, soit d'en construire une à partir de couches de plus bas niveau.
Les couches basses 3D sont le plus souvent baties sur openGL. Il existe
déjà une interface entre openGL et O'CAML, appelée lablgl.
La partie interface 2D risque de ne pas être portable. Dans ce cas, il sera
nécessaire de bien la spécifier pour pouvoir l'adapter à d'autres systèles de fenetrage.
La partie communication peut être construite à partir des briques de base de la bibliothèque Unix d'O'CAML, en particulier par les sockets IP et les threads.
Réalisation d'une application
On décrira un salon de discussions entre utilisateurs. Le serveur gèrera
les connexions des
différents utilisateurs représentés sous forme d'avatars. La navigation à l'intérieur de la scène tiendra compte des objets et des collisions possibles. Il pourra avoir plusieurs salons avec possibilité de passage de l'un à l'autre. Selon la richesse de l'interface la communication textuelle pourra être sonore.
-
Connaissances préalables : langage OCAML, programmation TCP/IP, la connaissance de openGL serait un plus;
- Documents : voir ci-dessus
- Nombre d'étudiants : 2 ou 3 étudiants dont 1 en spécialité algorithmique graphique
1.4 Composition de contrats financiers
Ce projet se propose d'implanter la bibliothèque de combinateurs proposée
dans l'article
``Composing Contracts: an Adventure in Financial Engineering.''
de Peyton Jones, J-M Eber et Julian Seward (ICFP2000) téléchargeable à l'URL suivante :
http://citeseer.nj.nec.com/300237.html.
Ce projet se déroulera en deux temps :
-
implantation en O'Caml de la bibliothèque
- réalisation d'une application utilisant cette bibliothèque
2 Programmation SCOL
Le langage SCOL est un langage de communication pour les mondes virtuels. Il
est développé par la socièté
CRYO-NETWORKS (site WWW : http://www.cryo-networks.com).
C'est un langage fonctionnel statiquement typé,
polymorphe paramétrique (à la Caml),
muni de nombreuses bibliothèques (2D, 3D, Sons,
Communications, ...) dont principalement un moteur 3D efficace. Il est
compilé vers du code-octet et possède un récupérateur automatique de mémoire,
dit Glaneur de Cellules. Il résoud élégament les problèmes de sécurité en
communiquant les sources des progammes à télécharger et les recompile
rapidement sur place. Enfin il permet son utilisation en mode connecté ou non.
La technologie SCOL permet de définir des modules distribués (DMS)
dans lesquels sont spécifiés
les parties client et serveur de l'application distribuée.
2.1 Interprétation et compilation du langage SCOL
Le projet de module ``Langages Fonctionnels'' du DESS GLA (http://www-gla.ecoledoc.lip6.fr) consistait
cette année, pour
un groupe de huit étudiants, en l'implantation en O'CAML d'un interprète et d'un compilateur du langage SCOL.
Le but de ce projet est de finaliser et d'évaluer cette implantation. Pour cela il est demandé
d'intégrer l'ensemble du langage et d'augmenter la bibliothèque d'exécution pour comparer les performances de cette réalisation
avec le compilateur existant. Un deuxième travail est d'ajouter un mode debug permettant de tracer l'exécution d'un programme
-
Connaissances préalables : langages CAML, compilation
- Documents : Tutorial SCOL, API 2D SCOL
http://www.cryo-networks.com
- Nombre d'étudiants : 2 étudiants.
2.2 Pavage périodique du plan et création dynamique de textures
Ce projet s'inspire du projet de l'option informatique du DEUG MIAS (2ème année).
On appelle pavage le remplissage d'une surface par des copies non chevauchante d'un motif. Les différentes
copies du motif sont obtenues en appliquant une isométrie (transformation qui conserve les distances entre les points),
comme par exemple une translation. Une symétrie est une isométrie laissant invariant une figure géométrique.
L'ensemble des symétries d'une figure forme un groupe de symétries. Chaque groupe possède des générateurs qui par composition
permettent de construire toutes les symétries du groupe.
On obtient un pavage par la donnée d'un motif et des générateurs d'un groupe de symétrie. En composant les
générateurs jusqu'à une certaine profondeur, on obtient les transformations à appliquer au motif.
Le but de ce projet est d''une part d'écrire la bibliothèque SCOL de création de tels pavages à partir
d'un motif donné et des générateurs d'un groupe de symétrie, et
d'autre part d'appliquer les pavages obtenus sur des surfaces de scènes 3D, comme le papier peint d'une pièce.
Une extension possible est de laisser la possibilité
3 Applications réseau
Ces applications laissent le langage d'implantation libre.
3.1 Key+words
à préciser!!!
Ce document a été traduit de LATEX par
HEVEA.