Forums » Utilisation d'AMC (french) »
AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles
Added by Nizar MOUSSATAT almost 2 years ago
Bonjour
Après la compilation finale, ces fichiers sont différents. Lorsque les questions sont ouvertes, cela n'a pas d'importance, mais dans mon cas j'ai crée des questions ou les bonnes réponses sont générées par pythontex.
Seul le sujet numéro 1 est conforme.
Les suivants ont choisi un tirage aléatoire différent.
La présence de random.seed dans le code ne change rien.
Ceci empêche la correction automatique de questions programmées. Avez-vous une solution à ce problème ?
Je joins le dossier test, et les fichier doc.
DOC-sujet.pdf (189 kB)
DOC-indiv-solution.pdf (189.1 kB)
Replies (10)
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Nizar MOUSSATAT almost 2 years ago
Le dossier complet
2ABC-Evaluation-TEST.7z (710.9 kB)
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Frédéric Bréal almost 2 years ago
%%AMC:preprocess_command=/chemin/vers/fichier/prePythonTex4AMC
Le chemin absolu est nécessaire, il me semble et pas relatif.
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Frédéric Bréal almost 2 years ago
ma réponse n'est pas adapté car ici le ./prePythonTex4AMC fonctionne
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Stefan DEGROOTE almost 2 years ago
Bonjour,
vos sujets sont différents à cause de la fonction "choices" qui ne semble pas réagir exactement de la même façon entre la compilation du sujet et celle du corrigé. J'ai déjà été confronté au problème il y a quelques années déjà. Pour info, la commande python shuffle, elle-aussi, pose problème comme d'autres j'imagine sans que je comprenne pourquoi.
J'ai résolu le problème en me créant des fonctions personnelles qui ont le même rôle.
Par exemple,
dans la partie pycode, j'importe numpy avec : import numpy as np
j'importe random avec : from random import*
Ensuite, si je veux par exemple mélanger une liste, j'utilise la fonction python np.random.randint(a,b) qui tire au hasard un entier entre a inclus et b exclu. Cette fonction, elle, a le même comportement entre les compilations du sujet et de la correction. Toutes les fonctions que j'ai créées utilise cette instruction np.random.randint(a,b)
Cela a résolu le souci que j'avais et que vous avez aussi.
Essayez de voir cette solution directement dans votre code car il est un peu trop morcelé entre plusieurs fichiers pour que je puisse faire un test.
N'hésitez pas à me contacter si besoin, j'ai plein de sujets AMC-PythonTeX pour les maths au lycée.
Bonne soirée.
Stefan
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Stefan DEGROOTE almost 2 years ago
Pour compléter, un exemple d'une fonction qui mélange une liste :
def melangeliste(L):
rep = []
while len(L) > 0:
position = np.random.randint(0,len(L))
rep.append(L[position])
L.pop(position)
return rep
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Nizar MOUSSATAT almost 2 years ago
Super d'avoir partagé cette indication. J'ai regardé le module numpy, et il a un choice propre à lui. En mettant dans le pycode :
rng = numpy.random.default_rng(12345)
Puis dans les codes de l'exercices :
rng.choice(['<','>','<=','>='])
et au lieu de choices:
rng.choice(['<','<='],size=2)
cela donne des fichiers corrects. C'est compatible AMC.
DOC-indiv-solution.pdf (220.7 kB)
DOC-sujet.pdf (220.6 kB)
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Alexis Bienvenüe almost 2 years ago
vos sujets sont différents à cause de la fonction "choices" qui ne semble pas réagir exactement de la même façon entre la compilation du sujet et celle du corrigé.
C'est exactement ça : pour fonctionner, AMC compile à plusieurs reprise votre sujet et il est absolument nécessaire qu'à chaque fois cela donne le même résultat.
Or les fonctions python de random
donnent des valeurs différentes à chaque exécution…
Pour éviter ce problème, vous pouvez fixer la graine du générateur aléatoire utilisé par python, avant toute utilisation d'une fonction de random
, grâce à la commande
random.seed(12345)
Si vous changez la valeur en argument, vous obtiendrez un sujet différent, mais si vous compilez le sujets plusieurs fois avec la même valeur de cette graine, vous obtiendrez toujours le même sujet.
Il me semble que la fonction melangeliste
proposée plus haut a le même comportement, sauf, encore une fois, si on prend soin de fixer la graine utilisée par numpy
(attention : numpy.random
a l'air d'utiliser un autre générateur que random
) avec
np.random.seed(12345)
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Stefan DEGROOTE almost 2 years ago
Bonjour,
pour compléter mon message précédent, je fixe toujours une graine du style np.random.seed(12345) dans mon code Python. Malgré cela, le comportement de fonctions telles que choice ou shuffle reste aléatoire et ne donne pas de sujets identiques malgré la graine ... alors que des codes comme ma fonction melangeliste, elle, fonctionne et donne toujours le même résultat suite aux différentes compilations.
Je ne sais vraiment pas pourquoi ... mais en ayant trouvé la "parade", je ne cherche pas plus loin.
Pour info, je génére mes sujets à partir d'un fichier csv ... peut-être en est-ce une des raisons.
Bonne journée et bonnes fêtes de fin d'année.
Stefan
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Alexis Bienvenüe almost 2 years ago
Malgré cela, le comportement de fonctions telles que choice ou shuffle reste aléatoire
C'est bizarre. Pouvez-vous donner un exemple complet minimal de ce comportement ?
Utilisez-vous random.choice
ou bien np.random.choice
? random.seed
ou bien np.random.seed
? Les deux modules n'ont pas le même générateur aléatoire.
RE: AMC + Pythontex : fichier DOC-SUJET et DOC-INDIV-SOLUTIONS sont incompatibles - Added by Stefan DEGROOTE almost 2 years ago
Bonjour Alexis,
je viens de faire quelques tests dans un projet. En effet, il y a une sacrée différence entre les deux instructions choice et np.random.choice.
Je choisis une graine avec np.random.seed(...)
Si je choisis juste choice, les sujets et corrections sont différentes ;
Si je choisis np.random.choice, les sujets et corrections sont bien identiques.
Je ne pensais pas, vu le nom identique de ces deux fonctions, qu'elles étaient différentes dans leurs fonctionnement. Cela explique pourquoi j'ai pu résoudre ce problème avec l'instruction np.random.randint(...) qui semble agir comme np.random.choice(...)
Il n'est jamais trop tard pour apprendre un truc. Ça simplifiera mes prochains projets.
Merci pour l'explication et le support toujours pertinent.
Bonne fêtes de fin d'année.
Stefan
(1-10/10)