,-----. ,--. ,--. ' .--./ ,---. ,--,--, ,---. ,---. ,--.,--.,--.--. ,---. | | | |,--.,--.,--,--,--. ,---. ,--.,--. ,---. | | | .-. || \| .--'| .-. || || || .--'( .-' | |.'.| || || || || .-. || || |( .-' ' '--'\' '-' '| || |\ `--.' '-' '' '' '| | .-' `) | ,'. |' '' '| | | || '-' '' '' '.-' `) `-----' `---' `--''--' `---' `---' `----' `--' `----' '--' '--' `----' `--`--`--'| |-' `----' `----' `--' ========================= == Réalisation de mdr1 == ========================= (Titre joli uniquement avec une police de caractère telle que courier. Conçu grâce au site http://www.kammerl.de/ascii/AsciiSignature.php) Ce fichier est un classeur destiné pour une TI-Nspire d'OS 3.1. Il a été réalisé dans le cadre du concours de Knossos organisé par TI-Planet (http://tiplanet.org), et a été rendu le 3 Novembre 2013. Programmé entièrement par mdr1 (pseudo du membre de tiplanet). Fonctionnement de l'intelligence artificielle : L'IA utilise beaucoup les ensembles, des fonctions ont été créées pour les manipuler. Puis ont été créées des fonctions qui gèrent de manière autonome toutes les hypothèses relatives à l'emplacement des divers objets sur le parcourt : trésor, Wumpus et trous. Ces fonctions sont alors appelées sans se préoccuper de leur fonctionnement : on commence par faire le maximum de déductions d'après les informations obtenues, puis on les utilise pour agir. Pour le Wumpus, on crée un ensemble de salles où peut se trouver le Wumpus (contient initialement toutes les salles) ; il suffit que lorsque "ça ne pue pas", exclure les salles voisines, lorsque "ça pue", prendre l'intersection entre l'ensemble déjà présent et celui des salles voisines. On exclu bien sûr la salle dans laquelle on se trouve. Si l'ensemble se réduit à un singleton, on connaît exactement son emplacement. Le fonctionnement du trésor est exactement le même (et si le sensation "c'est lourd" se présente pour la première fois, c'est que nous l'avons pris, si "ça ne pue plus" après avoir tiré, c'est qu'on a tué le Wumpus). Concernant les trous, on construit tout d'abord une ensemble de salles qui n'ont pas de trou (initialement réduit au singleton contenu la salle de départ). Et on construit également une liste de salles contenant un trou à chaque fois que l'on ressent que "ça souffle". Les salles qui n'ont pas de trou sont automatiquement éliminées de ces ensembles. Remarque : lorsqu'un ensemble se réduit à un singleton, on peut connaître l'emplacement exact de quelque-chose, comme le Wumpus : on rafraîchi alors les hypothèses des autres types d'objets sachant qu'ils ne peuvent se trouver dans cet emplacement ci. La fonction "think" se contente d'appeler toutes ces fonctions, et de gérer le cas où le trésor a été pris. La fonction action évalue toutes les possiblités dans lesquelles on peut se trouver en commençant par les meilleures (on a le trésor, on rejoint donc l'arrivée), et en finissant par les pires (on n'a plus de flèche, aucun chemin pour rejoindre une salles inconnue de manière sûre n'existe). Lorsque l'on est désespéré, on fait des calculs de probabilité pour prendre le trajet le moins risqué. Pour améliorer les calculs de probabilité (j'y ai réfléchi mais n'ai pas eu le temps), il suffirait d'évaluer toutes les possiblités en fonction des informations (quand chaque objet décrit son ensemble où il peut se trouver, sans s'empiler à un autre objet) et de diviser le nombre de cas où il y a une embûche par le nombre de cas total. On utilise alors une fonction qui permet de calculer un trajet de manière personnalisée (on lui fournit une fonction en argument pour savoir quel est le meilleur trajet). Les détails sont fournis dans les nombreux commentaires du code source (et le fichier est bien structuré). Bonne aventure !