Accueil › Forums › Programmation WIMS › Programmation d’exercices OEF › Peut-on vérifier une réponse OEF avec maxima ?
- Ce sujet contient 12 réponses, 3 participants et a été mis à jour pour la dernière fois par boud, le il y a 10 années et 6 mois.
-
AuteurMessages
-
-
19 mai 2014 à 22:56 #2184boudParticipant::
Est-il possible dans un exercice createxo (en format oef) de vérifier
la réponse avec maxima?Mon idée est de présenter un calcul symbolique
suffisamment compliqué (en nombre de paramètres aléatoires et dans sa
structure algébrique) afin que l’étudiant-e doive comprendre la
méthode mathématique/physique plutôt qu’apprendre une réponse par
coeur. Mais dans ce cas, le nombre de formes de réponse correcte est
grand. Si la complexité, dans le sens du nombre de façons à présenter
la réponse, est N, j’ai peur que le nombre de familles de façon
d’exprimer la même réponse (au sens mathématique) soit d’ordre de N!.
Ce qui est évidemment impossible à mettre dans un fichier OEF si
N >= 5 (et déjà lourd à faire si N=4).S’il n’est pas possible de vérifier la réponse avec maxima, par ex.,
\answer{1. La reponse}{\theanswer}{type=maxima}
on serait obligé (dans le cadre de format createxo/OEF), il me semble,
de rester avec les quesions plutôt simples, et/ou de donner des très longues
listes de réponses possibles.Voilà deux exemples (simplifiés – les vraies questions arrivent à ces
expressions après quelques manipulations algébriques/différentielles).
Dans question 1, je préférerais que les nombres avec un point décimal
(système anglophone) soient acceptés. Dans question 2, je suppose que
certain-e-s étudiant-e-s vont oublier que 1/tan(x) peux s’écrire
cot(x). Dans les deux cas, passer la réponse de l’étudiant-e à maxima
avec un test commemaxima(\responseetudiant - \mareponse) = 0
pourrait, il me semble, permettre de décider avec plus de fiabilité
si la réponse est bonne ou non.CODE OEF :
\title{example} \computeanswer{no} \format{html} \precision{1000} ## Choisir une question \integer{i=random(1,2)} # question 1 \if{\i=1}{ \text{question= 7/(10*t)} } # question 2 \if{\i=2}{ \text{question= 2*cos(t/7)/(7*sin(t/7))} } ## Preparer la reponse exprimee dans plusieurs formes les plus evidentes \text{theanswer= maxima( \question, expand;)} \text{theanswerfactor=maxima(\theanswer,factor;)} \text{theanswertrigreduce=maxima(trigreduce(\theanswer);)} \text{theanswerfactortrigreduce=maxima(trigreduce(\theanswerfactor);)} \statement{Repondre a la question blabla.} \answer{1. La reponse ?}{\theanswer,\theanswerfactor,\theanswertrigreduce,\theanswerfactortrigreduce}{type=algexp}
QUELQUES REPONSES REJETEES
question 10.7/t is not written as required. Please rewrite it in the correct form.
question 2
2/7 /tan(t/7) bad answer, the correct answer is 2*cos(t/7)/(7*sin(t/7)).
QUELQUES REPONSES ACCEPTEES (autres que la réponse annoncée à l’utilisateur) :
question 1 7/10/t
question 2
2*cot(t/7)/7 2/7*cot(t/7)
SYSTÈME : debian/squeeze wims-4.00-4 + patch pour bug #8408
- Ce sujet a été modifié il y a 10 années et 6 mois par boud. Raison : tous les bbcodes ne sont pas acceptes
- Ce sujet a été modifié le il y a 10 années et 6 mois par boud.
- Ce sujet a été modifié le il y a 10 années et 6 mois par boud.
- Ce sujet a été modifié il y a 10 années et 6 mois par boud. Raison : ortaugraf inaccetpable
- Ce sujet a été modifié il y a 10 années et 6 mois par boud. Raison : format
-
20 mai 2014 à 08:51 #2190jm.eversParticipant::
Hi,
For the rational number use ‘float’:
if float(7/(10*t)) = float(0.7/t) then Y else N;
Y
float(7/(10*t));
0.7/tFor the other example, things are more complex; I sometimes use
trigrat(2/7 /tan(t/7));
2*cos(t/7)/(7*sin(t/7))
But it’s maybe not installed in all maxima versions? just try it
kind regards,
joke -
20 mai 2014 à 22:44 #2192boudParticipant::
Thank you for the suggestions. One of them helps for one of these two
specific examples, and I found a maxima hack for the second, though
the main problem – can we run maxima on the answers? – remains. My
patch compared to my post above is:@@ -18,5 +18,8 @@ \text{theanswerfactor=maxima(\theanswer,factor;)} \text{theanswertrigreduce=maxima(trigreduce(\theanswer);)} \text{theanswerfactortrigreduce=maxima(trigreduce(\theanswerfactor);)} +\text{theanswerfactorfloat=maxima(float(\theanswerfactor);)} +\text{theanswerletsimp = maxima((matchdeclare(a,true), letrat: true, let(cos(a)/sin(a),1/tan(a)), letsimp(\theanswer));)} \statement{Repondre a la question blabla.} -\answer{1. La reponse ?}{\theanswer,\theanswerfactor,\theanswertrigreduce,\theanswerfactortrigreduce}{type=algexp} +\answer{1. La reponse ?}{\theanswer,\theanswerfactor,\theanswertrigreduce,\theanswerfactortrigreduce,\theanswerfactorfloat,\theanswerletsimp}{type=algexp}
So 0.7/t is now accepted as a correct answer for question 1, using the
5th correct answer in the list of correct answers. The tan simplification
(ignoring cot) is obtained by telling maxima how to simplify to tan and
saying nothing about cot, so the 6th correct answer now works for question 2.But these are just specific hacks for rather simple expressions. The
problem for more complicated problems remains: algebraic and
trigonometric simplification are not the main skill being tested. The main
question is whether the student can express physical problems mathematically
and simplify them to a reasonable degree, without pedantry. With these quite
simple examples there’s already a list of 6 different valid answers. Preparing
a list of e.g. 120 valid answers would be impractical.Can we apply maxima to the answer provided by the student (instead of
having to generate a list of valid answers)?(PS: trigrat is available in maxima-5.21.1, though it doesn’t help.
Here is my maxima version:dpkg -l |egrep " maxima( |-share)" ii maxima 5.21.1-2squeeze A computer algebra system -- base system ii maxima-share 5.21.1-2squeeze A computer algebra system -- extra code
)
- Cette réponse a été modifiée le il y a 10 années et 6 mois par boud. Raison: trigrat and maxima version
-
20 mai 2014 à 23:26 #2194boudParticipant::
To illustrate this point further, I modified question 1 to:
\text{question= maxima(diff((sin(t/8))^2,t)/(sin(t/8))^2;)}
The following two answers (which in reality are correct) are
interpreted as wrongly written, or wrong, respectively:0.25 *cos(t/8)/sin(t/8) is not written as required. Please rewrite it in the correct form.
0.25*cot(0.125*t) bad answer, the correct answer is cos(t/8)/(4*sin(t/8)).
Introducing more correct answers by applying
maxima(float(…);) to each of the existing correct answers and
adding these new ones to the list can, again, allow these two specific
examples to be accepted as correct. But then0.25*cot(t/8)
requires
float to be applied before trigreduce. I don’t see how a more complex
question can have a reasonably short list of correct answers rather
than growing longer factorially. -
21 mai 2014 à 07:30 #2195jm.eversParticipant::
I don’t use OEF , but in any case you should apply the same ‘maxima’ operations on both correct answer and student reply.
So for OEF you should build you own local ‘anstype’. (written in wims-phtml)
For example a single call to maxima :############# test=!exec maxima if trigrat(reply$i) = trigrat(answer$i) then yes else no;\ if float(reply$i) = float(answer$i) then yes else no;\ if some_operation_A(reply$i) = some_operation_A(answer$i) then yes else no;\ ....; if some_operation_Z(reply$i) = some_operation_Z(answer$i) then yes else no; !if yes isin $test score=1 !else score=0 !endif ############
But I guess Bernadette is the one you should consult about these specific OEF things.
joke -
21 mai 2014 à 09:11 #2196jm.eversParticipant::
To study some examples of OEF modules using a localized ‘anstype’ , see
E1/number/oefnumber.fr/anstype E1/number/oefcalcul1.fr/anstype E1/number/oefcalcul2.fr/anstype E1/geometry/oefsquare.fr/anstype E1/geometry/oefsquare.fr/src/cpp/anstype E4/number/oefcalcul.fr/anstype E6/geometry/OEFprogConstr.fr/anstype E6/geometry/oefsymmetry.fr/anstype E6/geometry/oefsymmetry.nl/anstype E6/number/oefsymmetry.fr/anstype H1/geometry/OEFtriang5.fr/anstype H1/algebra/frac5.fr/anstype H2/geometry/oeffrieze.fr/anstype H2/geometry/oeffrieze.nl/anstype H2/number/oeflceb.fr/anstype H3/number/OEFevalwimsfrac.fr/anstype H3/algebra/oefqcm4.fr/anstype H3/algebra/oefqcm3.fr/anstype H3/arithmetic/oefarith.fr/anstype H4/stat/oefstatistiques.fr/anstype H4/algebra/oefresolalg.fr/anstype H4/analysis/OEFevalwimsgrph.fr/anstype H5/stat/OEFevalwimsstat.fr/anstype H5/geometry/OEFtransform.fr/anstype H6/geometry/OEFsimigeoTS.fr/anstype
succes !
joke -
21 mai 2014 à 15:02 #2197boudParticipant::
Thanks for the hints – I have no objections to integrating some
« native WIMS » with OEF – provided that I understand how to set up the
files and paths, etc. I found that {type=algexp} in my oef script
refers to files located atscripts/anstype/algexp scripts/anstype/algexp.input
I copied these two files to a directory anstype/ in the
directory for this class, and renamed them. I don’t seem to
be able to get the OEF system to read them using {type=algexpmynewname}.However, I removed {type=…} totally, and now seem to have a hack
that works: let WIMS/OEF decide itself what the type is (i.e. use a default
type). Thus, now I have for the following OEF source file:\title{example 3 pour rapport de bug} \computeanswer{no} \format{html} \precision{1000} \text{question= maxima(diff((sin(t/8))^2,t)/(sin(t/8))^2;)} \text{theanswer= maxima( \question, expand;)} \statement{Repondre a la question svp.} \answer{1. La reponse ?}{\theanswer}
examples of correct answers:
cos(t/8)/(4*sin(t/8)) good answer. 1/4 * cot(t/8) good answer. 1/4 /tan(t/8) good answer. 0.25/tan(t/8) good answer. cot(0.125*t)/4 good answer.
examples of wrong answers:
1 /tan(t/8) bad answer, the correct answer is cos(t/8)/(4*sin(t/8)). cos(t/8) bad answer, the correct answer is cos(t/8)/(4*sin(t/8)). sin(t) bad answer, the correct answer is cos(t/8)/(4*sin(t/8)).
So far it seems that the default answer type for oef answers is just what I
was looking for – no need for any extra calls to maxima. 🙂 (Maybe the wims
scripts already do this by default?)Replacing the answer line by
\answer{1. La reponse ?}{\theanswer}{type=default}
gives identical results.
- Cette réponse a été modifiée le il y a 10 années et 6 mois par boud. Raison: syntax
-
21 mai 2014 à 17:45 #2199jm.eversParticipant::
Ok:the anstype ‘default’ is some sort of ‘switch board’, it may call:
1) if an ‘=’ is present in the correct answer : use anstype/equation
2) if a numerical evaluation is not NaN : use anstype/numeric
3) if there are math variables present : use anstype/function
4) else assume text : use anstype/atextSo you will end up using anstype/function…
This answer type will substitute the variables with some random values and do a numerical comparison…read ~/public_html/scripts/anstype/function
not a single call to maxima 🙂
kind regards,
Joke -
21 mai 2014 à 20:44 #2202JulienModérateur::
Peux-tu préciser ton environnement pour que l’on comprenne pourquoi ton {type=algexpmynewname} n’a pas été pris en compte par Wims ? Serveur local ou compte modtool
Un problème de droit de lecture de tes fichiers par le serveur Wims est envisageable…
Voili voilou
-
21 mai 2014 à 22:38 #2205boudParticipant::
Julien – c’est sur un serveur local (debian/squeeze wims-4.00-4 + patch pour
bug #8408), dans un répertoire pour « prof visiteur » [je trouve ça toujours
le plus simple à gérer], c.a.d.
log/classes/1234/
qui contientls -F anstype/ content.html doc/ Exindex exostat livret/ score/ sheets/ supervisor vote/ cdt/ def/ exams/ Extitles forum/ noscore/ scoreavg src/ version
Wims et apache ont le droit de lecture de anstype/, anstype/algexpmynewname et
anstype/algexpmynewname.input (et d’execution de anstype/).Un problème de droits d’accès me semble envisageable, mais je ne vois
pas où exactement. Faut-il le droit d’écrire des fichiers temporaires qq part ?
Ou peut-être c’est une erreur de chemin ?Joke – thanks for helping me read the source – in that case I think
I’ll use type=function explicitly. The evaluation method for functions
does not constitute a serious mathematical proof that two expressions
are equal, but for practical purposes in « ordinary » physics (no Dirac
delta functions, Cantor functions, etc.) it may well be enough.In that case – this is just wondering aloud – what are the chances of
either incorrectly marking a wrong answer to be correct or a right answer
to be wrong?Continuing with my question 1 bis, I can get a « wrong » answer (one or more
terms of Taylor expansion at t=0) to be marked nearly correct or fully
correct if the precision is not too strict and if the range is close
to zero:\precision{100000} \range{0.001..0.1}
…
\answer{1. La reponse ?}{\theanswer}{type=function}
2/t bad precision, the correct answer is cos(t/8)/(4*sin(t/8)). You have got a score of 7.2 on 10. 2/t - t/96 good answer.
I didn’t manage to create an example where the right answer is marked
wrong, without any warning of an error in the script. In principle,
requiring a precision of 1e-16 for double precision calculations
should give different answers when calculating something in one step
versus many steps with uncorrelated least significant bit errors.I had never thought of this sort of numerical checking to be anything
more than a hack before, but the chance of it failing either way are
probably low for « reasonable » practical cases, as long as the author(s)
of the exercise do not forget the nature of the algorithm. Good :). -
21 mai 2014 à 23:02 #2206jm.eversParticipant::
If there is a risk of incorrect marking in some OEF exercise (in case of NaN wims will return some error ‘bad’), you could change the « \range{min,max} » : the random values for substition in anstype function are chosen in this range…
Furhermore the compare precision \precision{} could be adjusted to suit some specific demands. If the difference between the substituted values e.g abs(student_answer – correct_answer) is smaller than 1/sqrt(precision) the answer is considered to be correct
joke -
21 mai 2014 à 23:31 #2209JulienModérateur::
Si tu as fait une install avec apt-get install wims le chemin pour ajouter un type de question se trouve ici :
cd /var/lib/wims/public_html/scripts/anstype/
Dans ce cas ton type est intégré à la distribution.Si tu veux faire quelques choses qui fonctionne que pour ton module l’exemple suivant te donne le chemin à suivre.
cd /var/lib/wims/public_html/modules/devel/judev/test\~stat\~oeftempsdereaction.fr/anstypeAprès je me suis jamais trop baladé dans les classes donc je ne sais pas si on peut ajouter direct dans une classe ???
J’arrête de polluer ton poste vu que ton problème semble résolu.
@+
-
24 mai 2014 à 05:12 #2223boudParticipant::
Julien – les fichiers placés directement dans le repertoire
scripts/anstype/
sont bien lus. La non-lecture des fichiers dans
log/classes/1234/
est peut-être pour des raisons de sécurité, ou
peut-être c’est une particularité des droits d’accès ou de chemin
dans mon installation de wims.Joke – I agree – the range and precision parameters should be able to
reduce the chance of a wrong function being marked correct to a very
small value – my guess is a probability of around 1e-15 or so. Since
the error is in favour of the student, this should be a safe error margin. 🙂However, a warning: something in an anstype file of the form `!exec
maxima some_operation_A(reply$i) = …` is likely to fail if the
maxima operation literally contains underscores. I don’t know if this
is a bug or a security feature. Further discussion would probably best
go at
https://wimsedu.info/?topic=caratere-underscore-dans-maxima
and if the consensus is that it’s a bug, then probably it should be
filed at https://sourcesup.renater.fr/scm/?group_id=379 (Maybe an
exception to the « refuse underscores » rule could be made for maxima
built-in functions, that are trusted to be safe? or a wims parameter
that lists allowable maxima functions whose symbols include
underscores could be definable in wims.conf?)Thanks to both of you for the fast responses.
-
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.