Des cours d'informatique pour tous les goûts!

Les buts de la deuxième année sont de consolider les acquis de la première en préparant une spécialisation éventuelle en 3A.

Le DIX offre un ou plusieurs cours d'informatique dans chacune des quatre périodes de l'année,  à quoi s'ajoutent des modals, mais aussi bien sûr des projets scientifiques collectifs.

Prérequis : cours INF361+INF411 ou INF371 pour accéder aux autres cours d'année 2 (sauf pour certains modals, renseignez-vous).

INF411
arbres, graphes
INF421
algorithms
INF442
donnéees massives
INF412
logique, modèles
 
INF443
Informatique graphique 3D
Modal 1
Connected Objects and the Internet of Things (IoT)
ACM-ICPC SWERC training
Tablettes et smartphones
Applications Web
Modal 2
Algorithmes pour les séquences Biologiques
Distributed applications
Robots et drones
Applications Web
Modal 3
Algorithms and Competitive Programming
Graphe Global Géant
Conception et développement d'un Jeu vidéo
Programmer dans le Langage du vivant
Deep Learning in Computer Vision
Cybersecurity - the hacking Xperience

Prérequis pour la 3A : pour s'inscrire en PA Informatique ou Bioinformatique (et plus généralement pour s'inscrire dans un cours d'Informatique de 3A), il faut avoir validé :
- au moins 2 cours d'Informatique en 2A (hors modal),
- un projet en cours d'Informatique de 2A (modal compris).

Foire aux questions (FAQ)

Q. Je viens d'INF361. Quels cours d'informatique puis-je suivre en 2A ?

RSi vous suivez INF411, vous pouvez suivre n'importe quel cours d'informatique en 2A.

Q. Puis-je suivre INF411 et INF412, INF442 en même temps qu'INF443  ?

R. Oui, ce ne sont pas les mêmes jours et nous avons fait bien attention à cela.

Q. Puis-je prendre plusieurs Modals d'informatique ?

R. A priori, non.

Q. Dans quels cours puis-je prendre un projet ?

R. INF421, INF442, INF443; ou bien un Modal.

Q. Dans quels cours fait-on des TP sur machine ?

R. INF411, INF442, INF443.

Q. Quels sont les langages de programmation utilisés en 2A ?

R. INF411 : Java; INF442, INF443 : C++; dans les modals, c'est variable.

 

 

Initiation aux structures des données, à l'algorithmique et à l'analyse des algorithmes (amphis).
Perfectionnement à la programmation en Java (TDs).

Ce cours entend amener les élèves de niveau INF361 au niveau de fin de INF371, afin de pouvoir poursuivre le cursus d'informatique de l'Ecole. L'enseignement porte essentiellement sur les structures de données (hachage, arbres, graphes), sur l'algorithmique, et sur un minimum de théorie de la complexité. Ce cours est également l'occasion de se perfectionner en Java. Les TDs explorent en profondeur une partie du matériel présenté en amphi.


Niveau requis : INF361

Modalités d'évaluation : Un contrôle continu (quiz/TD), un examen classant en salle (3h).

Langue du cours : Français

Credits ECTS : 5

Ce cours présente les fondements de l'informatique en tant que science. Si l'idée d'utiliser des machines pour effectuer des calculs est ancienne, c'est dans les années 30 que les travaux d'Alan Turing, Alonzo Church, Kurt Goedel et d'autres ont posé les bases de ce qui allait devenir l'informatique que nous connaissons aujourd'hui.

Leurs travaux ont révélé que le raisonnement et le calcul sont intimement liés et ces bases doivent donc se comprendre dans la tradition, plus ancienne, de la logique et des fondements des mathématiques, de Peano à Zermelo en passant par Hilbert et bien d'autres. Il est remarquable que ces bases sont toujours d'actualité, malgré les progrès technologiques spectaculaires.

Alors que d'autres cours montrent comment programmer, on explicite ici le cadre de ce qui est faisable, en termes
- de calculabilité : certains problèmes ne peuvent pas être résolus par une machine ;
- de complexité : certains problèmes ne peuvent être résolus en un temps raisonnable.

C'est par exemple sur ces points que reposent les technologies cryptographiques et le fameux problème "P=NP" à $1.000.000.

Programme
Logique des propositions et des prédicats : Formules, modèles, satisfiabilité, validité, prouvabilité
Exemples de théories: arithmétique et théorie des ensembles
Modèle de calcul : machines de Turing, calculabilité, décidabilité, théorème de l'arrêt, machine universelle
Classes de complexité : P, NP, réduction de problème, NP-complétude, problèmes SAT

Niveau requis : Pas de pré requis.
En revanche, ce cours est un pré-requis pour les thématiques "Algorithmique et optimisation" et "Langages, preuves, calcul" du PA Info en 3ème année.

Modalités d'évaluation : Examen sur table.

Langue du cours : Français

Algorithms are the heart of all computation. This course, building on the algorithmic foundations laid in the first computer science courses (INF321 or INF311+INF411), equips the student with a solid background in modern algorithmics. Having followed this course, the student will have a profound knowledge of the most central algorithms, both understanding how and why they work and being able to solve a wide range of computational problems with these building blocks. This is material that everyone aiming to work in a computer science or computing related context needs to know, let it be in a research or industrial environment. In addition to this, we shall also give a brief introduction to several more recent topics like randomized algorithms, evolutionary algorithms, online algorithms, or algorithmic game theory, which had a significant impact on how we understand computing today.The course is taught in English (amphis, poly), for all the rest including the exam both French and English are offered.

L'analyse de données moderne s'appuie sur des langages de haut niveau comme Python ou R pour la manipulation et le traitement des données. Toutefois, derrière les bibliothèques standard comme Scikit-Learn se cachent des implémentations dans des langages de bas niveau comme C ou C++ pour une exécution optimisée et une gestion efficace des ressources mémoire ou de calcul. D'où l'intérêt de ce cours, dont l'objectif est double : d'une part, se familiariser avec certaines des techniques standard d'analyse de donnéés et d'apprentissage machine ; d'autre part, acquérir une compétence en programmation C/C++ qui permette à terme aux élèves d'adapter les implémentations bas niveau existantes à leurs besoins spécifiques. A noter que les paradigmes de programmation abordés lors du cours sont quasi-exclusivement séquentiels, la programmation concurrente étant tout juste effleurée lors de la dernière séance et réservée pour d'autres cours.

 

Détail des séances (analyse de données / C++):

1. Introduction brève à l'analyse de données / C++ comme du C (1/2)

2. Recherche de plus proches voisins et extraction dans les bases de données / C++ comme du C (2/2)

3. k-means / structs et classes (1/2)

4. Clustering hiérarchique / structs et classes (2/2)

5. Estimation de densité / héritage

6. Classification et régression k-NN / généricité

7. Modèles linéaires pour la régression / STL

8. Modèles linéaires pour la classification / C++11

9. Extraction de features / -

10. Réseaux de neurones / multithreading

 

Références:

En analyse de données :

  • Hastie, Tibshirani, Friedman: The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer, 2017.
  • Bishop: Pattern Recognition and Machine Learning. Springer, 2006.

En C++ :

  • Weiss: C++ for Java Programmers. Prentice Hall, 2003.
  • Stroustrup. The C++ Programming Language (4th ed.). Addison-Wesley, 2013.

 

Prérequis : INF371 ou INF411

Recommandés : MAP433 et INF421




Modern data analysis relies on the use of high-level languages such as Python or R for data handling and processing. However, behind standard libraries like Scikit-Learn hide core implementations in low-level languages such as C or C++, for faster execution and optimized resources management. Hence the utility of this course, the goal of which is twofold: first, to get acquainted with some of the standard techniques in data analysis and machine learning; second, to acquire some expertise in C/C++ programming, so that students can then adapt existing low-level implementations to their needs. Note that the programming paradigms seen in this course are almost exclusively sequential, concurrent programming being addressed only marginally during the last session and being the subject of other courses.

 

Topics of the sessions (data analysis / C++):

1. Short introduction to data analysis / C++ as C (1/2)

2. Nearest neighbors search and retrieval in databases / C++ as C (2/2)

3. k-means / structs and classes (1/2)

4. Hierarchical clustering / structs and classes (2/2)

5. Density estimation / inheritance

6. k-NN classification and regression / genericity

7. Linear models for regression / STL

8. Linear models for classification / C++11

9. Feature extraction / -

10. Neural networks / multithreading

 

References:

On data analysis:

  • Hastie, Tibshirani, Friedman: The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer, 2017.
  • Bishop: Pattern Recognition and Machine Learning. Springer, 2006.

On C++:

  • Weiss: C++ for Java Programmers. Prentice Hall, 2003.
  • Stroustrup. The C++ Programming Language (4th ed.). Addison-Wesley, 2013.

 

 

Prerequisites : INF371 or INF411

Recommended : MAP433 and INF421

Outre son importance pour le loisir numérique (jeux vidéos, effets spéciaux, films d'animation 3D), l'informatique graphique 3D est indispensable au prototypage virtuel industriel (design d'objets ou de mécanismes destinés à être fabriqués), aux simulateurs d'apprentissage et autres "serious games", ainsi qu'à la visualisation scientifique, par exemple pour l'exploration visuelle de données ou de résultats de simulation.
 
Ce cours présente l'ensemble de l'informatique graphique, en se concentrant sur son volet interactif. Il couvre en particulier les techniques de modélisation géométrique, le rendu projectif, et les bases de l'animation 3D.
 
 

 




(course in french)

Contexte

La démocratisation des nouvelles technologies de fabrication - telles que les imprimantes 3D et les découpeuses laser - permet aujourd'hui de passer aisément d'un modèle virtuel 3D à un prototype réel, éventuellement articulé et pouvant être animé. De nouvelles activités créatives sont ainsi mises à la portée du public. L'un des challenges est de proposer des outils numériques « expressifs » pour la modélisation 3D, c’est à dire permettant la modélisation intuitive par gestes et capables de gérer automatiquement les contraintes de l'objet à générer,

imprimante3D.jpgInterface d'un logiciel de modélisation 3D

    Impriession 3D par dépôt de fil en fusion, et interface d'un modeleur 3D standard, difficile à utiliser par le public

Objectifs

L'objectif de ce modal est de développer un modeleur 3D expressif (rapide et intuitif d'utilisation), sous WebGL ce qui le rendra disponible directement sur le web, et de s'en servir pour concevoir et fabriquer un prototype d'objet.

Cette année, ce modeleur sera dédié à la conception de machines volantes imaginaires, telles que celles rêvées par Léonard de Vinci ou par Jules Verne.  Chaque groupe d’étudiants utilisera son propre logiciel pour modéliser interactivement un ou plusieurs prototypes. Enfin, la machine retenue sera d’une part fabriquée réellement dans le FabLab de l'école (par impression 3D, découpe laser, ou une combinaison des deux), et d’autre part animée en virtuel, pour illustrer son fonctionnement imaginaire. Bien sur, il n'est pas demandé que la machine vole dans le monde réel!

 Illustration d'une machine tirée d'un livre de Jules VernesRéalisation physique de la même machine

      Une machine volante imaginée par Jules Verne, et un objet réel qui s'en inspire

Techniques étudiées

1- Méthodes de modélisation expressive et d'animation d'objets 3D articulés.

2- Programmation WebGL en Javascript (librairie Three.js)

3- Utilisation des outils de fabrication du FabLab

 

Organisation

Une série de cours et de TPs vous familiariseront tout d'abord à la modélisation "expressive" d'objets 3D et à leur animation. La mise en pratique se fera par le biais de WebGL. Vous suivrez également une formation de deux heures au fablab de l'école. Vous pourrez alors passer à la partie la plus créative : la conception et la programmation de votre propre modeleur 3D expressif, et son utilisation pour la création interactive d’un prototype, qui sera finalement animé et fabriqué. Tous ce travail sera effectué par groupe de deux. Le choix de l'objet volant conçu et réalisé sera libre et ouvert à l'imagination.