Mes Projets
Et leur description
Que sont mes projets ❓
Les projets que je réalise se présentent comme des défis que je me lance suite à la découverte d'un sujet qui me semble intéressant. Ils sont principalement centrés sur l'informatique, les mathématiques et d'autres domaines proches. Je vous en présente ici un échantillon avec des détails supplémentaires. L'article Logique Binaire a des éléments interactifs et visuels mais n'est pas terminé.
Le bot d'échecs ♟️
Qu'est-ce que c'est ?
J'ai créé un programme en C++ avec comme but de le rendre le meilleur possible aux échecs. Pour cela, il faut d'abord commencer par créer un échequier fonctionnel faisant respespecter toutes les règles, même les plus rares comme la prise en passant ou la règle des 50 coups. Ensuite, on commence avec un algorithme simple (min-max) qui va observer un certain nombre de coups possibles dans le futur et donner le coup qui avantage le plus le programme mais qui reste acceptable par les deux joueurs. L'évaluation de l'avantage d'une position est au début très simplement obtenue en faisant la somme des valeurs des pièces. Le programme pourrait fonctionner mais il serait alors très faible et lent. J'ai donc appliqué de nombreuses améliorations:
- Utilisé représentation du plateau de jeu avec des masques de bits pour plus d'efficacité (bitboards)
- Généré les coups en utilisant une grande table de références
- Utilisé un meilleur algorithme de recherche en évitant les coups inutiles ou improbables (Alpha Beta, PV-Search, NMP, LMR...)
- Pris en compte d'autres éléments dans l'évaluation des positions (position des pièces, sécurité du roi, mobilité...)
- La dernière version évalue le plateau avec un réseau de neurones (NNUE) que j'ai entrainé avec mon propre algorithme
Bref, ce projet qui commençait simplement s'est révélé très intéressant à faire. Le programme a probablement dû atteindre un classement d'environ 2400 elo (≈ maître international) même si je ne l'ai pas testé rigoureusement (il peut battre le bot 2900 de chess.com au maximum) Voici le github du projet : https://github.com/Armibule/ArmibuleFish
La logique binaire 🔌
Qu'est-ce que c'est ?
L'algèbre bouléenne est l'un des fondements sur lequel repose l'informatique. Le principe est très simple : chaque information est constituée d'unités appelées bits ne pouvant se trouver qu'en seulement deux états différents, un 1 (vrai) ou un 0 (faux) sur lesquelles nous pouvons effectuer des opérations pour obtenir un résultat. Il existe de nombreuses opérations, les plus simples ayant deux bit d'entrée et un de sortie :
- Les plus connues telles que le OR ( OU en français, donne un bit vrai si au moins l'un des bits d'entrée est vrai ), le AND ( ET en français, donne un bit vrai si tous les bits d'entrée sont vrais ) ou le NOT ( NON en français, inverse la valeur du bit d'entrée )
- D'autres plus complexes telles que le NOR, le NAND, le XOR ou le XNOR
Une chaine de bits peut représeter une très grande variété d'informations: Des nombres, du texte, des images, un programme...
Pouquoi j'ai réalisé ce projet et ce que j'ai appris
Je me suis lancé dans ce projet car j'ai toujours voulu savoir comment fonctionnent ces machines que nous utilisons tous les jours. De plus, cela m'a aussi permit de comprendre plus profondément comment marchent les langages de programmation, de la tokenisation à la compilation. Je me suis documenté et j'ai donc réalisé ma propre architecture de processeur ainsi que mon propre langage de langage de programmation compilé pour celle-ci que j'ai nommé BubulleScript. Plus de détails sur mon voyage dans l'article Logique Binaire !
Les Shaders 🌈
Qu'est-ce que c'est ?
Un shader est un programme qui a la particularité d'être exécuté sur la carte graphique d'un ordinateur. L'avantage est que les cartes graphiques ou GPUs, sont beaucoup plus rapides que les processeurs, pour effectuer des tâches répétitives car elles possèdent de nombreuses unités arithmétiques. Cela fait des shaders un bon moyen d'effectuer un grand nombre d'opérations. Il existe trois grandes familles de shaders : les compute shaders qui permettent d'effectuer des calculs complexes, les shaders 3D et les shaders 2D qui servent à faire du traitement d'image et auxquels je me suis intéressé. Les shaders 2D proposent permettent d'affectuer un certain calcul sur tous les pixels d'une image en même temps ce qui ne serait pas possible en un temps raisonnable avec le CPU et les langages de programmation traditionnels.
Pouquoi j'ai réalisé ce projet et ce que j'ai appris
Je me suis intéressé aux shaders parce que j'aimais bien créer des motifs intéressant mais je voulais que le programme tourne en temps réel. De plus je me demandais bien à quoi pouvait servir les cartes graphiques dont tout le monde parle. J'ai donc expérimenté et fait quelques recherches sur le sujet et j'en ai créé quelques uns (le bandeau de la page d'accueil en fait partie). Si vous voulez des exemples époustouflants de ce qui est possible, visitez le site Shadertoy.