Voir le sujet précédentAller en basVoir le sujet suivant
FGadrat
FGadrat
Je viens de m'inscrire !

Génération de devoirs individualisés avec valeurs numériques aléatoires Empty Génération de devoirs individualisés avec valeurs numériques aléatoires

par FGadrat Sam 6 Mai 2023 - 21:45
Bonjour à tous,

J'ai créé un script qui permet de modifier de manière automatique les valeurs numériques dans un DM et je me suis dit que j'allais partager, peut être que ça intéressera quelqu'un. J'ai fait un github :

https://github.com/fgadrat/Homework_Randomizer

J'avais ce projet depuis un moment et j'ai enfin eu le courage de m'y mettre, ainsi que l'aide considérable de ChatGPT qui mérite d'être cité comme contributeur. Le but n'est pas seulement d'empêcher les élèves de tricher, même si c'est une conséquence bienvenue, mais aussi de leur permettre de travailler ensemble. Le copain peut lui montrer le calcul qu'il a fait, expliquer la méthode, mais il faut quand même que l'élève fasse son calcul puisque c'est pas le même. Un collègue me disait que ça pourrait être sympa pour pondre des masses d'exercices de bachotage aussi.

Le principe c'est que vous prenez un de vos DM fait en LaTeX qui va vous servir de modèle, vous changez les valeurs que vous voulez randomizer par {v1}, {v2},... etc. Le script python passe sur le modèle, remplace les valeurs, créé un nouveau fichier .tex et le compile en un pdf nominatif pour l'élève. Quand il a fait tous les élèves, il fusionne tous les pdf en un seul pdf pour toute la classe, il n'y a plus qu'à photocopier.

Comme on peut changer tous les paramètres qu'on veut, ce n'est pas juste les valeurs numériques. Je me suis amusé à faire des graphiques individualisés ou à ajouter des lignes pour simplifier un calcul uniquement quand il est simplifiable. Mais bon, ça peut finir par devenir compliqué.
VinZT
VinZT
Doyen

Génération de devoirs individualisés avec valeurs numériques aléatoires Empty Re: Génération de devoirs individualisés avec valeurs numériques aléatoires

par VinZT Sam 6 Mai 2023 - 22:00
Voilà qui a l'air bigrement intéressant, dès que j'aurai du temps devant moi, faudra que je regarde !

Merci pour le partage.

_________________

« Il ne faut pas croire tout ce qu'on voit sur Internet » Victor Hugo.
« Le con ne perd jamais son temps. Il perd celui des autres. » Frédéric Dard
« Ne jamais faire le jour même ce que tu peux faire faire le lendemain par quelqu'un d'autre » Pierre Dac
« Je n'ai jamais lâché prise !» Claude François
« Un économiste est un expert qui saura demain pourquoi ce qu'il avait prédit hier ne s'est pas produit aujourd'hui. » Laurence J. Peter
floflo1010
floflo1010
Niveau 6

Génération de devoirs individualisés avec valeurs numériques aléatoires Empty Re: Génération de devoirs individualisés avec valeurs numériques aléatoires

par floflo1010 Dim 7 Mai 2023 - 5:50
Merci. Cela a l'air génial.
Eliette
Eliette
Niveau 9

Génération de devoirs individualisés avec valeurs numériques aléatoires Empty Re: Génération de devoirs individualisés avec valeurs numériques aléatoires

par Eliette Dim 7 Mai 2023 - 6:44
Je vais regarder, ça parait intéressant !
Mais est-ce que les valeurs numériques sont absolument random ou bien dans une gamme à définir ? En physique on doit respecter un certain rapport à la réalité...
FGadrat
FGadrat
Je viens de m'inscrire !

Génération de devoirs individualisés avec valeurs numériques aléatoires Empty Re: Génération de devoirs individualisés avec valeurs numériques aléatoires

par FGadrat Dim 7 Mai 2023 - 21:09
Tu fais comme tu veux pour les valeurs. T'utilises le code Python pour générer la valeur. De bases j'ai mis des entiers entre 1 et 10 dans les valeurs, mais l'idée c'est que tu vas dans le script Python là où sont générées les valeurs et tu fais les calculs. LaTeX fait pas de calculs, donc tu les fais sous Python et le script place le résultat dans ton document LaTeX a sa place.
Ce n'est pas du tout obligé d'être des valeurs aléatoires, ça peut être un calcul (important pour faire le corrigé) ou même être du texte.

Imaginons par exemple que tu veuilles faire résoudre une équation du second degré. Dans ton template de corrigé tu pourrais avoir :

Code:
Pour résoudre l'équation ${v1}x^2+{v2}x +{v3}=0$ on calcule son discriminant\\
$\Delta=({v2})^2-4({v1})({v3})={v4}{v5}

Et dans le script Python tu auras alors quelque chose comme :
Code:

v[1]=random.randint(1, 15)
v[2]=random.randint(1, 15)
v[3]=random.randint(1, 15)
a, b, c = v[1], v[2], v[3]
v[4]=b**2-4*a*c
delta = v[4]
if delta>0:
   x1=round((-b+sqrt(delta))/(2*a),3)
   x2=round((-b-sqrt(delta))/(2*a),3)
   v[5]=f'>0$ donc l\'équation admet deux solutions {x1} et {x2}.'
elif delt==0:
   x0=round(-b/(2*a),3)
   v[5]=f'=0$ donc l\'équation admet une solution double {x0}.'
else:
   v[5]='<0$ donc l\'équation n\'admet pas de solution.'

Comme ça les variables v1, v2 et v3 sont des entiers aléatoires entre 1 et 15. Python calcule le discriminant et place le résultat dans v4. v5 est le texte de conclusion. Je renomme mes variables au milieu du script pour plus de lisibilité.

J'aurais tout aussi bien pu faire que v1, v2 et v3 soit négatifs ou même des réels. Mais faut faire un peu plus attention aux différents cas. Comme j'ai mis
${v1}x^2+{v2}x +{v3}=0$
dans mon modèle LaTeX, si je laisse v2 et v3 être négatifs, je vais me retrouver avec des devoirs qui vont ressembler à 3x²+-5x+12=0 parce qu'il aura remplacé {v2} par "-5" et qu'il y avait un + avant. Ça peut se résoudre avec quelques "if" pour les différents cas, où restreindre le champ des variables aléatoires.

Ça peut devenir aussi compliqué que tu veux (mais on peut rester plus simple aussi). Et une autre façon de gérer le problème est d'imposer des conditions sur ta génération de variable. Au lieu de faire trois cas pour les valeurs du discriminant, j'aurais pu garantir que le discriminant soit positif et ne faire qu'un seul cas :

Code:
while true:
   a, b, c = random.randint(1, 15), random.randint(1, 15), random.randint(1, 15)
   delta=b**2-4*a*c
   if delta>0:
       break
v[1], v[2], v[3], v[4]= a, b, c, delta
x1, x2 = round((-b+sqrt(v[4]))/(2*a),3), round((-b-sqrt(v[4]))/(2*a),3)
v[5]=f'>0$ donc l\'équation admet deux solutions {x1} et {x2}.'

Comme ça, je garantis que j'ai choisi des valeurs aléatoires qui respectent mes conditions, puisque je lui dis de refaire le tirage tant que c'est pas bon.
FlorentGDG
FlorentGDG
Niveau 5

Génération de devoirs individualisés avec valeurs numériques aléatoires Empty Re: Génération de devoirs individualisés avec valeurs numériques aléatoires

par FlorentGDG Mar 9 Mai 2023 - 9:51
Salut,
autre solution, peut-être plus accessible, créer ton DM sur un traitement de texte, créer une liste de valeurs sur un tableur (avec des fonctions Randomize) et faire du publipostage?
Voir le sujet précédentRevenir en hautVoir le sujet suivant
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum