Stratégies pour la résolution de problèmes - LIRIS
Download
Report
Transcript Stratégies pour la résolution de problèmes - LIRIS
Stratégies pour la
résolution de problèmes
combinatoires
mercredi 19 mars 2014
Pierre-Edouard Portier
http://liris.cnrs.fr/pierre-edouard.portier/ia.html
La recherche exhaustive.
Carré magique
Knuth, Donald E.
"Selected Papers on Fun and Games." AMC 10 (2011): 12.
Chapter 11. “Very Magic Squares”
http://www-cs-faculty.stanford.edu/~uno/fg.html
carré magique
X1
X4
X7
X2
X5
X8
X3
●
X6
●
X9
●
{X1,X2,X3,X4,X5,X6,X7,X8,X9} =
{1,2,3,4,5,6,7,8,9}
sommes des lignes, colonnes, et diagonales
égales
3*3 = 9 cases
Combien de grilles possibles ?
carré magique
X1
X4
X7
X2
X5
X8
X3
X6
X9
●
●
●
●
●
{X1,X2,X3,X4,X5,X6,X7,X8,X9} =
{1,2,3,4,5,6,7,8,9}
sommes des lignes, colonnes, et diagonales
égales
3*3 = 9 cases
9! grilles possibles
pour 5*5 : 25! ~= 1,5.1025 grilles possibles
10^1
http://www.powersof10.com/
10^2
http://www.powersof10.com/
10^3
http://www.powersof10.com/
10^4
http://www.powersof10.com/
10^5
http://www.powersof10.com/
10^6
http://www.powersof10.com/
10^7
http://www.powersof10.com/
10^8
http://www.powersof10.com/
10^9
http://www.powersof10.com/
10^10
http://www.powersof10.com/
10^11
http://www.powersof10.com/
10^12
http://www.powersof10.com/
10^13
http://www.powersof10.com/
10^14
http://www.powersof10.com/
10^21
http://www.powersof10.com/
10^26
http://www.powersof10.com/
carré magique
X1
X2
X3
X4
X5
X6
X7
X8
X9
●
●
●
●
●
●
{X1,X2,X3,X4,X5,X6,X7,X8,X9} = {1,2,3,4,5,6,7,8,9}
sommes des lignes, colonnes, et diagonales
égales
3*3 = 9 cases
9! grilles possibles
pour 5*5 : 25! ~= 1,5.1025 grilles possibles
besoin de plus d'intelligence... !
carré magique
X1
X2
X3
X4
X5
X6
X7
X8
X9
{X1+X2+X3+X4+X5+X6+X7+X8+X9
=
1+2+3+4+5+6+7+8+9
=
45
=
3*(X1+X2+X3)
=
3*15
Donc, (X1+X2+X3) = (X4+X5+X6) = ... = 15
carré magique
X1
●
X2
X3
X4
X5
X6
X7
X8
X9
(X1+X2+X3) = (X4+X5+X6) = ... = 15
(X4+X5+X6) + (X2+X5+X8) + (X1+X5+X9) +
(X7+X5+X3)
=
3*X5 + (X1+X2+X3) + (X4+X5+X6) +
(X7+X8+X9)
=
3*X5 + 3*15
=
4*15
Donc, X5=5
carré magique
X1
x2
x3
x4
x5
x6
x7
x8
x9
15 = 1 + 5 + 9
15 = 2 + 5 + 8
15 = 3 + 5 + 7
15 = 4 + 5 + 6
1
1
5
●
●
(X1+X2+X3) = (X4+X5+X6) =
... = 15
X5 = 5
5
9
besoin de deux fois
(8,6)
IMPOSSIBLE
9
4 configurations
similaires par
symétries
carré magique
X1
●
●
x2
x3
x4
x5
x6
x7
x8
x9
(X1+X2+X3) = (X4+X5+X6) =
... = 15
X5 = 5
15 = 1 + 5 + 9
15 = 2 + 5 + 8
15 = 3 + 5 + 7
15 = 4 + 5 + 6
6
1
8
8
1
5
5
9
9
4*2=8 solutions pour le carré magique 3x3
6
Magic Square as a CSP
(Constraint Satisfaction Problem)
Problème de recherche dans un espace d’état
pour lequel un état est représentable par un
ensemble de variable Xi qui prennent valeur
dans des domaines Di. L’ensemble des états
recherchés est décrit par un ensemble de
contraintes qui spécifient les combinaisons
autorisées pour des sous-ensembles de
variables.
Version naïve en GNU Prolog
https://github.com/maandree/gprolog/blob/master/examples/ExamplesFD/magsq.pl
http://perso.univ-st-etienne.fr/frel9915/Prolog/cours_clp.pdf
Voir magsq.pl pour une version généralisée à
des carrés de taille N.
Voir par exemple cours_clp.pdf pour une
introduction à la programmation par contraintes
avec des applications gprolog.
Backtracking
Être capable :
● de construire une solution pas à
pas
● d'organiser les solutions partielles
selon un arbre construit en
profondeur
● de décider si une solution partielle
est impossible
N-Reines :
Placer N reines sur un échiquier de
taille N*N pour qu'aucune ne soit en
prise.
Quelle est la taille de l'espace de
recherche (nombre de "solutions"
candidates) pour le problème des 4reines ?
16! / ((16 - 4)! * 4!) = 1820
placer 4 reines
les reines sont
deux-à-deux
indistinguables
Pour une excellente introduction aux mathématiques
nécessaires au programmeur, voir la section “Mathematical
Preliminaries” du chapitre 1 “Basic Concepts” de :
Knuth, Donald Ervin. The art of computer programming. Pearson Education, 2005.
nil
nil
nil nil nil nil
nil
nil
nil nil nil nil
nil
nil nil
nil nil nil nil
nil
nil
nil nil nil nil
nil nil nil
nil
nil nil
Etc.
nil nil nil nil
nil nil
nil
Divide Ut Imperes
Dans un groupe de personnes, une
célébrité ne connaît personne mais
est connue par tout le monde.
● Hypothèse : il y a une célébrité.
● Tant qu'il y a au moins 2 personnes
○ Choisir deux personnes (P1 et P2).
○ Demander à P1 si elle connaît P2.
■ Oui : retirer P1
■ Non : retirer P2
● La personne restante est la célébrité.
Couvrir avec des triominos en forme
de L, un damier de 2nx2n cases dont
une case est interdite.
Transformer le problème.
1000 pièces de 1€ à répartir dans 10
boîtes afin que toute valeur
comprise entre 1€ et 1000€
corresponde à une combinaison de
boîtes.
Utiliser la numération binaire.
http://fr.wikipedia.org/wiki/Num%C3%A9ration_Bibi
● 20, 21, 22, 23, 24, 25, 26, 27, 28 dans
les neuf premières boîtes
● 1000 - (20+21+...+28) = 489 dans la
dernière boîte
● Toute somme inférieure ou égale à
511 peut être construite avec les
neuf premières boîtes.
● Toutes les autres sommes
peuvent être construites en
utilisant la dernière boîte.
● Pour certaines sommes, il y a
plusieurs constructions possibles.
Les cavaliers noirs doivent prendre
la place des cavaliers blancs (et
réciproquement), en minimisant le
nombre de coups.
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
2
1
3
4
6
7
9
8
1
2
3
4
5
6
7
8
9
2
1
1
3
4
8
6
3
7
4
6
7
9
8
2
9
Approches gloutonnes.
Construire une solution pas à pas,
en prenant à chaque pas la décision
qui est localement la meilleure.
Il n'est pas toujours possible de
construire une solution ainsi.
La solution construite n'est pas
toujours optimale.
Placer le plus possible de rois non en prise.
Placer le plus possible de rois non en prise.
Placer le plus possible de rois non en prise.
Placer le plus possible de rois non en prise.
Est-ce la solution optimale ?
Est-ce la solution optimale ?
: OUI !
4 personnes et 1 lampe torche
doivent traverser un pont.
Le pont supporte au plus 2
personnes par traversée.
A traverse en 01 min
B traverse en 02 min
C traverse en 05 min
D traverse en 10 min
Une traversée se fait au rythme de la
personne la plus lente.
Solution gloutonne :
(2 + 1) + (5 + 1) + 10 = 19 min
Mais il existe une solution en 17 min.
Il est intéressant de réfléchir à un
algorithme pour résoudre de façon
optimale le problème de la torche
généralisée à n personnes.
Méthodes itératives
Partir d'une "solution" non optimale
ou même fausse, et par
transformations successives
atteindre une solution si possible
optimale.
Il faut essayer de prouver que
l'algorithme s'arrête, et que la
solution est optimale.
Soit une matrice m*n de réels.
Transformer la matrice pour que les
sommes de chaque ligne et de
chaque colonne soient positives.
L'unique opération élémentaire
autorisée est : changer les signes de
tous les nombres d'une ligne ou
d'une colonne.
Une solution itérative consisterait à
chercher à chaque étape une ligne
ou une colonne dont la somme est
négative ou nulle et à changer les
signes des nombres qui la
composent.
Cet algorithme est-il correct ?
Termine-t-il ?
Soit S la somme des éléments de la
matrice.
A chaque étape de l'algorithme, S
augmente.
Or il y a un nombre fini de solutions
m*n
potentielles (2 ), et donc un
nombre fini de telles sommes S.
Cette somme, un monovariant,
prouve que l'algorithme termine.
Nous verrons des méthodes
itératives telles que :
● recuit simulé
● recherche tabou
● algorithmes génétiques
● ...
Programmation dynamique
Ne pas recalculer la solution d'un
sous-problème déjà rencontré.
Départ (i=1, j=1)
Mouvements autorisés :
Récupérer le maximum de pièces.
M(i,j) = le nombre max de pièces qui
ont pu être récupérées une fois la case
(i,j) atteinte.
Vij = 1 si il y a une pièce sur la case (i,j),
0 sinon.
Arrivée
Départ (i=1, j=1)
Mouvements autorisés :
Récupérer le maximum de pièces.
M(i,j) = le nombre max de pièces qui
ont pu être récupérées une fois la case
(i,j) atteinte.
Vij = 1 si il y a une pièce sur la case (i,j),
0 sinon.
Arrivée
M(i,j) = max[ M(i-1,j), M(i,j-1) ] + Vij
M(0,j) = 0
M(i,0) = 0
0
0
0
0
1
1
0
1
1
2
2
2
0
1
1
3
3
4
0
1
2
3
3
5
0
1
2
3
4
5