Adloun

informatique (MP2I/MPI) · Chapitre 20 · Exercice de TD

Ce que coûte une modélisation : le pigeonnier

Logique propositionnelle · niveau 2

É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é :

/ variablesclausesvaluations 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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre