Concours de rentrée 2020 - Défi Python du Léviathan !
Posté le 04/11/2020 12:14
Salut à vous, visiteurs occasionnels et habitués de la communauté. Nous vous présentons aujourd'hui la troisième et ultime épreuve de notre événement de rentrée 2020 !
Si tu découvres cet événement maintenant, pas de problème ! Tu peux en lire les modalités dans l'annonce du défi Python de Xuanwu, le tout premier des défis du concours.
Ce concours de rentrée présente trois défis de programmation Python où tu dois optimiser un problème en écrivant un programme pour le résoudre. Les deux premiers étaient surtout mathématiques avec le programme utilisé pour fournir plus que calculer la solution, mais ce troisième est un pur exercice d'algorithmique.
• Le défi de Xuanwu était un exercice de tracé à la tortue (maintenant terminé).
• Le défi de Quetzalcoatl était un exercice de tracé par coordonnées (maintenant terminé).
• Le défi du Léviathan dont il est question dans cet article est un problème d'intelligence artificielle ouvert jusqu'au Dimanche 13 décembre 2020.
Eh oui, tu as bien entendu ! Ce défi fait s'affronter les IAs des participants dans la résolution d'un puzzle. Contrairement aux défis précédents, le programme ne doit pas résoudre une situation, mais doit exploiter les règles du jeu pour gagner le maximum de parties !
Alors voyons ensemble par quelle aventure on en est arrivés là !
Le défi Python du Léviathan
Après avoir découvert une caverne souterraine pleine de traces d'une civilisation ancienne, et traversé un labyrinthe géologique à l'aide d'une excavatrice abandonnée depuis fort longtemps durant le défi du Xuanwu, tu as expérimenté ton baptême de l'air en ballon lorsque l'engin multi-fonctions et toi avez été précipités dans les entrailles du sous-sol. Après avoir navigué avec succès les obstacles de ce défi de Quetzalcoatl, tu débouches enfin sur un volcan, et à court de gaz ta machine compagnon sombre dans la lave.
La longue colonne d'air et de roche autour du cratère comprend plusieurs dizaines de corniches et un certain nombre de tunnels... très certainement connectés par les anciens occupant du lieu. Mais tu n'as aucune idée de si tu peux sortir, et tu peux entendre quelque chose grogner en plus de chauves-souris.
Prise·e de panique, tu consultes la calculatrice que tu tiens toujours dans les mains, et constate que la fidèle excavatrice t'a laissé un ultime script pour t'aider à t'échapper. Le script mentionne qu'une des corniches mène à la surface mais est verrouillée par une clé cachée quelque part dans le volcan, et qu'un monstre appelé Léviathan vit dans les parages. Tu as trouvé un arc et une unique flèche dans l'excavatrice, donc peut-être que tu peux l'abattre... mais c'est un pari risqué.
Ton objectif est de trouver la clé et de sortir du volcan sans tomber dans un trou ni croiser le chemin du Léviathan. Le script possède quelques capteurs qui t'aideront à t'y retrouver :
• Le grognement du Léviathan permet de le détecter s'il est à moins de 2 corniches de toi (sur une voisine, ou une voisine d'une voisine).
• Les émanations d'air chaud permettent de détecter s'il y a un trou parmi les corniches voisines, mais pas où exactement.
• Le métal dans la clé peut aussi être détecte à une corniche de distance.
• Tu ne peux par contre voir la porte de sortir ou la présence de chauve-souris qu'une fois arrivé·e sur chaque corniche.
Les chauves-souris sont malicieuses. Initialement elles dorment, mais quand tu passes sur leur corniche elles se réveillent. Si tu reviens plus tard les déranger, elle sont sont susceptibles de t'attraper et de te déposer sur une corniche voisine pour que tu les laisses tranquilles.
• polycal3.py est la bibliothèque de compatibilité graphique gérant les 13 environnements Python supportés par cette épreuve.
• web.py implémente le volcan et les règles du jeu. À chaque partie le volcan est aléatoire !
• webtest.py est une IA idiote qui décide tout au hasard, pour te servir de point de part dans ta quête.
Ton IA doit prendre la forme d'une fonction ia(corniche, voisines, taille, capteurs, evenements) que tu peux évaluer à l'aide la fonction parcourir_selon() :
from webtest import *
parcourir_selon(ia)
À chaque déplacement, la fonction ia() sera appelée pour te fournir les informations des capteurs :
taille indique le nombre de corniches (fixe) corniche indique la corniche où tu te trouves actuellement (numérotée de 0 à taille-1) voisines est la liste des corniches voisines (où tu peux te déplacer au prochain tour) capteurs spécifie ce que le script sur ta calculatrice détecte.
• capteurs & m_b indique la présence d'une chauve-souris sur la corniche actuelle
• capteurs & (2 * m_b) indique qu'une chauve-souris est prête à se saisir de toi
• capteurs & m_d indique la présence de la porte de sortie sur la corniche actuelle
• capteurs & m_k indique la présence de la clé sur une des corniches voisines
• capteurs & m_p alerte de la présence d'un ou plusieurs puits sur les corniches voisines
• capteurs & m_l alerte de la présence du Léviathan sur une corniche voisine ou une voisine d'une voisine evenements précise ce qui vient de se passer.
• evenements & (2 * m_k) indique que tu as ramassé la clé de la sortie
• evenements & (2 * m_a) indique que tu disposes d'une flèche et es donc capable de tirer
• evenements & (2 * m_l) indique que la flèche que tu as tirée a touché mortellement le Léviathan
La fonction ia() doit retourner deux valeurs pour indiquer ta décision :
• D'abord le numéro d'une corniche voisine.
• Ensuite une action, 0 pour t'y déplacer, 1 pour y tirer ta flèche si tu penses que le Léviathan s'y trouve.
Dans le cas où une chauve-souris se saisit de toi, la réponse est ignorée : la chauve-souris te dépose où lui plaît.
Dans ce défi plus que jamais, tu as le droit d'utiliser tous les outils Python à ta disposition. Cependant, tu ne peux pas modifier web.py, ni accéder à ses variables internes, que ce soit en lecture ou en écriture. Ce serait t'attirer le malheur du Léviathan !
Les IAs seront évaluées sur leur performance dans un grand nombre d'instances fixes. Le but du jeu est de sortir sans dommages et le plus vite possible !
Comment participer
Pour participer, envoie ta participation par mail à l'addresse info@tiplanet.org avec :
• En objet, « Défi du Léviathan »
• Ton adresse postale complète avec ton nom et prénom
• Ton adresse mail (si différente de celle utilisée pour l'envoi)
• En option, ton pseudonyme sur TI-Planet ou Planète Casio (utilisé pour la liste des participants à la fin du concours)
• En option, par pure cosmétique, les badges à afficher dans notre classement à côté de tes participations : l'équipe Planète Casio ou TI-Planet, et la guilde Casio, HP, Lexibook, NumWorks, Symbolibre ou TI.
• Un numéro de téléphone personnel valide (utilisé uniquement en cas d'urgence, notamment en cas de problème avec une participation ou lors d'un choix de lot contraint par le temps)
Les communautés de TI-Planet et Planète Casio sont sensibles aux problématiques d'informations personnelles. Les informations que tu soumets seront utilisées uniquement pour le concours, puis supprimées lorsque l'événement sera terminé et les lots envoyés.
Les participants ayant obtenus les 15 meilleurs scores au défi pourront choisir chacun à leur tour un lot de leur choix.
2 lots Capricorne ♑ comprenant 1 calculatrice Casio Graph 90+E, 1 pack de goodies Casio, 1 goodie Xcas, et 1 pack de goodies TI-Planet & Planète Casio
2 lots Bélier ♈ comprenant 1 solution d'émulation Casio, 1 CD de vidéos Casio fx-CG20 ou catalogue de produits Casio, 1 pack de goodies Casio, 1 goodie Xcas, et 1 pack de goodies TI-Planet & Planète Casio
Le CD contient 42 vidéos d'environ 8 heures par Jean-Michel Ferrard, originellement conçu pour la fx-CG 20 mais toujours applicable à la Graph 90+E, pour Windows et Mac.
La solution d'émulation Casio est au choix parmi :
• Une clé USB 8 Go d'émulation permanente, avec les émulateurs fx-92 Scientifique Collège+, Graph 35+E II 3.30, et Graph 90+E 3.40 à jour, pour Windows. Casio a annoncé que les mises à jour seront disponibles pour ces clefs dans le futur. Le modèle blanc est la clé Transcend 2019, le bleu est la clef EMTEC 2020.
• Une license de 3 ans permettant d'installer le fx-CP400 Manager (Windows/Mac) et le fx-CG 500 Manager (Windows/Mac). Les deux sont similaires à la ClassPad 400+E.
1 lot Serpentaire ⛎ comprenant 1 goodie HP, 1 goodie Xcas et 1 pack de goodies TI-Planète-Casio
La clé USB HP a une capacité de 16 Go, le poster mesure 59.2x40 cm.
3 lots Sagittaire ♐ comprenant 1 calculatrice NumWorks N0110, 1 pack de goodies NumWorks, 1 goodie Xcas, et 1 pack de goodies TI-Planet & Planète Casio
3 lots Balance ♎ comprenant 1 couvercle NumWorks, 1 autocollant NumWorks, 1 enveloppe ou carte postale ou carte de visite-énigme NumWorks, 1 pack de goodies NumWorks, 1 goodie Xcas et 1 pack de goodies TI-Planet & Planète Casio
1 lot Taureau ♉ comprenant 1 calculatrice TI-Nspire CX II-T CAS, 1 licence logiciel TI-Nspire CAS élève, 1 pack de goodies TI, 1 goodie Xcas, et 1 pack de goodies TI-Planète-Casio
1 lot Lion ♌ comprenant 1 calculatrice TI-Nspire CX II-T, 1 licence logiciel TI-Nspire élève, 1 pack de goodies TI, 1 goodie Xcas et 1 pack de goodies TI-Planète-Casio
1 lot Gémeaux ♊ comprenant 1 calculatrice TI-83 Premium CE Edition Python, 1 adaptateur USB, 1 clavier USB, 1 pack de goodies TI et 1 pack de goodies TI-Planète-Casio
1 lot Verseau ♒ comprenant 1 calculatrice TI-83 Premium CE Edition Python avec une gravure texte laser, 1 adaptateur USB, 1 clavier USB
dédié, 1 batterie de rechange, 1 chargeur mural, 1 housse Wyngs, 2 films de protection écran Wyngs dédiés, 1 extension de garantie 6 ans Calcuso, 1 pack de goodies TI et 1 pack de goodies TI-Planète-Casio
La gravure au laser de la TI-83 Premium CE Edition Python du lot Verseau est effectuée par Calcuso. Le gagnant choisissant ce lot devra nous communiquer le texte, dans la limite de 22 caractères et sans caractères spéciaux.
Pour participer sur Graph 35+E II, il faut disposer de la mise à jour vers l'OS 3.30 qui introduit les fonctions de dessin en Python. Pour Graph 90+E, il faut de même avoir la mise à jour vers l'OS 3.40.
Pour transférer les scripts Python, branche ta calculatrice avec un câble USB à l'ordinateur et appuie sur F1 (Flash USB). Ta Graph 35+E II et ta Graph 90+E se présente comme une clé USB à l'ordinateur. Tu peux alors coller les fichiers dans le dossier principal puis éjecter la pseudo-clé USB. Ensuite, lance les scripts depuis l'application Python !
Pour les autres modèles, vois dans l'article TI-Planet. Tu peux participer avec toutes les combinaisons calculatrice/Python suivantes !
• TI-83 Premium CE Edition Python / TI-84 Plus CE-T Python Edition
• Casio Graph 35+E II
• Casio Graph 90+E / fx-CG50
• HP Prime en mode CAS
• HP Prime avec appli Python intégrée (firmware instable, déconseillé)
• NumWorks (y compris Delta et Omega)
• NumWorks avec l'appli KhiCAS en mode Micropython (Delta uniquement)
• NumWorks avec l'appli KhiCAS en mode de compatibilité Python (Delta uniquement)
• TI-Nspire CX II
• TI-Nspire avec Ndless et Micropython
• TI-Nspire CX/CM avec Ndless et Micropython
• TI-Nspire CX avec Ndless et KhiCAS CX, en mode MicroPython ou en mode de compatibilité Python
Pour ce défi, la TI-83 Premium CE Python Edition et la TI-84 Plus CE-T Python Edition ne sont pas supportées. En effet, elles n'offrent que 16 ko de mémoire de travail, ce qui est bien insuffisant pour tout programme un minimum ambitieux.
C'est l'épreuve de programmation ultime que nous te présentons pour cet événement. Attrape ta calculatrice et conquiers le volcan par la stratégie et le croisement de l'information !
Les résultats des deux premiers défis suivront cette annonce. Stay tuned et à bientôt sur Planète Casio !
Bonjour : Me voici avec un autre problème :
Je ne comprends pas comment utiliser le evenements & (2 * m_b)
Lorsque je suis sur une case d'une chauve-souris réveillé, l’évènement ne me dit pas que j'ai été attrapé car mon else est toujours utilisé.
Donc si vous voulez bien m'expliquer, car ça peut être utile
Merci
Les chauve-souris se réveillent après ton passage sur une corniche.
Elles ne se saisiront de toi qu'à ton prochain passage.
De toutes façons il n'est pas obligatoire de traiter ce cas, c'est automatique.
Peu importe l'action que tu renvoies, c'est la chauve-souris qui a la priorité.
Et tu obtiendras dans tous les cas au prochain appel le numéro de corniche sur laquelle elle t'aura déposé.
La clé pour progresser vers des pourcentages de réussite extraordinaires, c'est de stocker l'intégralité du monde exploré dans la mémoire de l'IA, c'est-à-dire un objet de type graphe qui devrait parler aux spécialistes NSI.
A chaque nouvelle information il est alors très facile d'effectuer des déductions positives ou négatives sur les corniches voisines, et voisines de voisines.
Un peu de logique vous permettra même d'aller au-delà.
Mais après entre le 7% de l'IA aléatoire que l'on fournit et 70% il y a tout un monde, vous n'êtes pas obligés de viser directement le plus dur.
Plein de règles logiques simplistes ne nécessitant pas la complexité d'un graphe vous permettront d'atteindre des efficacités très honorables.
Ajouté le 11/11/2020 à 20:32 :
Le cas des IA déclenchant des exceptions dans certains cas était déjà prévu, et ne bloquait pas l'évaluation.
Tout comme celui des IA errant éternellement sans jamais sortir du volcan.
Les IA qui ne répondent pas dans certains cas (boucle/récursion infinie pouvant être accompagnée d'une explosion de la consommation de ressources) sont maintenant elles aussi gérées.
Peu importe, j'adapterai éventuellement le X si cela perturbe les IA non défectueuses.
Le but n'est pas de forcer à optimiser, juste de traiter le cas des boucles infinies itératives ou pire récursives.
Sur la machine de test, toutes les IA non défectueuses évaluées jusqu'à présent passent les 100'000 simulations en moins de 2 heures.
Donc en gros, la norme serait de moins de 0,1s par simulation.
Ajouté le 11/11/2020 à 21:36 :
Histoire de vous motiver à fournir des IA fonctionnelles directement utilisables sans inconvénients par nous ou d'autres, on change légèrement le calcul du score.
On pense à quelque chose comme ça :
- 2 exceptions de l'IA annulent 1 succès (à vous donc de les intercepter au sein de l'IA et d'agir en conséquence pour retourner quelque chose de correct malgré cela)
- 1 non-réponse de l'IA annule 2 succès
Cela ne change exprès rien au classement de ce soir. Mais c'est donc une piste d'amélioration de vos scores à explorer pour les personnes concernées.
On est d’accord que vous retestez toutes les IA avec chaque graine pour qu’elles aient toutes exactement les mêmes cas, sans risque que ça soit la graine qui joue plus que les IA ?
Ah pardon c'était pas clair. La graine dépend du candidat, mais pas de la soumission (ie. un programme soumis par un candidat donnera toujours le même résultat). C'est surtout pour éviter des soumissions copiées ou forkées les unes des autres, ce qu'on a vu parfois dans certaines épreuves, et permettre à plusieurs personnes de soumettre l'IA aléatoire de base sans avoir le même exact score.
Pour le classement final faudra bien tout lancer avec la même graine, surtout si y’en a des très proches… enfin, ce n’est que mon avis, de toute façon je participe pas.
Bien, dans ce cas explique-moi :
- comment classer ceux qui participent avec l'IA passée par un copain, éventuellement après avoir renommé/déplacé des éléments pour dissimuler la chose
- comment classer ceux qui, sans avoir repris une IA fournie, ont codé les mêmes règles logiques, assez envisageable pour ceux qui ne sont pas allés jusqu'à modéliser le graphe au complet
- comment classer ceux qui participent avec l'IA aléatoire fournie par défaut, possibilité que nous avons souhaité ouvrir cette fois-ci pour plus d'accessibilité du concours
Depuis des années nous traitions ces cas en refusant les participations donnant un score déjà soumis, et tu as suffisamment su râler contre ça.
Tu n'as d'ailleurs pas été le seul, mais peu importe.
Nous tentons cette fois-ci une approche différente pour traiter du même problème, tu contestes encore... il faudrait savoir.
Si nous évaluons tout-le-monde avec la même graine, alors c'est le retour à l'invalidation de tous les scores identiques.
Notamment pour ceux dont la meilleure participation est encore avec l'IA par défaut.
Pour éviter cela, il y a donc cette fois-ci une très légère part d'aléatoire.
Je ne vois rien de choquant là-dedans. Quand Casio t'organise un concours sur facebook/twitter/insta, c'est à 100% de l'aléatoire.
Sur 100'000 tirages, il y a extrêmement peu de chances que le classement soit faussé.
Il y a juste les IA identiques dont l'ordre d'arrivée peut varier.
Ajouté le 12/11/2020 à 16:57 :
Comme demandé par plusieurs candidats, petite nouveauté pour vous aider à améliorer vos IA.
Passez le pointeur souris sur l'une des icônes d'échec sur la page de classement, et vous obtenez des infos :
Dans le cas d'une exception, vous obtenez sa description.
Dans tous les cas, vous obtenez également la graine aléatoire permettant de reproduire la dernière situation ayant déclenché le type d'échec en question.
Pour reproduire la chose chez vous, vérifier ou modifier le fichier web.py :
- supprimer l'importation du random ou urandom standard
- et inclure les lignes suivantes en remplacement :
Les informations ne sont pas encore disponibles pour tout-le-monde ni pour toutes les catégories d'échecs ; elles nécessitent de refaire une passe sur l'ensemble des IA reçues.
Elles devraient être complètes d'ici demain soir.
Ajouté le 18/11/2020 à 01:38 :
Histoire de vous suggérer des pistes à explorer, voici ma dernière IA, surnommée la 4x4.
En effet elle gère actuellement 4 stratégies possibles, elles-mêmes envisagées selon 4 niveaux de risque successifs.
Pour vous donner des pistes de réflexion/recherche, voici son schéma de fonctionnement, qui n'est absolument pas la solution optimale, puisque je n'atteins pas 100% et qu'en prime d'autres font mieux que moi :
A chaque coup, elle choisit un chemin possible répondant dans l'ordre aux stratégies suivantes :
- si on a la clé, aller à la sortie
- si la position de la clé est connue, aller ramasser la clé
- aller explorer des corniches marquées comme ayant peut-être la clé
- aller explorer des corniches non visitées
A chaque coup, elle envisage de plus cette série de stratégies au pire 4 fois, selon 4 niveaux de risque successifs :
- 0 : chemin passant uniquement par des corniches sûres
- 1 : si on a encore notre flèche, chemin pouvant passer par des corniches marquées comme abritant peut-être le Léviathan
- 2 : chemin pouvant passer par des corniches abritant des chauves-souris
- 3 : chemin pouvant passer par des corniches dissimulant peut-être un puits ou le Léviathan[/list]
Les chemins choisis sont les plus courts, histoire de minimiser le nombre de coups moyen qui compte au score.
Vous pouvez regarder l'algorithme de Dijkstra (Terminale ES spé Maths), mais je précise le mien est beaucoup moins complexe vu le type de graphe que nous avons ici (comme le score compte le nombre de coups, c'est comme si toutes les corniches étaient à égale distance les unes des autres).
Pour ceux qui explosent la mémoire en explorant le graphe mémorisé lors de leurs déductions et/ou décisions, je donne 2 questions essentielles à vous poser :
- algorithme d'exploration récursif ou itératif ?
- algorithme d'exploration en profondeur ou en largeur ?
Ajouté le 21/11/2020 à 14:19 :
Petit indice pour ceux qui veulent aller encore plus loin.
Vous pouvez faire appel à un langage de programmation logique comme Prolog, histoire de bien faire à chaque étape toutes les déductions positives ou négatives possibles sur l'ensemble du graphe.
En Python vous pouvez exécuter des scripts Prolog en important pyswip.
Il y a aussi la possibilité d'importer pylog, qui à la différence réimplémente totalement un équivalent de Prolog en Python.
Ajouté le 23/11/2020 à 18:40 :
Filoji a écrit : Bonjour : Me voici avec un autre problème :
Je ne comprends pas comment utiliser le evenements & (2 * m_b)
Lorsque je suis sur une case d'une chauve-souris réveillé, l’évènement ne me dit pas que j'ai été attrapé car mon else est toujours utilisé.
Donc si vous voulez bien m'expliquer, car ça peut être utile
Merci
C'était une erreur de documentation.
C'est capteurs & (2 * m_b).
Mais tu peux aussi faire sans, à chaque fois que tu détectes un capteurs & m_b, tu sais qu'à ton prochain passage la chauve-souris de saisira de toi.
Bravo pour tes IAs Critor, c'est très bien expliqué. Et bravo pour vos IAs à tous, avec 78 participations enregistrées sur la page vous n'avez pas chômé.
Je vois que le nombre de participants n'est plus visible sur la page, est-ce volontaire ?
Merci. En regard de la difficulté, je suis relativement satisfait des efforts produits par les participants dans la conception des IA.
Ah, en effet... Non rien de volontaire, et plus touché au code de cette page depuis un moment. Ce doit être un bug, merci pour le signalement, je regarde dès que possible.
Ajouté le 24/11/2020 à 00:20 :
@Lephe
Après vérification rapide, j'ai l'impression que c'est juste dans le mode admin que le script mettant à jour chaque colonne ne marche pas.
Je regarderai plus en détails dès que possible, mais dis toujours si tu confirmes ou pas.
Merci.
Ajouté le 04/12/2020 à 16:31 :
Les scripts ont été mis à jour en version 3.
Normalement ça ne peut qu'améliorer les performances de vos IA, ça supprime des cas impossibles à résoudre sans s'en remettre au hasard des chauves-souris.
Attention, vous n'avez plus qu'une semaine, et c'est encore ultra facile de gagner rien qu'en soumettant l'IA par défaut. En effet, il n'y a pas encore autant de participants classés que de lots. Ce serait dommage de laisser passer ça.
Sinon, les superbes autocollants Xcas ont été reçus :
Ajouté le 13/12/2020 à 20:50 :
Attention, dernière chance ce soir.
Vous pouvez toujours envoyer un courriel sans pièce jointe si vous n'avez pas le temps, vous participerez dans ce cas avec l'IA aléatoire fournie en exemple.
Peut-être malgré tout encore de bonnes surprises lors du choix des lots.
Ajouté le 02/02/2021 à 13:39 :
Notre membre Ena0 vient tout juste de communiquer son choix de lot par SMS, c'est donc terminé pour cette année, merci à tous.
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 08/11/2020 16:41 | #
Bonjour : Me voici avec un autre problème :
Je ne comprends pas comment utiliser le evenements & (2 * m_b)
Lorsque je suis sur une case d'une chauve-souris réveillé, l’évènement ne me dit pas que j'ai été attrapé car mon else est toujours utilisé.
Donc si vous voulez bien m'expliquer, car ça peut être utile
Merci
Citer : Posté le 08/11/2020 19:08 | #
Bonsoir.
Les chauve-souris se réveillent après ton passage sur une corniche.
Elles ne se saisiront de toi qu'à ton prochain passage.
De toutes façons il n'est pas obligatoire de traiter ce cas, c'est automatique.
Peu importe l'action que tu renvoies, c'est la chauve-souris qui a la priorité.
Et tu obtiendras dans tous les cas au prochain appel le numéro de corniche sur laquelle elle t'aura déposé.
Citer : Posté le 08/11/2020 19:12 | #
Oui, j'ai trouvé une alternative, mais juste,
print("Chauve-souris")
ne me print jamais Je ne sais pas si j'ai fait n'importe quoi, mais voilà :P
Citer : Posté le 11/11/2020 12:22 | #
La clé pour progresser vers des pourcentages de réussite extraordinaires, c'est de stocker l'intégralité du monde exploré dans la mémoire de l'IA, c'est-à-dire un objet de type graphe qui devrait parler aux spécialistes NSI.
A chaque nouvelle information il est alors très facile d'effectuer des déductions positives ou négatives sur les corniches voisines, et voisines de voisines.
Un peu de logique vous permettra même d'aller au-delà.
Evaluation en direct de ma dernière IA dès maintenant, a priori déjà dans les 70% de succès alors qu'elle ne tient même pas encore compte des chauve-souris, ce qui me classerait 2ème si j'avais le droit de participer :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=1
Mais après entre le 7% de l'IA aléatoire que l'on fournit et 70% il y a tout un monde, vous n'êtes pas obligés de viser directement le plus dur.
Plein de règles logiques simplistes ne nécessitant pas la complexité d'un graphe vous permettront d'atteindre des efficacités très honorables.
Ajouté le 11/11/2020 à 12:33 :
Nouveau participant n°12. Evaluation automatique de son IA à suivre en direct dès maintenant :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=1
Citer : Posté le 11/11/2020 13:18 | #
Le participant 12 a 34/100000 Simulations... ça va reprendre après le participant 06 ?
Et sinon, c'est pas bien de balancer les techniques des participant :P Mon IA se nomme "Cartographe"
Citer : Posté le 11/11/2020 13:20 | #
Oui, je te la relance dans un moment.
Nouvelle IA du n°6 à suivre, donc :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=0
Ajouté le 11/11/2020 à 20:32 :
Le cas des IA déclenchant des exceptions dans certains cas était déjà prévu, et ne bloquait pas l'évaluation.
Tout comme celui des IA errant éternellement sans jamais sortir du volcan.
Les IA qui ne répondent pas dans certains cas (boucle/récursion infinie pouvant être accompagnée d'une explosion de la consommation de ressources) sont maintenant elles aussi gérées.
Leurs statistiques devraient être à jour d'ici demain; cela ne concerne que le participant n°12 pour le moment :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=1
Pour le moment les cas en question sont comptabilisés comme de simples échecs.
Citer : Posté le 11/11/2020 20:39 | #
Notons qu'elles sont gérées par un timeout, si le programme complet ne se termine pas en X secondes, c'est défaite automatique.
Je ne sais pas combien tu as mis pour X, Critor.
Citer : Posté le 11/11/2020 20:46 | #
Peu importe, j'adapterai éventuellement le X si cela perturbe les IA non défectueuses.
Le but n'est pas de forcer à optimiser, juste de traiter le cas des boucles infinies itératives ou pire récursives.
Sur la machine de test, toutes les IA non défectueuses évaluées jusqu'à présent passent les 100'000 simulations en moins de 2 heures.
Donc en gros, la norme serait de moins de 0,1s par simulation.
Ajouté le 11/11/2020 à 21:36 :
Histoire de vous motiver à fournir des IA fonctionnelles directement utilisables sans inconvénients par nous ou d'autres, on change légèrement le calcul du score.
On pense à quelque chose comme ça :
- 2 exceptions de l'IA annulent 1 succès (à vous donc de les intercepter au sein de l'IA et d'agir en conséquence pour retourner quelque chose de correct malgré cela)
- 1 non-réponse de l'IA annule 2 succès
Cela ne change exprès rien au classement de ce soir. Mais c'est donc une piste d'amélioration de vos scores à explorer pour les personnes concernées.
Et pour savoir si vous êtes concernés, les exceptions et non-réponses de vos IA sont comptabilisées et affichées dans les détails du classement :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=1
Citer : Posté le 12/11/2020 01:30 | #
On est d’accord que vous retestez toutes les IA avec chaque graine pour qu’elles aient toutes exactement les mêmes cas, sans risque que ça soit la graine qui joue plus que les IA ?
Citer : Posté le 12/11/2020 09:17 | #
Avec 100000 tests bon courage pour prouver que les graines sont en faute. Mais oui les graines sont fixes, juste secrètes.
Citer : Posté le 12/11/2020 09:28 | #
C’est en effet totalement improbable, mais pas impossible
Du coup la graine indiquée dans le classement, ça correspond à quoi ?
Citer : Posté le 12/11/2020 10:15 | #
Ah pardon c'était pas clair. La graine dépend du candidat, mais pas de la soumission (ie. un programme soumis par un candidat donnera toujours le même résultat). C'est surtout pour éviter des soumissions copiées ou forkées les unes des autres, ce qu'on a vu parfois dans certaines épreuves, et permettre à plusieurs personnes de soumettre l'IA aléatoire de base sans avoir le même exact score.
Citer : Posté le 12/11/2020 10:27 | #
Pour le classement final faudra bien tout lancer avec la même graine, surtout si y’en a des très proches… enfin, ce n’est que mon avis, de toute façon je participe pas.
Citer : Posté le 12/11/2020 10:39 | #
On a bien réfléchi avec Critor et ce n'est pas l'approche qu'on a choisi. De toute façon il n'y aura pas de telles égalités...
Citer : Posté le 12/11/2020 10:47 | #
@Breizh_craft
Bien, dans ce cas explique-moi :
- comment classer ceux qui participent avec l'IA passée par un copain, éventuellement après avoir renommé/déplacé des éléments pour dissimuler la chose
- comment classer ceux qui, sans avoir repris une IA fournie, ont codé les mêmes règles logiques, assez envisageable pour ceux qui ne sont pas allés jusqu'à modéliser le graphe au complet
- comment classer ceux qui participent avec l'IA aléatoire fournie par défaut, possibilité que nous avons souhaité ouvrir cette fois-ci pour plus d'accessibilité du concours
Depuis des années nous traitions ces cas en refusant les participations donnant un score déjà soumis, et tu as suffisamment su râler contre ça.
Tu n'as d'ailleurs pas été le seul, mais peu importe.
Nous tentons cette fois-ci une approche différente pour traiter du même problème, tu contestes encore... il faudrait savoir.
Si nous évaluons tout-le-monde avec la même graine, alors c'est le retour à l'invalidation de tous les scores identiques.
Notamment pour ceux dont la meilleure participation est encore avec l'IA par défaut.
Pour éviter cela, il y a donc cette fois-ci une très légère part d'aléatoire.
Je ne vois rien de choquant là-dedans. Quand Casio t'organise un concours sur facebook/twitter/insta, c'est à 100% de l'aléatoire.
Sur 100'000 tirages, il y a extrêmement peu de chances que le classement soit faussé.
Il y a juste les IA identiques dont l'ordre d'arrivée peut varier.
Ajouté le 12/11/2020 à 16:57 :
Comme demandé par plusieurs candidats, petite nouveauté pour vous aider à améliorer vos IA.
Passez le pointeur souris sur l'une des icônes d'échec sur la page de classement, et vous obtenez des infos :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=1
Dans le cas d'une exception, vous obtenez sa description.
Dans tous les cas, vous obtenez également la graine aléatoire permettant de reproduire la dernière situation ayant déclenché le type d'échec en question.
Pour reproduire la chose chez vous, vérifier ou modifier le fichier web.py :
- supprimer l'importation du random ou urandom standard
- et inclure les lignes suivantes en remplacement :
rnd_seed = int(sys.argv[1]) if len(sys.argv) > 1 else 0xc0ffee
def rnd():
global rnd_seed
rnd_max = 0x7fff
rnd_seed = (rnd_seed * 214013 + 2531011) % 4294967296
return ((rnd_seed // (2*rnd_max + 1)) & rnd_max)
def random():
return rnd() / 0x7fff
def randint(a,b):
return rnd() % (b-a+1) + a
def choice(l):
return l[randint(0, len(l)-1)]
Sur ordi en ligne de commande, selon la config vous pouvez alors lancer :
python3 script_IA.py graine
Les informations ne sont pas encore disponibles pour tout-le-monde ni pour toutes les catégories d'échecs ; elles nécessitent de refaire une passe sur l'ensemble des IA reçues.
Elles devraient être complètes d'ici demain soir.
Ajouté le 14/11/2020 à 16:20 :
Un participant vous a partagé quelques éléments de scripts pour pouvoir évaluer directement votre IA chez vous sans avoir à la soumettre :
https://tiplanet.org/forum/viewtopic.php?f=49&t=24387&p=257471#p257471
Ajouté le 18/11/2020 à 01:38 :
Histoire de vous suggérer des pistes à explorer, voici ma dernière IA, surnommée la 4x4.
En effet elle gère actuellement 4 stratégies possibles, elles-mêmes envisagées selon 4 niveaux de risque successifs.
Pour vous donner des pistes de réflexion/recherche, voici son schéma de fonctionnement, qui n'est absolument pas la solution optimale, puisque je n'atteins pas 100% et qu'en prime d'autres font mieux que moi :
A chaque coup, elle choisit un chemin possible répondant dans l'ordre aux stratégies suivantes :
- si on a la clé, aller à la sortie
- si la position de la clé est connue, aller ramasser la clé
- aller explorer des corniches marquées comme ayant peut-être la clé
- aller explorer des corniches non visitées
A chaque coup, elle envisage de plus cette série de stratégies au pire 4 fois, selon 4 niveaux de risque successifs :
- 0 : chemin passant uniquement par des corniches sûres
- 1 : si on a encore notre flèche, chemin pouvant passer par des corniches marquées comme abritant peut-être le Léviathan
- 2 : chemin pouvant passer par des corniches abritant des chauves-souris
- 3 : chemin pouvant passer par des corniches dissimulant peut-être un puits ou le Léviathan[/list]
Les chemins choisis sont les plus courts, histoire de minimiser le nombre de coups moyen qui compte au score.
Vous pouvez regarder l'algorithme de Dijkstra (Terminale ES spé Maths), mais je précise le mien est beaucoup moins complexe vu le type de graphe que nous avons ici (comme le score compte le nombre de coups, c'est comme si toutes les corniches étaient à égale distance les unes des autres).
Pour ceux qui explosent la mémoire en explorant le graphe mémorisé lors de leurs déductions et/ou décisions, je donne 2 questions essentielles à vous poser :
- algorithme d'exploration récursif ou itératif ?
- algorithme d'exploration en profondeur ou en largeur ?
Avec tout ceci je passe en gros de 70% à 75% de succès :
https://tiplanet.org/concours_rentree2020.php?delta=0&infos=1&worse=1&invalid=1
Ajouté le 21/11/2020 à 14:19 :
Petit indice pour ceux qui veulent aller encore plus loin.
Vous pouvez faire appel à un langage de programmation logique comme Prolog, histoire de bien faire à chaque étape toutes les déductions positives ou négatives possibles sur l'ensemble du graphe.
En Python vous pouvez exécuter des scripts Prolog en important pyswip.
Il y a aussi la possibilité d'importer pylog, qui à la différence réimplémente totalement un équivalent de Prolog en Python.
Ajouté le 23/11/2020 à 18:40 :
Bonjour : Me voici avec un autre problème :
Je ne comprends pas comment utiliser le evenements & (2 * m_b)
Lorsque je suis sur une case d'une chauve-souris réveillé, l’évènement ne me dit pas que j'ai été attrapé car mon else est toujours utilisé.
Donc si vous voulez bien m'expliquer, car ça peut être utile
Merci
C'était une erreur de documentation.
C'est capteurs & (2 * m_b).
Mais tu peux aussi faire sans, à chaque fois que tu détectes un capteurs & m_b, tu sais qu'à ton prochain passage la chauve-souris de saisira de toi.
Citer : Posté le 23/11/2020 20:21 | #
Bravo pour tes IAs Critor, c'est très bien expliqué. Et bravo pour vos IAs à tous, avec 78 participations enregistrées sur la page vous n'avez pas chômé.
Je vois que le nombre de participants n'est plus visible sur la page, est-ce volontaire ?
Citer : Posté le 24/11/2020 00:11 | #
Merci. En regard de la difficulté, je suis relativement satisfait des efforts produits par les participants dans la conception des IA.
Ah, en effet... Non rien de volontaire, et plus touché au code de cette page depuis un moment. Ce doit être un bug, merci pour le signalement, je regarde dès que possible.
Ajouté le 24/11/2020 à 00:20 :
@Lephe
Après vérification rapide, j'ai l'impression que c'est juste dans le mode admin que le script mettant à jour chaque colonne ne marche pas.
Je regarderai plus en détails dès que possible, mais dis toujours si tu confirmes ou pas.
Merci.
Citer : Posté le 24/11/2020 09:02 | #
Ah, c'est exact. Maintenant que tu le mentionnes j'ai remarqué aussi que je ne me fais plus rediriger quand j'utilise l'URL admin, ça doit être lié.
Citer : Posté le 28/11/2020 13:19 | #
@Lephe' je pense avoir corrigé ça. Merci de confirmer.
Citer : Posté le 28/11/2020 13:20 | #
Tout est bon, merci beaucoup.
Citer : Posté le 28/11/2020 15:03 | #
Merci.
Ajouté le 04/12/2020 à 16:31 :
Les scripts ont été mis à jour en version 3.
Normalement ça ne peut qu'améliorer les performances de vos IA, ça supprime des cas impossibles à résoudre sans s'en remettre au hasard des chauves-souris.
Attention, vous n'avez plus qu'une semaine, et c'est encore ultra facile de gagner rien qu'en soumettant l'IA par défaut. En effet, il n'y a pas encore autant de participants classés que de lots. Ce serait dommage de laisser passer ça.
Sinon, les superbes autocollants Xcas ont été reçus :
Ajouté le 13/12/2020 à 20:50 :
Attention, dernière chance ce soir.
Vous pouvez toujours envoyer un courriel sans pièce jointe si vous n'avez pas le temps, vous participerez dans ce cas avec l'IA aléatoire fournie en exemple.
Peut-être malgré tout encore de bonnes surprises lors du choix des lots.
Ajouté le 07/01/2021 à 20:59 :
Bravo Filoji, c'est à ton tour, il nous reste encore plein de superbes lots pour toi :
https://tiplanet.org/forum/viewtopic.php?f=49&t=24387&p=258470#p258470
Ajouté le 08/01/2021 à 00:50 :
Merci.
@Tituya, à toi :
https://tiplanet.org/forum/viewtopic.php?f=49&t=24387&p=258477#p258477
Ajouté le 24/01/2021 à 21:15 :
Et donc @CaptainLuigi, à toi de venir clôturer la distribution :
https://tiplanet.org/forum/viewtopic.php?f=49&t=24387&p=258768#p258768
Ajouté le 25/01/2021 à 13:10 :
@Ena0, c'est à toi de choisir maintenant :
https://tiplanet.org/forum/viewtopic.php?f=49&t=24387&p=258768#p258768
Ajouté le 02/02/2021 à 13:39 :
Notre membre Ena0 vient tout juste de communiquer son choix de lot par SMS, c'est donc terminé pour cette année, merci à tous.