Ce que coûte une modélisation : le pigeonnier
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 20 — Logique propositionnelle
Énoncé
On veut exprimer en fnc que pigeons se logent dans cases, sans que deux pigeons partagent une case.
- Donner les variables et les clauses.
- Compter les unes et les autres en fonction de et .
- Que vaut la formule pour et ?
Corrigé
1. Le codage. Une variable par couple : « le pigeon est dans la case ».
- Chaque pigeon est quelque part : pour chaque , la clause .
- Deux pigeons ne partagent pas une case : pour chaque case et chaque paire , la clause .
On remarquera qu'on n'écrit pas « chaque pigeon est dans au plus une case » : la question ne l'exige pas, et une clause qu'on n'écrit pas est une clause que le solveur n'explore pas. Un modèle pourra loger un pigeon dans deux cases — il suffira d'en garder une.
2. Le compte. variables, et
Vérifié : donne ; donne ; donne clauses sur variables.
3. Elle est insatisfiable — c'est le principe des tiroirs : cinq pigeons, quatre cases, deux au moins se rencontrent. Mesuré :
| / | variables | clauses | valuations | appels de Quine |
|---|---|---|---|---|
| / | ||||
| / | ||||
| / |
Le rapport est le message : appels au lieu d'un million de valuations, sur la même instance et sans changer d'algorithme. La simplification décrite au problème 20.2 coupe les branches dès qu'une clause devient vide — et ici, elle le devient vite.
L'avertissement qui va avec. Le pigeonnier est aussi l'exemple classique de ce que aucun solveur du commerce ne sait faire : la croissance reste exponentielle en , parce que toute preuve d'insatisfiabilité par résolution doit, pour cette famille, avoir une taille exponentielle. Modéliser en sat ne rend rien facile : cela rend seulement le problème exprimable.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.