Un programme d'intelligence artificielle en LOGO LE PROBLÈME DES HUIT REINES



Documents pareils
LE PROBLEME DU PLUS COURT CHEMIN

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Date : Tangram en carré page

chapitre 4 Nombres de Catalan

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

I. Introduction aux fonctions : les fonctions standards

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

1. Introduction Création d'une requête...2

SOMMAIRE. Travailler avec les requêtes... 3

La Gestion de fichiers Supports réalisés avec OpenOffice.org 2.3 Writer. La Gestion de fichiers. Niveau : Débutant Auteur : Antonio da Silva

Algorithmes de recherche

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Le chiffre est le signe, le nombre est la valeur.

Navigation dans Windows

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

modélisation solide et dessin technique

Algorithmique avec Algobox

Traitement de texte : Quelques rappels de quelques notions de base

CH.6 Propriétés des langages non contextuels

Vers l'ordinateur quantique

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Licence de Biologie, 1ère année. Aide. [Aide 1] Comment utiliser l'explorateur Windows? Comment créer des dossiers?

Raisonnement par récurrence Suites numériques

Pourquoi l apprentissage?

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

Promotion de la Bio-informatique

Cours de Master Recherche

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

CHAPITRE VIII : Les circuits avec résistances ohmiques

Fichiers, dossiers, enregistrer et arborescence

Chapitre 1 I:\ Soyez courageux!

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

CS 01 D/B2I/ CONSULTATION ET TRANSMISSION DE L INFORMA-

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

Université Paris-Dauphine DUMI2E 1ère année, Applications

Chapitre 1 : Introduction aux bases de données

SAGE: Introduction. 1 Connections WEB. 2 Généralités. 1.1 Sur le web insset. 2.1 Conception modulaire. Sage. 100-Introduction

Organiser vos documents Windows XP

BANQUES DE DONNÉES PÉDAGOGIQUES

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1. Utilisation du logiciel Keepass

Les structures de données. Rajae El Ouazzani

GdsCompta. Logiciel de comptabilité générale

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

@telier d'initiation

Publipostage avec Calc

Gestion de projet. GanttProject Didacticiel V novembre Gérard Gervois Frédéric Giamarchi

l'ordinateur les bases

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

REMARQUES SUR LE PETIT FRAGMENT DE TABLETTE CHYPRO MINOENNE TROUVÉ A ENKOMI EN par EMILIA MAS SON

Affectation standard Affectation modifiée (exemple)

Algorithmique avec Algobox

ENSEIGNEMENT ASSISTÉ PAR ORDINATEUR ET E.A.O. ET LANGUES ÉTRANGÈRES À L'UNIVERSITÉ

COMMUNICATEUR BLISS COMMANDE PAR UN SENSEUR DE POSITION DE L'OEIL

CODE CIVIL FRANÇAIS (ANTERIEUR A 1960)

LA SAUVEGARDE DES DONNEES SUR LES ORDINATEURS PERSONNELS

PLAN. Qui peut faire quoi? Présentation. L'internaute Consulte le site public

YAPBA M. Logiciel libre de suivi de vos comptes

Analyse hiérarchique de tâches (AHT)

Microsoft Application Center Test

Chapitre 1 Régime transitoire dans les systèmes physiques

Baccalauréat technologique

Cours 02 : Problème général de la programmation linéaire

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Application 1- VBA : Test de comportements d'investissements

- Université Paris V - UFR de Psychologie ASDP4 Info Introduction à Windows

Comment bien démarrer avec. NetAirClub GUIDE ADMINISTRATEUR V1.5. Table des matières

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Contrôle parental NetAddictFree 8 NetAddictFree 8 - Guide d utilisation

LES DÉTERMINANTS DE MATRICES

Harp - Basculement des élèves en début d année

Mesurer les performances (CPU) sous Linux

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Championnat de France de Grilles Logiques Finale 7 juin Livret d'instructions

La fonction exponentielle

2 Grad Info Soir Langage C++ Juin Projet BANQUE

I- Définitions des signaux.

Table des matières A. Introduction... 4 B. Principes généraux... 5 C. Exemple de formule (à réaliser) :... 7 D. Exercice pour réaliser une facture

Tutoriel. Votre site web en 30 minutes

LA PHYSIQUE DES MATERIAUX. Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE

Couples de variables aléatoires discrètes

Formation Comptabilité SAGE L 100 FORMATION SAARI SAGE LIGNE 100 COMPTABILITE

Tune Sweeper Manuel de l'utilisateur

5 semaines pour apprendre à bien jouer un morceau de piano

Architecture des ordinateurs. Environnement Windows : sauvegarde

Débuter avec OOo Base

Manuel d utilisation NETexcom

Transcription:

198 Un programme d'intelligence artificielle en LOGO LE PROBLÈME DES HUIT REINES 1. PRÉSENTATION Certains avantages du LOGO sont bien connus: la grande facilité d'accès que procure sa TORTUE en fait un outil privilégié des pédagogues et son caractère procédural facilite la programmation structurée. Il permet de plus à l'utilisateur de faire évoluer son environnement de programmation en ajoutant ses propres procédures aux primitives. Il est même ainsi possible de créer des sur-langages adaptés à des domaines particuliers. Mais LOGO présente d'autres avantages moins connus qui en font notamment un langage bien adapté pour traiter les problèmes relevant de ce qu'il est convenu d'appeler l'intelligence Artificielle. Nous en donnons une illustration avec l'étude du problème des huit reines. On verra que LOGO présente d'indéniables facilités lors de l'écriture du programme mais, ce langage, pas plus qu'aucun autre, n'est doté d'une quelconque intelligence et il ne peut nous dispenser d'analyser le problème, de trouver un algorithme et d'en donner une description avant de passer à l'écriture du programme. Nous nous attacherons donc à détailler toute cette démarche. Il s'agit de placer huit reines sur un échiquier 8x8, telles qu'aucune ne soit menacée par l'une des 7 autres. C'est avec cette dimension conventionnelle de l'échiquier que le problème a été posé en 1848 par un certain Max Bezzel. Rappelons pour la petite histoire que les 92 solutions ont été données dès 1850 par le Dr Nauck et que Gauss n'en a trouvé que 72. Il convient de préciser que dans ce décompte les solutions qui se déduisent l'une de l'autre par rotation ou par symétrie sont considérées comme des solutions distinctes. C'est ainsi que, pour un échiquier 4x4, nous considérons que le problème admet les deux solutions ci-dessous : N 49 INTELLIGENCE ARTIFICIELLE EN LOGO

199 Il est bien évidemment possible de traiter le problème quelle que soit la dimension de l'échiquier pourvu qu'il soit carré et que le nombre de reines soit égal au nombre de cases par côté. Notre programme devra d'ailleurs être capable de donner les solutions dans tous les cas. Seule la nécessité de ne pas atteindre des durées de traitement prohibitives nous amènera à limiter la dimension de l'échiquier. 2. DESCRIPTION DE L'ALGORITHME Étant donné que nous allons découvrir l'algorithme en travaillant "à la main", nous vous conseillons de limiter la dimension de l'échiquier à 4 cases de côté. Il est inutile d'y faire apparaître des cases blanches et des cases noires car les couleurs des cases ne concernent pas les reines. Rappelons en effet que pour qu'une reine ne soit menacée par aucune autre reine trois conditions doivent être remplies: 1. il ne doit pas y avoir d'autres reines sur sa colonne; 2. il ne doit pas y avoir d'autres reines sur sa ligne; 3. il ne doit pas y avoir d'autres reines sur "ses diagonales" (nous appelons ainsi, par abus de langage, les deux parallèles aux diagonales du carré, qui passent par sa case). Avec la stratégie que nous préconisons, la première condition est remplie d'emblée. Nous décidons en effet d'affecter une reine à chaque colonne. La position de toutes les reines peut ainsi s'exprimer simplement par une suite de nombres qui représentent les numéros des lignes des reines prises de la gauche vers la droite. Ainsi, les solutions sur un échiquier 4x4 peuvent s'exprimer : 2 4 1 3 et 3 1 4 2.

200 Nous appellerons "reine courante" la reine que nous déplaçons. Les "reines précédentes" sont celles qui sont situées dans les colonnes qui sont à sa gauche et les "reines suivantes" celles qui sont à sa droite. Chaque reine aura une "voisine droite" et une "voisine gauche" sauf les reines des colonnes extrêmes qui n'ont qu'une voisine et que nous appellerons la "première reine" pour celle qui est dans la colonne la plus à gauche et le "dernière reine" pour celle qui est dans la colonne la plus à droite. Ces points de vocabulaire étant précisés, nous pouvons commencer. On démarre en plaçant la 1ère reine sur la 1ère case. Puis, c'est au tour de la 2ème reine que l'on place sur la case 1 et que l'on monte de case en case jusqu'à ce qu'elle ne soit plus menacée par la première reine. Elle monte ainsi jusqu'à la troisième case. On place ensuite la troisième reine et ainsi de suite en appliquant les huit règles suivantes. 1. Une reine ne peut être déplacée que dans sa colonne. 2. Une reine ne se déplace qu'en montant de case. Si elle est sur la dernière case, on ne peut que la remettre sur la case de départ. Cela se fait par application de la règle 5. 3. On change de reine courante en prenant une voisine. 4. Si c'est la voisine gauche qui devient la reine courante, elle monte d'une case en partant de l'endroit où on l'avait laissée précédemment. Si elle est déjà en haut de l'échiquier, c'est la nouvelle voisine gauche qui devient la reine courante par application de la règle 7. 5. Si c'est la voisine droite qui devient la reine courante, elle part de la case de départ. 6. Lorsqu'on déplace la reine courante, on cherche une position où elle n'est plus menacée par les reines précédentes sans se soucier des reines suivantes. En d'autres termes, la solution est toujours recherchée de la gauche vers la droite. On fait donc monter la reine courante case par case jusqu'à ce qu'elle soit libre de toute menace des reines précédentes ou qu'elle arrive en haut de l'échiquier. 7. Lorsque la reine courante est en haut de l'échiquier et qu'on cherche à la faire monter pour appliquer les règles 4 ou 6, c'est la voisine gauche qui devient reine courante. INTELLIGENCE ARTIFICIELLE EN LOGO

201 8. Lorsqu'on a trouvé une position où la reine courante n'est menacée par aucune des reines précédentes, la voisine droite devient la reine courante. On obtient une solution chaque fois que la dernière reine (devenue reine courante) trouve une position où elle est libre de toute menace. Puisqu'on ne change de reine courante qu'en prenant une voisine, c'est alors l'avant dernière reine qui devient reine courante et on continue en s'en tenant toujours à nos huit règles. L'algorithme est terminé lorsque la première reine est déjà en haut de l'échiquier et que la deuxième reine arrive à son tour en fin de colonne. La première reine devient en effet reine courante mais la règle 8 est inapplicable puisqu'elle ne peut plus monter et qu'elle n'a pas de voisine gauche. 3. REPRESENTATION EN ARBRE Nous allons maintenant formaliser le problème avec une représentation en arbre. La terminologie propre à cette méthode caractéristique de l'intelligence Artificielle est suffisamment explicite pour qu'il ne soit pas nécessaire de donner toutes les définitions. Nous parlerons en effet de la racine, des nœuds, des feuilles, du parcours de l'arbre... Signalons seulement que les feuilles sont des nœuds terminaux. Le dessin de l'arbre s'obtient en recherchant par une méthode classique de l'analyse combinatoire toutes les positions qui peuvent être prises par les reines en s'en tenant à notre première règle à savoir que chaque reine ne peut se déplacer que sur sa colonne. La première rangée de nœuds à partir de la racine représente les positions de la première reine (positions indiquées sur notre dessin reproduit en annexe par le numéro des lignes), la deuxième rangée celles des deux premières reines (un couple de chiffres indique les numéros des lignes) et ainsi de suite jusqu'aux feuilles qui représentent l'ensemble des positions de toutes les reines. On voit rapidement que le nombre de feuilles est N N pour un échiquier de N cases de côté; soit 27 feuilles pour un échiquier 3x3, 256 feuilles pour un échiquier 4x4, 3 125 pour un échiquier 5x5, 46 656 pour un échiquier 6x6...

202 Compte tenu de cette inflation galopante, vous comprendrez que nous ne cherchions pas à dessiner un arbre complet pour un échiquier de plus de 3 cases de côté. Bien que dans cette dimension le problème n'admette aucune solution, il est possible de représenter notre algorithme par un parcours des décisions sur l'arbre correspondant. Chaque déplacement d'un nœud au suivant représente l'une des trois décisions possible. 1. Passage de la reine courante sur la case supérieure. Décision que nous symboliserons ultérieurement par la lettre H (comme haut). Le déplacement correspondant sera représenté sur l'arbre par le signe : 2. Changement de reine courante en prenant la voisine gauche. Cette décision sera symbolisée par la lettre G et le déplacement correspondant sera représenté par le signe : 3. Changement de reine courante en prenant la voisine droite. Symbole D. Signe Le parcours des décisions peut être représenté par une suite des trois signes que nous venons de définir. La taille des signes varie en fonction du niveau sur lequel ils se trouvent sur l'arbre. Pour utiliser cette représentation, nous sommes amenés à planter notre arbre avec la racine à gauche et les feuilles à droite alors qu'habituellement ce type d'arbre se plante avec la racine en haut! Fi des habitudes et des lois de la botanique! Examinons le parcours obtenu (voir l'annexe 3). Il appelle deux remarques. 1. On cherche au départ à s'enfoncer le plus profondément possible dans l'arbre et on termine par la racine. Ce type de parcours est connu sous le nom de préordre ou parcours antérieur ou encore profondeur d'abord. C'est le parcours le plus couramment utilisé mais il en existe d'autres : le postordre ou parcours postérieur, le parcours largeur d'abord et le parcours intérieur. 2. Certaines parties de l'arbre ne sont pas explorées. C'est le cas dès le début du parcours lorsqu'on s'aperçoit que la décision prise au départ de placer les deux premières reines sur la première ligne était mauvaise. On décide alors de déplacer la 2ème reine sur la 2ème ligne puis sur la 3ème et c'est seulement à ce stade qu'on décide d'essayer de placer la 3ème reine. Sur notre exemple 21 feuilles sur 27 sont ainsi délaissées. Sur des arbres plus importants, ce procédé permettrait INTELLIGENCE ARTIFICIELLE EN LOGO

203 d'économiser l'exploration non seulement de feuilles mais aussi celle de branches à plusieurs ramifications. Cette technique qui consiste à revenir sur des choix faits antérieurement et qui s'avèrent mauvais s'appelle le backtrack. Elle permet d'économiser distance, temps et énergie. Seuls les petits chefs bornés hésitent à l'utiliser. Hélas! L'Intelligence Artificielle n'a rien à céder à ceux que la nature n'a pas suffisamment dotés en matière grise. 4. LE PROGRAMME Mais, ne nous égarons pas! A ce stade de notre étude, une autre remarque s'impose : nous n'avons pas encore parlé de programmation ce qui prouve qu'il n'est pas obligatoire de faire de l'informatique pour s'intéresser à l'algorithmique et à l'intelligence Artificielle. Cependant, on perçoit maintenant tout l'intérêt que présente le traitement du problème par les moyens de l'informatique. Nous voyons en effet à quel point la mise en œuvre de notre algorithme "à la main" devient longue, délicate et fastidieuse lorsque le nombre de cases de l'échiquier augmente. Seul le recours à l'ordinateur permet alors de traiter le problème dans des conditions de facilité et de rapidité acceptables. Dans notre version, le programme intègre, outre l'algorithme que nous avons décrit, deux techniques expliquées dans notre étude préliminaire. L'édition des solutions se présente en effet sous la forme déjà employée d'une suite de nombres représentant les numéros des lignes de chaque reine et le programme est doté d'une fonction de trace rudimentaire qui affiche les symboles D, G et H que nous avons définis lors de la formalisation du problème par une arborescence. Par ailleurs, le programme contient un compteur qui permet d'indiquer, en fin d'exécution, le nombre des solutions. Nous vous proposons de découvrir maintenant ce programme en examinant à la fois le listing et l'organigramme reproduits en annexe. Nous avons indiqué en caractères gras sur le listing tout ce qui concerne le compteur et la fonction de trace. Nous n'en parlerons plus. Quant aux parties grisées de l'organigramme, elles correspondent à chacune des cinq procédures. Les reines, représentées chacune par un nombre qui indique le numéro de ligne, sont constamment réparties entre la reine courante (reine :C), les reines précédentes (liste :P) et les reines suivantes (liste :S).

204 Le programme est lancé avec la procédure DEPART dont le paramètre :N indique le nombre de cases par côté de l'échiquier. Cette procédure initialise le programme ainsi : la liste :P est vide; la liste :S contient (:N - 1) reines représentées chacune par un 0; la reine courante :C est la première reine (elle est représentée par un 1 puisqu'elle est sur la première ligne). Les deux procédures D (voisine droite) et G (voisine gauche) permettent le changement de reine courante. Dans la procédure D, conformément à la règle 5 de notre étude préliminaire, la reine courante est placée sur la première case avec DONNE "C 1. Au centre du programme se trouve la procédure DECIDER qui permet notamment de comparer la position de la reine courante avec celles des reines précédentes pour voir si elle est menacée. Elle contient trois paramètres. 1. La reine courante :C. 2. Une liste :LL qui contient au départ toutes les reines précédentes. A chaque appel récursif, une reine est ensuite supprimée de cette liste avec SD :LL. 3. Un compteur :X qui démarre avec 1 et qui est incrémenté à chaque appel récursif. Il indique en fait le nombre de colonnes qui séparent la reine courante de la dernière reine de la liste :LL. La structure de cette procédure est assez classique. Elle contient trois tests répartis sur deux niveaux. A chaque appel de la procédure un test principal enclenche en effet l'un des deux tests secondaires. Quatre possibilités sont ainsi offertes. Celle qui apparaît en dernier sur la procédure est un appel récursif qui fonctionne en démontant :LL avec SD :LL et en incrémentant :X. Il s'agit donc d'une procédure récursive dont la condition d'arrêt est recherchée par le test principal (SI VIDE? :LL). Lorsque cette condition d'arrêt est satisfaite le premier des tests secondaires ouvre deux possibilités. Si la reine courante est la dernière reine (SI VIDE? :S), une solution vient d'être trouvée. Elle est donc éditée. Sinon, c'est la voisine droite qui devient reine courante. Quant au deuxième test secondaire, c'est lui qui compare les positions respectives de la reine courante et de la dernière reine de la liste :LL pour détecter si elles sont en prise. Afin d'en expliquer le fonctionnement nous allons, dans un premier temps, utiliser les notations conventionnelles en mathématiques. Nous prendrons trois variables C, L et X qui représentent respectivement :C, DER :LL et :X. INTELLIGENCE ARTIFICIELLE EN LOGO

205 Étant donné qu'avec notre algorithme les reines sont placées d'emblée dans des colonnes distinctes, deux reines ne peuvent être en prise que si elles sont sur une même ligne ou sur une même diagonale. Si elles sont sur une même ligne, on aura C=L qu'on peut également écrire C L=0. Pour qu'elles soient sur une même diagonale, il y a deux possibilités C L=X ou C L= X. En d'autres termes, on peut dire que pour que deux reines soient en prise, il faut que la différence entre C et L soit égale à 0, X ou X. En LOGO cela s'écrira : SI MEMBRE? DIFF :C DER :LL PH PH 0 :X PROD :X -1 Dès que cette condition est satisfaite, la procédure MONTER est enclenchée. Cette dernière procédure permet de simuler le passage de la reine courante à la case supérieure par incrémentation de :C sauf si elle est déjà en haut de l'échiquier (SI EGAL? :C :N). Dans ce dernier cas, deux possibilités sont à nouveau envisageables : si la reine courante est la première reine (SI VIDE? :P), l'algorithme est terminé et le programme édite le nombre de solutions, sinon la voisine gauche devient la reine courante. 5. CONCLUSIONS Le programme ainsi obtenu est étonnant de brièveté au regard de la complexité du problème et de la longueur des explications qu'il nécessite. Mais, plus que les performances du programme lui-même, ce sont précisément les explications qui permettent d'en saisir le fonctionnement qui nous ont paru digne d'intérêt puisqu'elles permettent d'aborder sur un exemple concret quelques notions de l'intelligence Artificielle. Nous avons voulu montrer en quoi l'ordinateur apporte des facilités dans la résolution de ce type de problème tout en illustrant que les moyens de l'informatique par eux-mêmes ne peuvent apporter aucune solution. Même si des programmes de ce type imitent l'intelligence humaine avec des procédés comme le backtrack, ils ne font que mettre en oeuvre les algorithmes que nous élaborons. Enfin, nous avons voulu montrer que le LOGO qui est issu de LISP, langage spécialement conçu pour l'intelligence Artificielle, est bien adapté pour traiter de tels problèmes. L'algorithme que nous avons utilisé est en effet connu de longue date et il a d'ailleurs été traité en BASIC dans divers ouvrages notamment dans "Mathématiques élémentaires d'un point de vue algorithmique (Ed. CEDIC)" et dans

206 "Programmes d'intelligence artificielle en basic (Ed. EYROLLES)". Mais, par rapport à ces versions, l'écriture en LOGO est plus claire. Nous avons vu en effet qu'elle est très proche de la description de l'algorithme que nous avons donnée., Avranches 1988 ANNEXE 1 POUR DEPART :N VT TAPE PH "reines.$ DONNE "CPT 0 DONNE "P [] DONNE "S [] REPETE ( :N - 1 ) [DONNE "S MD 0 :S] D FIN POUR G TAPE "G DONNE "S MP :C : S DONNE "C DER :P DONNE "P SD :P MONTER FIN POUR D TAPE "D DONNE "P MD :C :P DONNE "S SP :S DONNE "C 1 DECIDER :C :P 1 FIN POUR DECIDER :C :LL :X SI VIDE? :LL [SI VIDE? :S [EC [] TAPE PH PH :P :C "$ DONNE "CPT ( :CPT + 1 ) G] [D] ] [SI MEMBRE? DIFF :C DER :LL PH PH 0 :X PROD :X -1 [MONTER] [DECIDER :C SD :LL ( :X + 1 )]] FIN POUR MONTER SI EGAL? :C :N [SI VIDE? :P [EC [] TAPE :CPT EC "$ solutions. STOP] [G]] [TAPE "H DONNE "C ( :C + 1 ) DECIDER :C :P 1] FIN INTELLIGENCE ARTIFICIELLE EN LOGO

207 ANNEXE 2 ANNEXE 3