π
<-
Chat plein-écran
[^]

Concours de rentrée 2020 - défi Python du Léviathan

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude critor » 17 Nov 2020, 23:15

Histoire de vous réveiller, je lance ma dernière IA. :)

Elle dispose de 4 niveaux progressifs de risque, et commence à tenir compte des chauves-souris : ;)
https://tiplanet.org/concours_rentree20 ... &invalid=1
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41496
Images: 14632
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude Afyu » 17 Nov 2020, 23:26

critor a écrit:Histoire de vous réveiller, je lance ma dernière IA. :)

Elle dispose de 4 niveaux progressifs de risque, et commence à tenir compte des chauves-souris : ;)
https://tiplanet.org/concours_rentree20 ... &invalid=1


Et directement 76 % de réussite. Mais quel talent !! :D
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 90.8%
 
Messages: 350
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude critor » 18 Nov 2020, 01:31

Merci. :)

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 : ;)
Image

A chaque coup, elle choisit un chemin possible répondant dans l'ordre aux stratégies suivantes :
  1. si on a la clé et que l'on a trouvé la porte, aller à la sortie
  2. si la position de la clé est connue, aller ramasser la clé
  3. aller explorer des corniches marquées comme ayant peut-être la clé
  4. 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

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_rentree20 ... &invalid=1
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41496
Images: 14632
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude Pavel » 18 Nov 2020, 02:31

critor a écrit: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).


Je pense que l'algorithme de remplissage par diffusion (flood fill) est facile à implémenter et fonctionne très bien pour ce défi. Voici une vidéo avec une explication de cet algorithme:
https://www.youtube.com/watch?v=Zwh-QNlsurI
Avatar de l’utilisateur
PavelPremium
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 83.6%
 
Messages: 107
Inscription: 19 Sep 2018, 10:50
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude cent20 » 18 Nov 2020, 08:44

citorva a écrit:Voici un script de benchmark que j'ai crée.

(...)

Le script bench.py peut s'appeler sans argument ou avec les arguments dans cet ordre:

  • nom du module sans l'extension (par defaut web_test). Une fonction init est nécessaire et veuillez retirer la ligne parcourir_selon(ia)


Bon je ne sais pas quoi faire. "Une fonction init "
Je met quoi dans cette fonction, je la met où ?

Le reste j'ai compris je pense.

Code: Tout sélectionner
module = sys.argv[1] if len(sys.argv) > 1 else "webtest5"


car je suis en train de travailler sur un fichier nommé webtest5.py
J'ai bien le message :

[url]AttributeError: module 'webtest5' has no attribute 'init'[/url]

Mais quoi faire ? Que copier ? Où le copier ?

J'ai bien neutralisé la ligne :

Code: Tout sélectionner
# parcourir_selon(ia, 0)


Mon problème est bien avec la fonction init .
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude critor » 18 Nov 2020, 11:24

Dans notre version du script, nous souhaitions justement t'éparger la problématique du init().

Tu dois donc y créer/vider/initialiser toutes les variables globales utilisées par ton IA.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41496
Images: 14632
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude cent20 » 18 Nov 2020, 12:21

critor a écrit:Dans notre version du script, nous souhaitions justement t'éparger la problématique du init().

Tu dois donc y créer/vider/initialiser toutes les variables globales utilisées par ton IA.


Merci pour ta réponse rapide Critor.
Mon script étant toufu, je suis reparti du script de base, j'ai crée un webtest.py contenant juste le code IA par défaut :

Code: Tout sélectionner
def init():
    pass # je n'ai crée ni utilisé aucune variable globale

def ia(corniche, voisines, taille, capteurs, evenements):
  # Nous sommes dans un cratere de volcan.
  # Il y a un nombre {taille} de corniches.
  # Les corniches sont numerotees de 0 a {taille - 1}.

  # Nous sommes sur la corniche numero {corniche}.
  if capteurs & m_b:
    # Une chauve-souris dort sur cette corniche. Elle se reveillera des que tu
    # seras parti.e au prochain tour !
    pass
  if capteurs & m_d:
    # Cette corniche donne sur la porte de sortie.
    pass
  if capteurs & m_p:
    # Une des corniches voisines dissimule un puits. Progresse prudemment !
    pass
  if capteurs & m_k:
    # Une des corniches voisines emet de la lumiere. La cle de la sortie doit
    # y etre !
    pass
  if capteurs & m_l:
    # Le Leviathan gronde. Il est a 2 pas ou moins d'ici. S'il n'est pas dans
    # une des corniches voisines, il est sur une voisine d'une voisine...
    pass
  if evenements & (2 * m_k):
    # Bravo, tu as trouve la cle de la porte de sortie !
    pass
  if evenements & (2 * m_a):
    # Tu peux tirer une fleche vers une des corniches voisines.
    pass
  if evenements & (2 * m_l):
    # Le Leviathan a ete touche mortellement, il ne pose plus de danger !
    pass
  if evenements & (2 * m_b):
    # Une chauve-souris t'as attrape.e, et t'emmene sur une autre corniche
    # sans te demander ton avis. Tu ne peux pas choisir ta destination !
    return None, 0

  # renvoie 2 valeurs :
  # * la corniche choisie parmi les voisines
  # * l'action relative desiree :
  #   - 0 pour aller sur cette corcniche
  #   - 1 pour tirer une fleche vers cette corcniche
  return voisines[randint(0, len(voisines) - 1)], 0


Puis j'ai lancé bench.py

Code: Tout sélectionner
module = sys.argv[1] if len(sys.argv) > 1 else "webtest"


cela ne bloque plus comme avant mais j'ai ce vilain message :

name 'm_b' is not defined


J'ai l'impression que j'y suis presque, et que cela sera plus pratique qu'une VM sur linux ...
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude critor » 18 Nov 2020, 13:02

m_b est défini dans web.py.

Il te faut donc l'importer.
Mais tu peux aussi en copier la définition à l'identique, peu importe.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41496
Images: 14632
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude cent20 » 18 Nov 2020, 14:11

Bon j'ai tout recommencé de 0, arrivez-vous à faire fonctionner le script de citorva sur windows ?

Mon protocole sur win 10 :

1. Dans un nouveau dossier je crée 3 fichiers .py : bench.py, web.py, web_test.py
2. Le fichier bench.py contient un copié / collé identique du codede citorva
3. Le fichier web.py contient un copié / collé identique du codede citorva, car il a été optimisé pour fonctionner avec bench
4. Le fichier web_test.py contient l'IA de base avec la fonction init().

Compte tenu des copié / collé identique, je ne met ici que le fichier web_test.py
Code: Tout sélectionner
def init():
  pass

def ia(corniche, voisines, taille, capteurs, evenements):
  # Nous sommes dans un cratere de volcan.
  # Il y a un nombre {taille} de corniches.
  # Les corniches sont numerotees de 0 a {taille - 1}.

  # Nous sommes sur la corniche numero {corniche}.
  if capteurs & m_b:
    # Une chauve-souris dort sur cette corniche. Elle se reveillera des que tu
    # seras parti.e au prochain tour !
    pass
  if capteurs & m_d:
    # Cette corniche donne sur la porte de sortie.
    pass
  if capteurs & m_p:
    # Une des corniches voisines dissimule un puits. Progresse prudemment !
    pass
  if capteurs & m_k:
    # Une des corniches voisines emet de la lumiere. La cle de la sortie doit
    # y etre !
    pass
  if capteurs & m_l:
    # Le Leviathan gronde. Il est a 2 pas ou moins d'ici. S'il n'est pas dans
    # une des corniches voisines, il est sur une voisine d'une voisine...
    pass
  if evenements & (2 * m_k):
    # Bravo, tu as trouve la cle de la porte de sortie !
    pass
  if evenements & (2 * m_a):
    # Tu peux tirer une fleche vers une des corniches voisines.
    pass
  if evenements & (2 * m_l):
    # Le Leviathan a ete touche mortellement, il ne pose plus de danger !
    pass
  if evenements & (2 * m_b):
    # Une chauve-souris t'as attrape.e, et t'emmene sur une autre corniche
    # sans te demander ton avis. Tu ne peux pas choisir ta destination !
    return None, 0

  # renvoie 2 valeurs :
  # * la corniche choisie parmi les voisines
  # * l'action relative desiree :
  #   - 0 pour aller sur cette corcniche
  #   - 1 pour tirer une fleche vers cette corcniche
  return voisines[randint(0, len(voisines) - 1)], 0

# parcourir_selon(ia)


5. Je lance alors l'exécution de bench.py j'ai le message d'erreur "name 'm_b' is not defined"
6. Le fichier bench.py importe portant le fichier web de citorva :
Code: Tout sélectionner
import web

7. Le fichier web de citorva contient pourtant la bonne déclaration :
Code: Tout sélectionner
m_p, m_l, m_k, m_b, m_d, m_a, m_m = 1, 4, 16, 64, 256, 1024, 4096


8.a Si je rajoute
Code: Tout sélectionner
from web import *
au début de web_test.py je pars dans une boucle sans fin.
pygame se charge et reste noir.

ou

8.b Si je modifie ma fonction init() pour y mettre ceci :

Code: Tout sélectionner
def init():
  global m_p, m_l, m_k, m_b, m_d, m_a, m_m
  m_p, m_l, m_k, m_b, m_d, m_a, m_m = 1, 4, 16, 64, 256, 1024, 4096


J'ai le message "name 'randint' is not defined" ce qui me semble normal, aucun fichier n'a importé la fonction randint.

9. Ma question est alors : Pourquoi ça marche sur linux et pas sur windows ? Qu'est ce que j'ai raté ?
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Concours de rentrée 2020 - défi Python du Léviathan

Message non lude cent20 » 18 Nov 2020, 16:39

Inutile de me répondre, le coupable est windows 10.
En neutralisant la couche graphique, le benchmark marche, il est utilisable par tous.
Je fais un rendu console et je poste ici le script d'évaluation de citorva avec un rendu texte.
Cela sera utilisable par un grand débutant. Oui oui comme moi je sais :?
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

PrécédenteSuivante

Retourner vers News Divers

Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot] et 124 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1380 utilisateurs:
>1349 invités
>25 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)