Projet 2021-2022: course de tortues - suite
Ce projet est à rendre pour le dimanche 13 février 2022 (cf Rendu).
Il sera réalisé par groupes de 4 personnes (chaque groupe sera formé de deux binômes pris dans ceux du TP Spark).
Contexte
Dans ce projet, on reprend le cadre des courses de tortues du TP Storm. L’état de la course à un instant t est décrit dans un document JSON semblable au document suivant:
{
"tortoises": [
{ "id": 0, "top": 6, "position": 594 },
{ "id": 1, "top": 6, "position": 1989 },
{ "id": 2, "top": 6, "position": 435 },
{ "id": 3, "top": 6, "position": 1827 },
{ "id": 4, "top": 6, "position": 749 },
{ "id": 5, "top": 6, "position": 1049 },
{ "id": 6, "top": 6, "position": 2190 },
{ "id": 7, "top": 6, "position": 703 },
{ "id": 8, "top": 6, "position": 1722 },
{ "id": 9, "top": 6, "position": 884 },
{ "id": 10, "top": 6, "position": 976 }
],
"qualite": 0.7267110197957016,
"temperature": 23.276522511134246
}
La position donnée est absolue et on a deux informations supplémentaires: qualite
et temperature
.
qualite
correspond à la qualite gustative du dernier repas (entre 0.0
et 1.0
) et temperature
à la temperature sur la piste (entre -10.0
et 40.0
).
Ces informations sur la course de tortues ne sont pas fournies directement par un Spout dans une topologie Storm, mais elle sont accessibles via un serveur Web tortues.ecoquery.os.univ-lyon1.fr
(visible uniquement depuis le campus ou en VPN).
Ce serveur mets à disposition des informations sur 4 courses:
- Tiny (10 tortues): http://tortues.ecoquery.os.univ-lyon1.fr/race/tiny
- Small (100 tortues): http://tortues.ecoquery.os.univ-lyon1.fr/race/small
- Medium (500 tortues): http://tortues.ecoquery.os.univ-lyon1.fr/race/medium
- Large (2000 tortues): http://tortues.ecoquery.os.univ-lyon1.fr/race/large
Ces informations sont mises à jours toutes les 3 secondes (c’est-à-dire qu’il y a un top toutes les 3 secondes).
Par ailleurs on distingue différentes catégories de tortues selon la manière dont elles avancent. L’avancement de chaque tortue peut être décrit par des paramètres (qui dépendent du type de paramètres). Note: On considère que la position d’une tortue correspond au nombre de pas qu’elle a effectué depuis le début de la course.
- Les tortues régulières avancent toujours à la même vitesse (paramètre: la vitesse en nombre de pas entre deux tops)
- Les tortues cycliques ont une vitesse d’avancement différente à chaque top dans une fenêtre, cette fenêtre est ensuite répétée. Par exemple une telle tortue peut avance de 3 pas au top 1, 5 pas au top 2, 1 pas au top 3, puis à nouveau 3 pas au top 4. Comme elle avance autant au top 4 qu’au top 1, sa fenêtre est de taille 3 et la suite de vitesses 3,5,1 va se répéter dans la nouvelle fenêtre et ainsi de suite dans le reste de la course. La tortue va ainsi avancer de 5 pas au top 5, 1 pas au top 6, 3 pas au top 7, etc. Remarque: deux tortues cycliques peuvent avoir des tailles de fenêtres différentes (paramètre: tableau des vitesses dans la fenêtre).
- Les tortues fatiguées s’endorment au fur et à mesure qu’elles avancent. Leur vitesse diminue à un rythme constant jusqu’à tomber à 0. Ces tortues se réveillent alors et recommencent à accélérer (au même rythme qu’elles ont ralenti) jusqu’à atteindre le vitesse initiale, puis elles recommencent alors à s’endormir. Il est possible que le rythme de (dé)croissance soit différent au moment de l’arrêt de la tortue et au moment où elle termine sa réaccélération à sa vitesse de départ. Par exemple, si sa vitesse est 3 et que son accélération est de -5, la vitesse devient 0 et pas -2. On prendra la convention que les tortues fatiguées et cycliques sont considérées comme fatiguées, mais pas comme cycliques. (paramètres: vitesse initiale et rythme de (dé)croissance).
- Les tortues lunatiques changent leur comportement en fonction de la qualité du dernier repas et de la température. On sait que le comportement adopté correspond à l’une des trois catégories précédentes. Le comportement adopté par une tortue lunatique à un moment donné est donc décrit par une catégorie, parmi les trois catégories précédentes, et ses valeurs de paramètres. A noter qu’une tortue lunatique ne peut adopter qu’un nombre fini de comportements. De plus, on sait que le comportement adopté dépend d’une combinaison linéaire de la qualité et de la température. Il est possible que deux comportements d’une même tortue correspondent à une même catégorie (avec des paramètres différents).
Travail demandé
Il vous est demandé, pour chaque tortue, de pouvoir prédire sa position future, en fonction de sa position actuelle, de la qualité de son dernier repas et de la température courante, en supposant que la qualité et la température restent constantes.
Vous êtes libres d’utiliser la méthode que vous souhaitez (programme autonome, topologie storm, stockage de données en HDFS avec calculs en Spark, tâches cron
, …).
Les langages de programmations autorisés sont Python, Java et Scala.
Le/les programme(s) devront pouvoir s’exécuter au sein du cluster (mais vous pouvez les mettre au point sur votre machine personnelle).
Il est à noter que le serveur ne dispose pas des archives des tops précédents. Il faudra donc archiver vous-même les différents états de la course.
Remarque: le travail peut assez facilement se diviser en trois parties:
- récupération, stockage et relecture des données
- analyse des données et construction d’un modèle des différentes tortues
- utilisation du modèle pour prédire une position future
Il sera probablement intéressant de répartir ces différentes parties au sein du groupe
Rendu
Il est demandé de déposer une archive zip dans la case Rendu_Projet
de tomuss au plus tard le dimanche 13 février 2022.
Cette archive zip comprendra le code source de vos programmes, un script shell analyse.sh
permettant de compiler et de lancer l’analyse, un script shell prediction.sh
, ainsi qu’un fichier README.md
.
Pour le fichier README.md
:
- On rappellera les membres du groupe
- On indiquera le compte sur le cluster à utiliser pour tester les scripts d’analyse et de prédiction.
- On décrira le ou les programmes implémentés, les algorithmes mis au point pour retrouver les catégories de tortues et les paramètres, ainsi que l’algorithme de prédiction
Pour le script analyse.sh
:
- Le script doit fonctionner dans le cluster Spark
- Il ne doit pas prendre d’arguments
- Il doit pouvoir lire les informations depuis le serveur http://tortues.ecoquery.os.univ-lyon1.fr
- Il doit analyser les 4 courses
- Rmq: ce script pourra être lancé par le correcteur, mais il ne le sera pas systématiquement (en particulier, il est attendu que l’analyse puisse prendre du temps). Il doit par contre être suffisement clair pour comprendre comment le processus d’analyse se lance.
Pour le script prediction.sh
:
- Il prend en arguments:
course
,id
,top
,pos1
,pos2
,pos3
,temp
,qual
etdeltatop
.course
est le nom de la course,id
est l’id de la tortue à prédire,top
est le top à partir duquel les informations suivantes sont données,pos1
est la position de la tortue au toptop
,pos2
est la position àtop
+1,pos3
est la position àtop
+2,temp
est la température,qual
est la qualité de la nourriture et enfindeltatop
le nombre de tops entretop
et le top pour lequel il faut faire la prévision. - Il peut s’appuyer sur un fichier “modèle” qui pourra être produit par le script analyse.