1 / 29

MAGIC KNIGHT TOUR Carrés d’Euler

MAGIC KNIGHT TOUR Carrés d’Euler. Yann DENEF - http://ydenef.free.fr/. Placer les nombres de 1 à 64 dans un carré 8x8. Première contrainte : 2 nombres consécutifs sont séparés par un bond d’un cavalier du jeu d’échec i.e. une case alignée + une case sur le coté

Download Presentation

MAGIC KNIGHT TOUR Carrés d’Euler

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MAGIC KNIGHT TOUR Carrés d’Euler Yann DENEF - http://ydenef.free.fr/

  2. Placer les nombres de 1 à 64 dans un carré 8x8 • Première contrainte : 2 nombres consécutifs sont séparés par un bond d’un cavalier du jeu d’échec i.e. une case alignée + une case sur le coté Estimation du nombre de chemins = 1,22 10+15. • Pas de contraintes : 64! possibilités Nombre de solutions = 1,26 10+89 Estimation du nombre d’atomes dans l’univers = 10+80 • Deuxième contrainte : trouver des chemins du cavalier particuliers • Chemins fermés : arrivée à un bon du départ Nombre de Chemins fermés = 1,3267364410532 10+13 • Chemins magiques : la somme des nombres (numéro de bond) de chaque ligne et de chaque colonne vaut 260 i.e. 1/8*(1+2+…+63+64). Pas de solutions avec les diagonales Nombre de Chemins magiques = 140 dont 77 ouverts et 63 fermés (31 sur 63 distincts) • Chaque ¼ de l’échiquier est un carré magique (8 chemins) • Diagonales valant 260 • Chemins avec des points de passage imposés • Chemins sans croisement (plus long chemin sans croisement = 35 bonds)

  3. Algorithme de recherche • Principe de l’algorithme • le cavalier avance. Quand il est bloqué, il recule et prend une autre direction • Chaque case de l’échiquier est un objet possédant un ensemble de propriétés • sa position sur l’échiquier, sa ligne, sa colonne • sa couleur sur l’échiquier (noir ou blanc) • ses voisins, ses voisins libres • son état (libre ou occupé) • sa position dans le chemin (1er bond, 2eme bond …) quand la case est occupée • la case précédente dans le cas ou la case est occupée • … • Un ensemble de méthodes • demande d’autorisation d’avance sur la case • demande d’un autre voisin de la case • avance sur la case • recule sur la case précédente • affichage/effacement du numéro de bond • …. • Des propriétés communes à toutes les cases • fin du parcours connue • valeur de la somme des lignes et des colonnes • …

  4. Algorithme • L’algorithme de recherche repose sur 4 méthodes • IsFree() : retourne vrai si la case est une bonne candidate pour le chemin et faux dans le cas contraire. IsFree construit la liste des « bons voisins ». La notion de bon candidat dépend de l’objectif de la recherche : chemin simple, carrés magiques, chemins sans croisements, points de passage imposés … • IsFree2() : semblable a IsFree mais n’est pas appelé en sortie de FirstStep(). La case appelée ne peut donc pas être la fin du chemin • FirstStep() : la case a préalablement accepté le bond. Elle passe de l’état libre à l’état occupée. Cette méthode retourne la première case candidate dans la liste des voisins • NextStep() : demande à la case courante (case sur laquelle est le cavalier) un autre voisin, le voisin précédent ne convenant pas. Tous les chemins à partir du précédent voisin ont été essayés. Retourne toujours une case quitte à reculer (récursivité de la méthode entre cases) • L’algorithme travaille avec un coup d’avance • IsFree() et IsFree2() analysent les caractéristiques des voisins, pas les caractéristiques courantes Case de départ F + F2 Solution FirstStep F= F2 F IsFree F2 F2 NextStep N Récursivité F + F2 NS IsFree2 Fin du parcours

  5. Algorithme Polymorphique • Le même algorithme est utilisé pour rechercher différentes solutions • chemins simples du cavalier sur l’échiquier • chemins fermés, chemins imposés • carrés magiques • chemins dans un cube 4x4x4 • chemins sans croisement • …. • Seules, les méthodes IsFree et IsFree2 sont adaptées • Polymorphisme de l’objet « case de l’échiquier » dont ces 2 méthodes déterminent, en fonction de l’objectif, les conditions d’avance du cavalier

  6. CARRES MAGIQUES ------------------------- |62|07|60|19|34|09|22|47| ------------------------- |59|18|63|08|21|46|35|10| ------------------------- |06|61|20|57|12|33|48|23| ------------------------- |17|58|05|64|45|24|11|36| ------------------------- |04|43|56|13|32|37|26|49| ------------------------- |55|16|01|44|25|52|29|38| ------------------------- |42|03|14|53|40|31|50|27| ------------------------- |15|54|41|02|51|28|39|30| -------------------------

  7. Carrés Magiques Critères de réduction de l’arbre de recherche • Détection des impasses dans le trajet du cavalier, basée sur le nombre de voisins restant de chacune des cases • Détection des lignes ou colonnes trop grandes (somme des index ne pouvant pas être plus petite que 260) • Détection des lignes ou des colonnes trop petites (somme des index ne pouvant pas être plus grande que 260) Plus ces détections sont précoces, plus la réduction de l’arbre de recherche est importante

  8. Détection de la fin du parcours La détection de la fin de parcours est fondamentale et a une implication sur les 3 critères de réduction de l’arbre de recherche • Création d’une « BlackListe » identifiant les cases où la fin n’est pas autorisée • La fin planifiée est déduite des bonds précédents et peut être identifiée sur une case, sur une ligne ou sur une colonne • A chaque instant il n’existe que 0 ou 1 case de fin planifiée • Fin topologique : cette case n’a plus qu’une seule case voisine. Quand on atteint cette case, on ne peut plus revenir en arrière. C’est la fin du parcours ; son index vaut donc 64 • Fin arithmétique : cette case doit avoir un index de 64 pour que la somme des index de la ligne ou de la colonne qui la contient soit égale à 260. C’est donc la fin du parcours • La« BlackListe» relie les fonctions de détection de fin topologique et de fin arithmétique

  9. Fonctions de détection de l’algorithme Toutes ces fonctions sont appelées dans IsFree ou IsFree2 Si la fin topologique est connue, les critères de détection d’impasse sont plus sévères Détection d’une fin de parcours topologique Détection des impasses Détection d’une ligne/colonne trop petite Mise à jour de la BlackListe Exploitation des résultats des recherches précédentes Détection d’une ligne/colonne trop grande Détection d’une fin de parcours arithmétique Si la fin de parcours n’est pas sur la ligne ou la colonne, la contrainte est plus importante Si la fin de parcours est sur la ligne ou la colonne, la contrainte est plus importante Si la fin arithmétique est connue, les critères de détection d’impasse sont plus sévères La liste des fins possibles est mise à jour Les cases déjà choisies comme départ (et leurs symétries) sont exclues des fins possibles Une case en blackListe ne peut pas être la fin du parcours

  10. Exemples de traitement • Détection de la fin de parcours • Critère topologique : détection de la fin • Critère arithmétique : fin imposée sur une case • Critère arithmétique : fin imposée dans une colonne • Fin connue : réduction de l’arbre de recherche • Détection d’impasse • Critère topologique : détection impasse (trois fins) • Critère topologique : détection d’impasse • Corrélation entre critères arithmétiques et topologiques • Détection d’une ligne trop grande • Position de la fin non connue • Position de la fin connue • Détection d’une ligne trop petite Mise en œuvre

  11. Détection de fin de parcours (1) Critère topologique • Position courante = 13(*) • Index prévu = 31 • 2 voisins « à 1 voisin » (cases 7 et 30) • 2 autres voisins à plus de 1 voisin (19 et 23) 32 32 Les deux voisins « à un voisin » peuvent être la fin du parcours. Le cavalier avance sur une case; l’autre case est identifiée comme la fin du parcours. Les deux autres voisins sont écartés X X 31 fin back (*) Les case sont numérotées de 0 à 63, ligne par ligne de gauche à droite et du bas vers le haut

  12. Détection de la fin de parcours (2) Critère arithmétique 57 • Position courante = 20 • Index prévu = 27 • colonne = 5 • Somme des index sur la colonne = 78 (51+27) • Valeur limite permettant de déduire la fin de parcours = 80 • Case déduite pour la fin de parcours = 12 (seule case pouvant accueillir un index pair) 27 64 60 63 61 Somme maximale des index dans les trous de la colonne 5 Fin de parcours pas connue : 182 (64 + 61 + 57) Valeur minimum admissible : 78 (260 -182) => OK Fin de parcours connue ailleurs que sur la colonne : 180 (63 + 60 + 57) Valeur minimum admissible : 80 (260 – 180) Le bond avec l’index 27 permet de déduire la case de fin de parcours. Le cavalier avance; la case 12 est identifiée comme fin arithmétique. back

  13. Détection de fin de parcours (3) Fin localisée sur une colonne 63 • Position courante = 27 • Index prévu = 23 Analyse de la colonne 4 • Somme des index sur la colonne 4 = 79 (23+56) • Fin sur la colonne : valeur maximale pouvant être ajoutée 181 = 64+61+56 (ou 64+60+57) • Fin hors colonne : valeur maximale possible admissible 179 = 63+60+56. La somme de la colonne doit être supérieure à 81 (260-179) 61 60 64 23 56 Le bond avec l’index 23 permet de déduire la colonne dans laquelle se trouve case de fin de parcours. Le cavalier avance; la fin est mémorisée dans la colonne 4. back

  14. Réduction de l’arbre de recherche Critère topologique • Position courante = 46 • Index prévu = 24 • Fin préalablement détectée = 8 • 1 voisin « à 1 voisin » (case 63) • 4 autres voisins à plus de 1 voisin 25 X 24 X X X Les quatre voisins « à plusieurs voisins » sont écartés. Le cavalier avance sur la case 63, seule case permettant d’éviter de définir deux fins distinctes du parcours 64 back

  15. Détection des fins multiples Critère topologique • Position courante = 42 • Index prévu = 28 • Fin préalablement détectée = 1 • 2 voisins « à 1 voisin » (cases 32 et 36 ) • 4 autres voisins à plus de 1 voisin X X X 28 X X X X Le cavalier recule pour éviter une position impliquant plusieurs fins de parcours 64 back

  16. Détection d’une impasse Critère topologique • Position courante = 53 • Index prévu = 30 • 2 voisins « à 1 voisin » (cases 38 et 63) X 30 32 X 64 Aucun des voisins ne convient (index impair donc fin de parcours impossible, cases « Blacklistées »). Le cavalier recule back

  17. Corrélation entre fins de parcours 3 fins distinctes, 1 arithmétique et 2 topologiques • Position courante = 20 • Index prévu = 27 Analyse de la colonne 5 • Somme des index sur la colonne = 78 (51+27) • Case déduite pour la fin de parcours = 12 (la somme des Index est inférieure à 80) • 2 voisins « à 1 voisin » (cases 3 et 5) 27 64 Il y a trois fins distinctes. Le cavalier recule back

  18. 46 44 42 37 40 Détection d’une ligne trop grande (1) Prise en compte de la distance entre lignes et case courante • Position courante = 59 • Index prévu = 33 Analyse de la ligne 1 • Distance entre ligne et case courante = 7 • Somme des index sur la ligne 1 = 53 • Valeur minimale pouvant être ajoutée 209 = 37+40+42+44+46 • Valeur maximale admissible 51 (260-209) 33 La somme des index de la première ligne est trop grande (53 pour une valeur maximale autorisée de 51). Le cavalier recule. back

  19. 39 37 33 35 Détection d’une ligne trop grande (2) Fin topologique fixée • Position courante = 39 • Index prévu = 30 • Fin topologique = 58 Analyse de la ligne 8 • Distance entre ligne et case courante = 3 • Somme des index sur la ligne = 118 (64+54) • Valeur minimale pouvant être ajoutée 144 = 33+35+37+39 • Valeur maximale admissible = 116 (260 – 144) 64 30 La somme des index sur la ligne 8 est trop grande (118). La connaissance de la position de fin de parcours est exploitée. Le cavalier recule. back

  20. Détection d’une ligne trop petite Fin topologique fixée sur une ligne différente • Position courante = 13 • Index prévu = 33 • Fin topologique = 24 Analyse de la ligne 2 • Somme des index sur la ligne = 75 (42+33) • Valeur maximale pouvant être ajoutée 181 = 63+60+58 • Valeur minimale admissible 79 (260-181) 64 58 33 60 63 La somme des index sur la ligne 2 est trop petite (75 au lieu de 79). Le cavalier recule back

  21. Règles arithmétiques 9 16 5 11 8 19 4 10 • Les valeurs minimales et maximales admissibles sur les lignes ou sur les colonnes sont calculées une fois pour toute à l’initialisation • Elles dépendent pour les valeurs min et max • De la topologie d’occupation de la ligne/colonne • De la couleur de la case de départ • De la connaissance ou non de la fin de parcours • Elles dépendent pour les valeurs max • De la distance de la case courante à la ligne/colonne testée • De l’index courant • Test des valeurs maximales (tableau à 3 entrées – 8x64x255 éléments) – test sur les 8 lignes et 8 colonnes MagicRowVal[row] > Sigma8_NG_Row[dist[row]][IndexP1][MagicRow[row]] • Test des valeurs minimales (double indirection) – test ligne/colonne courante MagicRowVal[row] < (**MBlocageRow)[MagicRow[row]]

  22. Colonne ou case ? L’index 23 sur la case 27 impose la fin sur la colonne 4 2 cases candidates Si la case 3 est Blacklistée, la fin est sur la case 51 BL • Certaines cases de l’échiquier ne peuvent pas être la fin de parcours : elles sont « blacklistées » • Par construction : les couleurs des cases de départ et d’arrivée sont différentes (blanche et noire) • Par configuration : • On peut souhaiter imposer la case de fin de parcours, donc exclure de la liste de fin toutes les autres cases • On peut souhaiter exclure certaines cases de la liste des fins possibles (optimisation de la recherche en exploitant les résultats des recherches précédentes à partir d’une autre case de départ) • INIT • Blzero (Blackliste initiale) est un tableau de 64 éléments représentant les 64 cases • Blzerodepend de la case départ : 32 candidats seulement pour la fin de parcours • Blzero est mis à jour en éliminant les départs des runs précédents et leurs symétries • Blzero est exploité pour l’identification de la « case fin de parcours » plutôt que de la « barre fin de parcours » • La « BlackListe  » varie au cours de la progression du cavalier en fonction des propriétés déduites de la fin de parcours planifiée

  23. Fin de parcours et valeurs minimales • 4 tableaux de référence (constantes) • 2 quand la fin n’est pas connue • 2 quand la fin est connue • 6 pointeurs sur les tableaux • 3 pour les lignes • 3 pour les colonnes &MBlocageAA &MBlocageAA_1 • Les valeurs minimales admissibles sur une colonne dépendent de la topologie de remplissage de la colonne et de de la connaissance de la fin de parcours

  24. Mise en œuvre de l’algorithmique Deux objectifs donc deux programmes Offrir une interface graphique intuitive dans une technologie Composant (ActiveX) Code source : 35 000 LoC Permettre le paramétrage du type de recherche, des options de l’algorithme … Enregistrer et présenter les données caractérisant les performances de l’algorithme • Objectif 1 : évaluer simplement les impacts des options de l’algorithme sur le temps de recherche • Objectif 2 : développer un programme performant exploitant les nouveaux processeurs multi-cœurs

  25. ActiveX Kmagic in action Dispatch uuid Methods Properties DoPropExchange OnDraw … OnClick OnReset PowerPoint Conteneur ActiveX Event uuid class KCtrl : public COleControl CLSID : {00865686-E835-11D3-94A2-D550217BD144} Events Time Time Time 5 entrées dans la Registry sous HKEY_CLASSES_ROOT Typelib information Class information Primary Dispatch interface Event interface Property Page Index Index

  26. Exemple de gain en utilisant les BlackListesDépart case 18 BlackListe vide Temps : 50124 sec. Les 4 coins en BlackListe Temps : 35039 sec. 24 cases en BlackListe Temps : 28880 sec.

  27. Deuxième programme pour un objectif de performance Gain performance : 20% Gain performance : 65% 4 thread en // sur i3 M370 • Suppression de l’interface graphique • Résultats affichés dans une fenêtre DOS et stockés dans des fichiers • Algorithme extrait du contexte ActiveX • Simplification des appels de méthode • Plus de méthodes virtuelles : IsFree(),IsFree2(),NextStep(),FirstStep() • Fonctions en « inline » dans la boucle de recherche • Programmation multi-threads • Indépendance des variables entre threads • Configuration du nombre de cœurs (Support jusqu’ à 12 cœurs) • Exploitation des multi-cœurs laissé à l’OS (pas d’utilisation de librairies spécifiques MT … hormis CreateThread())

  28. Résultats - Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz Départ case 18 Recherche exhaustive de carrés magiques : 14 solutions ActiveX Kmagic : 50124 sec Kmagic : 35039 sec (BL 0) Kmagic : 28880 sec (BL 0,1,9,11) Objectif performance Ascii 1 thread (BL 0) : 28012 sec Ascii 4 threads (BL 0) : 8714 sec

  29. Résultats Carrés Magiques Intel(R) Core(TM) i3 CPU 2330 @ 2.20GHz 4 threads parallèles Les 140 solutions sont trouvées en 3,9 jours Le « temps apparent » moyen de la boucle est inférieur à 80 nano secondes Certaines solutions sont trouvées 2 fois (fin de parcours symétrique par rapport au début de parcours)

More Related