This commit is contained in:
Denis Monnerat 2025-02-03 10:52:04 +01:00
parent 1d7e676f43
commit 4bc10860a5

@ -1,18 +1,29 @@
# Miniprojet optionnel
## Qu'est-ce qu'on gagne ?
on reprend le jeu de l'exercice 1 du tp2 qui consiste à éteindre toutes les lumières d'une grille. Le but est d'ajouter un mode
qui permet de tricher en indiquant au joueur les lumières qu'il doit allumer/ éteindre. Pour cela, on va utiliser des résultats "élémentaires" d'algèbre linéaire vus
au S1.
Des points bonus sur la note finale de la ressource. Les 5 premiers à m'envoyer
un mail, avec un code fonctionnel et correct gagnent respectivement 6,5,4,3,2
points. Il faut le faire avant vendredi (07/02/2024).
## Qu'est-ce qu'il faut faire ?
On reprend le jeu de l'exercice 1 du tp2 qui consiste à éteindre toutes les
lumières d'une grille. Le but est d'ajouter un mode qui permet de tricher en
indiquant au joueur les lumières qu'il doit allumer/ éteindre. Pour cela, on va
utiliser des résultats "élémentaires" d'algèbre linéaire vus au S1.
<div align="center">
<img src="./img/lights.png">
</div>
L'idée principale est que l'action d'allumer/éteindre une lumière (et ses voisins) peut se représenter par une addition modulo 2.
À chaque fois qu'on allume/éteint une lumière, on ajoute la matrice des voisins à la matrice qui représente l'état de la grille.
Pour savoir comment jouer, il suffit d'essayer de décomposer la matrice initiale en somme de matrices de voisins. Ce problème est un problème
classique d'algébre linéaire. Voici un exemple sur une petite instance du jeu.
L'idée principale est que l'action d'allumer/éteindre une lumière (et ses
voisins) peut se représenter par une addition modulo 2. À chaque fois qu'on
allume/éteint une lumière, on ajoute la matrice des voisins à la matrice qui
représente l'état de la grille. Pour savoir comment jouer, il suffit d'essayer
de décomposer la matrice initiale en somme de matrices de voisins. Ce problème
est un problème classique d'algébre linéaire. Voici un exemple sur une petite
instance du jeu.
<div align="center">
<img src="./img/lights1.png">
@ -37,11 +48,13 @@ Le problème se ramène à chercher quel(s) vecteurs \(v_i\) utilisés pour reco
Cela s'écrit (\(x_i \{0,1\} \)) :
\[
x_0.v_0 + x_1.v_1 + x_2.v_2 + x_3.v_3 = b
\]
Et en rangeant les vecteurs \(v\) dans une matrice \(A\),
\[
A = \left(\begin{array}{cccc}
1 & 1 & 1 & 0\\
@ -52,15 +65,19 @@ Et en rangeant les vecteurs \(v\) dans une matrice \(A\),
\]
Le problème se ramène à la résolution de
\[
A.x = b
\]
Ça tombe bien, vous connaissez (cf S1) un algorithme qui résout ce type d'équation.
Cela tombe bien, vous connaissez (cf S1) un [algorithme](https://grond.iut-fbleau.fr/monnerat/maths_2024/src/branch/main/outils/cours/systeme_lineaire.pdf) qui résout ce type d'équation.
Remarques :
- pour certaines dimensions, la matrice \(A\) est inversible, et donc quelque soit la configuration initiale,
il y a une solution.
- pour d'autres, la matrice \(A\) n'est plus inversible. Il n'y a pas de solution pour toutes les configurations initiales.
- pour d'autres dimensions, la matrice \(A\) n'est plus inversible. Il n'y a pas de solution pour toutes les configurations initiales.
vous pouvez proposer ces dimensions, mais il faudra vérifier alors que le jeu a une solution.
- les calculs ici sont plus simples que le cas général, puisqu'on travaille modulo 2.