Bonjour,
Je suis en train de développer un prg qui calcule toutes les combinaisons de jeu d'une partie de belote : jeu à 4 mains de 8 cartes.
J'ai actuellement amené mon programme à traiter les cas avec 6 cartes.
Ce traitement prends quand même 150 secondes et l'occupation mémoire atteint les 200 Mo (estimé avec le gestionnaire des taches windows et 100%du CPU).
6 cartes génèrent entre 600 000 et 1 000 000 des cas possibles.
J'estime que pour 8 cartes je devrais tendre vers les 2/3 milions de cas
Avec ma progammation j'atteint donc les limites du raisonnable.
J'ai travaillé avec des listes de listes:
1 qui contient les plis de 4 cartes
1 qui contient les différents cas, ex : [1,12,150,8000,125000] : la liste représente un cas et les chiffres sont les index des pli correspondant à ce cas dans la liste jeu.pli
Pour établir ces cas je travaille par ittération :
1 - 4 jeu de 8 cartes génères n cas :
1ère carte
2 ème carte : appel à un fonction qui dit si ce cas est possible en fonction des règles
3 ème et 4ème cartes appel à la fonction de vérif des règles
si on arrive au bout du tour c'est que c'est un cas qui respecte les règles donc 'a retenir' on ajoute le pli dans liste'pli' et on crée le cas dans liste 'cas'
2- on reprends 1 par 1 les mains restantes de chaque cas et on recroise les jeux
etc...
j'utilise donc beaucoup de if elif ...de boucle, de append, de copie de liste.
Ma question (enfin...) est :
Avez-vous des conseils sur des pratiques, des modules de Python à utiliser me permettant de réduire nettement les temps de calcul et espace mémoire utilisé ?
numarray apporterait-il un gain important ?
il me faudrait pratiquement des gains par facteur 10 !
Merci
Partager