.. _projets: Projets ####### .. contents:: Table des matières .. 1 Physique 2 Astrophysique 3 Divers 3.1 Formation de pistes de fourmis sur un pont à 2 branches 3.2 Auto-organisation d'un banc de poisson 3.3 Évacuation d'une salle & déplacement d'une foule dans une rue 3.4 Suivi de particule(s) 4 Mini-projets 4.1 Statistiques 4.2 Visualisation 4.3 Contribution à un projet Open Source 5 Micro-projets (UE Science des données) 4 Mini-projets 4.1 Statistiques 4.2 Visualisation 4.3 Contribution à un projet Open Source 5 Micro-projets Physique ======== .. include:: physique.txt Astrophysique ============= .. include:: astro.txt Divers ====== Formation de pistes de fourmis sur un pont à 2 branches ------------------------------------------------------- Si on propose à une colonie de fourmis de choisir entre 2 branches pour rejoindre une source de nourriture la branche finalement choisie est toujours la plus courte. Le projet consiste à modéliser et caractériser ce comportement. Indication: on peut étudier ce système avec des EDOs. Cela peut aussi donner lieu à une simulation individu centré et éventuellement une comparaison entre les deux types de modèle. .. figure:: Aco_branches.png :width: 50% :align: center 1) la première fourmi trouve la source de nourriture (F), via un chemin quelconque (a), puis revient au nid (N) en laissant derrière elle une piste de phéromone (b). 2) les fourmis empruntent indifféremment les 4 chemins possibles, mais le renforcement de la piste rend plus attractif le chemin le plus court. 3) les fourmis empruntent le chemin le plus court, les portions longues des autres chemins voient la piste de phéromones s'évaporer. Source: `Johann Dréo `_ via Wikimedia Commons. Auto-organisation d'un banc de poisson -------------------------------------- .. include:: banc_poisson.txt Évacuation d'une salle & déplacement d'une foule dans une rue ------------------------------------------------------------- Le comportement d'une foule est un problème aux applications multiples: évacuation d'une salle, couloir du métro aux heures de pointes, manifestations... On peut en imaginer des modèles simples. P. ex., on peut décrire chaque individu par sa position, sa vitesse, et comme étant soumis à des « forces »: * Une force qui spécifie la direction dans laquelle l'individu *veut* se déplacer, :math:`\textbf{f}_{dir} = (\textbf{v}_0 - \textbf{v}(t))/\tau`, où :math:`\textbf{v}_0` est la direction et la vitesse que la personne veut atteindre, :math:`\textbf{v}` sa vitesse actuelle, et :math:`\tau` un temps caractéristique d'ajustement. * Une force qui l'oblige à éviter des obstacles qui peuvent être fixes (un mur, un massif de fleurs, ...), ou qui peuvent être les autres individus eux-mêmes. On pourra essayer :math:`f_{obs}(d) = a \exp(-d/d_0)`, où :math:`d` est la distance entre le piéton et l'obstacle, :math:`d_0` la « portée » de la force, et :math:`a` son amplitude. On pourra varier les différents paramètres apparaissant ci-dessus, tout en leur donnant une interprétation physique réelle, et étudier leur influence dans des situations concrètes. P. ex., à quelle vitesse, en fonction de :math:`\textbf{v}_0` et de la densité de piétons, se déplace une foule contrainte à avancer dans un couloir si chaque individu veut maintenir une vitesse :math:`\textbf{v}_0` ? Comment s'organise l'évacuation d'une salle initialement uniformément peuplée, avec une ou plusieurs sorties, et en la présence éventuels d'obstacles ? Il est également possible d'essayer d'autres expressions pour les forces. Il existe une littérature conséquente sur le sujet, que l'on pourra explorer si besoin (p. ex: `Décrypter le mouvement des piétons dans une foule `_). .. figure:: 6k-RoomExit4.png :width: 50% :align: center Un obstacle aide à l'évacuation (DR). Suivi de particule(s) --------------------- .. include:: particle_tracking.txt .. _miniprojets: Mini-projets ============ Ces mini-projets demande un investissement de développement et d'analyse moindre, et peuvent être traités (ou au moins initiés) en quelques heures comme des exercices ouverts. Statistiques ------------ - Tests statistiques du `NIST/SEMATECH e-Handbook of Statistical Methods `_, p.ex. `Comparisons based on data from two processes `_ - Statistiques robustes, p.ex. :ads:`Beers et al. (1990) <1990AJ....100...32B>` Visualisation ------------- L'objectif premier de ces projets est de développer des outils de visualisation sous Python/Matplotlib. * :wen:`Coordonnées parallèles ` - Sources éventuelles d'inspiration: `Parallel Coordinates plot in Matplotlib `_, `XDAT `_ - Exemples de jeu de données multi-variables: :wen:`Iris flower data set`, :download:`Cars <./carsDataSet.dat>` (`source `_) * `Andrew Curves `_ (voir également `Rip’s Applied Mathematics Blog `_). À appliquer sur les mêmes jeux de données que pour les coordonnées parallèles. * `Stacked graphs `_ (source éventuelle d'inspiration: `Python recipe `_) * :wen:`Hertzsprung-Russel diagram`: l'objectif est de développer une classe permettant de tracer des diagrammes HR à partir de diverses quantités observationnelles (magnitudes apparentes ou absolues, couleurs) ou théoriques (luminosité, températures effectives), ainsi que des isochrones. - Source éventuelle d'inspiration: `Stellar evolutionary tracks `_ - Données photométriques: p.ex. :download:`M55 <./M55_BV.dat>` (source: `BVI photometry in M55 `_) - Données théoriques: p.ex. `CMD `_ .. https://sites.google.com/site/roguewavesoftwarefrance/tutoriels/Python-Clustering-k-Means * :wen:`Treemap` (source éventuelle d'inspiration: `Treemaps under pylab `_) * De façon plus générale, l'ensemble des visualisations proposées sous: - `Flare `_ - `D3 `_ - `Periodic Table of Vizualisation Methods `_ Contribution à un projet Open Source ------------------------------------ Vous pouvez également contribuer, à la hauteur de vos capacités (connaissance, temps) à un projet Open Source, p.ex. identification et correction de bugs, ajout de nouvelles fonctionnalités, documentation, etc. Ces projets sont souvent maintenus sur des plateformes de développement collaboratif telles que `github `_. Les bugs sont souvent classés selon différentes catégories, p.ex. pour `astropy `__, : `documentation `_, `good first issue `_, `Package novice `_, etc.; le même genre de tags existe pour d'autres projets (p.ex. `numpy `__, `matplotlib `__, `pandas `__). Généralement, les plus gros projets ont des exigences de contribution plus fortes (voir p.ex. `Contributing to Matplotlib `_), mais vous pouvez toujours contribuer aux discussions. Micro-projets (UE Science des données) ====================================== Voici une liste de micro-projets très orientés *programmation*, destinés avant tout à pratiquer les outils de packagings, tests, documentation, etc. * :wfr:`Mastermind` ☆ * Jeu de lettres de type :wfr:`Wordle` ou :wfr:`Motus ` [#fr-dic]_ ★ * :wfr:`Taquin` ★★ * :wfr:`Démineur ` ★★ * :wfr:`Morpion solitaire` ★★ * Un des 22 jeux de `Classic Abstract Strategy Games `_ ★★ * :wfr:`Threes!` ★★★ * :wfr:`2048 <2048_(jeu_vidéo)>` ★★★ * :wfr:`Black Box ` ★★★ .. rubric:: Instructions: Votre programme doit être extrêmement robuste (sans plantage intempestif) et convivial (en favorisant l'expérience utilisateur), agréable à utiliser . Dans un jeu à deux, essayer d'implémenter un *bot* minimal pour pouvoir également jouer en solitaire. Vous pouvez agrémenter votre code par l'utilisation de librairies :ref:`TUI/GUI `. Vous devez impérativement respecter les règles suivantes. * Votre code doit être propre, lisible, bien structuré, etc. Utilisez :pypi:`black` pour le formattage du code. * Votre code doit au mieux respecter les :ref:`/cours/code.txt#principes-de-conception-logicielle`. * Vérifiez la syntaxe de votre code à l'aide de l'outil de vérification syntaxique :pypi:`pylint` (avec le fichier :download:`pylintrc` à placer dans le répertoire source):: $ pylint --rcfile pylintrc *.py [...] Your code has been rated at 8.53/10 (previous run: 8.46/10, +0.07) * Vous devez hébergez votre projet sur `GitLab-IN2P3 `_ avec un accès public ou semi-privé (cf. :ref:`Git `). * Votre projet doit contenir un fichier `README` contenant les instructions minimales d'installation et d'utilisation de votre programme. * Votre projet doit être empaqueté de sorte à pouvoir s'installer simplement (cf. :ref:`cours/packaging:installation locale`) via:: $ python -m pip install . * Votre projet doit contenir *au moins* un :ref:`point d'entrée ` directement appelable depuis la ligne de commande, p.ex.:: $ myprogram * Votre projet doit être documenté, avec une documentation en ligne disponible sur votre répo (cf. :ref:`/cours/documentation.txt`), et intégralement testé (taux de couverture maximal). Expérimentez entre vous pour vérifier que ces règles sont bien respectées. .. rubric:: Notes de bas de page .. [#fr-dic] Voir p.ex. `liste de mots français `_