Evaluator: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
(36 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Beschreibung ===
Der Evaluator ist das Evaluierungswerkzeug, welches von JACK für Berechnungen aller Art (z.B. mathematische Berechnungen) verwendet wird. Der Evaluator wird daher sowohl für die Erzeugung von [[Variablen]] genutzt, als auch um die Prüfregeln für richtige Antworten bzw. Feedbacknachrichten in [[Checker#InstantFillInChecker|Fill In Aufgaben]] auszuwerten. Er beherrscht eine Reihe von Funktionen, z.B. einfache arithmetische Operationen und Funktionen auf Zeichenketten, ist jedoch auch in der Lage, mit Computer Algebra Systemen zu sprechen und dort Auswertungen vornehmen zu lassen. Derzeit ist der Evaluator in der Lage, mit zwei externen Systemen zu kommunizieren. Es handelt sich dabei um die Systeme ''Sage'' und ''R''. Der Evaluator bietet neben den oben beschriebenen Basisfunktionen einige CAS-Funktionen an, welche bestimmte festgelegte Auswertungen in den externen Systemen vornehmen. So kann zum Beispiel mittels der Funktion ''isLinearlyIndependent'' geprüft werden, ob eine Menge von Vektoren linear unabhängig ist. Diese Funktion verwendet intern ''Sage'', um eine Entscheidung zu finden. Der Evaluator meldet das Ergebnis dann an den JACK Kern zurück, welcher dieses weiter verarbeitet. Zudem können mit dem Evaluator auch Funktionen logisch miteinander verknüpft werden, also durch "und", "oder" oder auch "nicht". Wird in einer Prüfregel einer [[Checker#InstantFillInChecker|Fill In Aufgabe]] im Tag <code><correctanswer></code> oder <code><feedback></code> ein <code><option></code>-Tag verwendet, so wird der Ausdruck im Attribut <code>result</code> dem Evaluator übergeben:
<syntaxhighlight lang="xml">
<option result="evaluatorfunktion(...)">Feedback</option>
</syntaxhighlight>
Der Rückgabewert der verwendeten Funktion muss an dieser Stelle also zwingend ein Wahrheitswert sein. In den leeren Klammern müssen noch die Argumente der verwendeten Funktion ergänzt werden. Es können auch mehrere Funktionen folgendermaßen verknüpft werden:
<syntaxhighlight lang="xml">
<option result="funktion1(...)&amp;&amp;funktion2(...)">Feedback</option>
</syntaxhighlight>
Die XML-Entity "&amp;amp;" steht für das ''&''-Zeichen. Zwei ''&''-Zeichen stehen wiederum für die logische "Und"-Verknüpfung. Der Ausdruck wird folglich als wahr ausgewertet, wenn beide verwendeten Funktionen wahr zurückgeben. Die "Oder"-Verknüpfung wird durch zwei senkrechte Striche ("||") erreicht und die "Nicht"-Verknüpfung durch das Ausrufungszeichen ("!").
=== Variablen erstellen ===
Der Evaluator kann beim Erzeugen aufgabenbezogener [[Variablen]] innerhalb der [[ExerciseChain]] genutzt werden. Innerhalb des value-Attributs des <option>-Tags lassen sich Funktionen des Evaluators nutzen, um Aufgaben mit variablen Werten zu erstellen.
<syntaxhighlight lang="xml">
<variables>
<option name="a" value="5"/>
<option name="b" value="2"/>
<option name="c" value="[var=a]*[var=b]"/>
</variables>
</syntaxhighlight>
In diesem Beispiel werden die beiden Variablen ''a'' und ''b'' mit den Werten ''5'' bzw. ''2'' erstellt. Außerdem wird eine dritte Variable ''c'' erstellt, die das Produkt der beiden vorherigen Variablen bildet.
Neben den mathematischen Basisoperationen enthält der Evaluator diverse eigen-implementierte Funktionen, die teilweise auf externe Computer-Algebra-Systeme (Sage, R) zugreifen. Beim Benutzen einer solchen CAS-Funktion kann mittels des Attributs ''cas'' und den Werten ''Sage'', ''R'' explizit angegeben werden, welches CAS verwendet werden soll.
<syntaxhighlight lang="xml">
<option name="b" value="factorial([var=a])" cas="R" />
</syntaxhighlight>
In diesem Fall enthält die Variable ''b'' die Fakultät der Zahl, die in der Variablen ''a'' enthalten ist, berechnet mit Hilfe des CAS R.


=== Ergebnisauswertung ===
=== Ergebnisauswertung ===
Der Evaluator wird zur Auswertung diverser Ausdrücke innerhalb von JACK verwendet. Er findet zum Beispiel Anwendung bei der Benutzung des result-Attributs innerhalb des <option>-Tags.
Der Evaluator wird ebenfalls bei der Auswertung von Aufgaben verwendet, konkreter bei dem result-Attribut innerhalb des <option>-Tags.
  <option result="[pos=1]==25*2">Richtig, das Ergebnis ist 50!</option>
<syntaxhighlight lang="xml">
Hierbei versucht der Evaluator den Wert des result-Attributs, also der in Anführungszeichen stehende Ausdruck, zu einem Boolean auszuwerten. Für eine korrekte Funktionsweise ist es deswegen wichtig, dass der dort stehende Ausdruck auch tatsächlich zu einem booleschen Ergebnis validiert werden kann. Auf diese Weise können viele mitunter sehr unterschiedliche Lösungs-Einreichungen von Aufgaben auf ihre Richtigkeit geprüft werden, ohne sich im Vorfeld jeder möglichen Einreichung bewusst zu sein.
<correctanswer>
  <option result="[pos=1]==25*2"/>
<message>Richtig! Das Ergebnis ist 50.</message>
</correctanswer>
</syntaxhighlight>
In diesem Beispiel wird überprüft, ob in dem ersten [[Checker#InstantFillInChecker|Fill In]]-Feld der Aufgabe der Wert 50 steht.


=== Variablen erstellen ===
Hierbei versucht der Evaluator den Wert des result-Attributs, also den in Anführungszeichen stehenden Ausdruck, zu einem Boolean auszuwerten. Für eine korrekte Funktionsweise ist es deswegen wichtig, dass der dort stehende Ausdruck auch tatsächlich zu einem booleschen Ergebnis validiert werden kann. Auf diese Weise können viele mitunter sehr unterschiedliche Lösungs-Einreichungen von Aufgaben auf ihre Richtigkeit geprüft werden, ohne jede einzelne Möglichkeit explizit angeben zu müssen. Hierbei kann man genauso wie beim Erstellen von Variablen auf diverse Funktionen des Evaluators zurückgreifen.
Zusätzlich kann der Evaluator auch beim Erzeugen aufgabenbezogener Variablen innerhalb der [[ExerciseChain]] genutzt werden. Innerhalb des value-Attributs des <option>-Tags lassen sich mathematische Operationen so wie spezielle Funktionen des Evaluators nutzen, um beispielsweise Aufgaben mit unterschiedlichen bzw. zufallsgenerierten Werten zu erstellen.


=== Funktionen ===
=== Funktionen ===
Der Evaluator beinhaltet viele verschiedene Funktionen, die alle in JACK für die Aufgabendarstellung benutzt werden können. Hier geben wir eine vollständige Liste aller angebotenen Funktionen mit ihrer Funktionalität.
Der Evaluator beinhaltet viele verschiedene Funktionen, die alle in JACK für die Aufgabendarstellung benutzt werden können. Hier geben wir eine vollständige Liste aller angebotenen Funktionen mit ihrer Funktionalität.


[[allgemeine binäre Operatoren]]
* [[:Kategorie:Math-Evaluatorfunktion|Math-Evaluatorfunktion]]
* [[:Kategorie:Chem-Evaluatorfunktion|Chem-Evaluatorfunktion]]
* [[:Kategorie:Konstruktoren|Konstruktoren]]
* [[:Kategorie:Ausdruckfunktionen|Ausdruckfunktionen]]
* [[:Kategorie:Zeichenkettenfunktionen|Zeichenkettenfunktionen]]
* [[:Kategorie:Booleanfunktionen|Booleanfunktionen]]
* [[:Kategorie:Listfunktionen|Listfunktionen]]
* [[:Kategorie:Vektorfunktionen|Vektorfunktionen]]
* [[:Kategorie:Matrixfunktionen|Matrixfunktionen]]
* [[:Kategorie:Testfunktionen|Testfunktionen]]
* [[:Kategorie:Sparqlfunktionen|Sparqlfunktionen]]
* [[Migration zur Evaluator 2 Syntax|Best Practice für den Evaluator]]


[[unäre Operatoren]]
===Hinweise===
* Wenn man zwei oder mehr Funktionen miteinander verknüpft fallen die Anführungszeichen weg: ''equalsExpr(evalEq('5','5'),'0')''


[[CAS Funktionen]]
== Änderungen in JACK3 ==
'''Die folgenden Änderungen beziehen sich nur auf JACK3.'''


[[Evaluator Funktionen]]
Evaluatorausdrücke werden immer geparsed und evaluiert.
Eckige Klammern können eingefügt werden, um das Evaluieren von Gesamt- und Teilausdrücken zu verhindern.
Es gibt Funktionen, welche nicht innerhalb von eckigen Klammer auftauchen dürfen. Bei diesen entsteht beim parsen eine Fehler (random, getRandomFromList, chooseFromComplement, ...).
Einige Funktionen, evaluieren die Argumente nicht, um bspw. die Syntax zu analysieren (isIntegerNumber, isMatrix, isSum, isProduct, ...).


===Hinweise===
 
* Wenn man zwei oder mehr Funktionen miteinander verknüpft fallen die Anführungszeichen weg: ''equalsExpr(evalEq('5','5'),'0')''
Beispiele:
 
{| class="wikitable"
|-
! Variablenname!! Ausdruck!! Wert
|-
| [var=A]|| 1+1|| 2
|-
| [var=B]|| [1+1]|| 1+1
|-
| || ||
|-
| [var=C]|| 1+[var=A]||3
|-
| [var=D]|| 1+[var=B]|| 3
|-
| [var=E]|| [1+[var=A]]|| 1+2
|-
| [var=F]||[1+[var=B]]|| 1+1+1
|-
| || ||
|-
| [var=J]|| getFromList(1,list(2,3,4))|| 3
|-
| [var=K]|| getFromList(1,list(2,[2+5],4))|| 2+5
|-
| [var=L]|| getFromList(1,list(2,[var=A],4))|| 2
|-
| [var=M]|| getFromList(1,list(2,[var=B],4))|| 1+1
|-
| [var=N] || getFromList([1+1],list(2,3,4))|| 4
|-
| [var=O] || getFromList([var=A],list(2,3,4))|| 4
|-
| [var=P] || getFromList([var=B],list(2,3,4)) || 4
|-
| [var=Q] || [getFromList(1,list(2,3,4))]||
getFromList(1,list(2,3,4))
|-
| || ||
|-
| [var=R]|| [random()]|| EXCEPTION
|-
| [var=S] || [getRandomFromList(list(1,2,3,4,5))]
|| EXCEPTION
|-
| [var=T] || isIntegerNumber([1+1])|| false
|-
| [var=U] || isIntegerNumber(1+1)|| false
|-
| [var=V]|| isIntegerNumber([var=A])|| true
|-
| [var=W] || isIntegerNumber([var=B])|| false
|}
[[Category:Evaluator]]

Version vom 16. Juli 2020, 10:11 Uhr

Beschreibung

Der Evaluator ist das Evaluierungswerkzeug, welches von JACK für Berechnungen aller Art (z.B. mathematische Berechnungen) verwendet wird. Der Evaluator wird daher sowohl für die Erzeugung von Variablen genutzt, als auch um die Prüfregeln für richtige Antworten bzw. Feedbacknachrichten in Fill In Aufgaben auszuwerten. Er beherrscht eine Reihe von Funktionen, z.B. einfache arithmetische Operationen und Funktionen auf Zeichenketten, ist jedoch auch in der Lage, mit Computer Algebra Systemen zu sprechen und dort Auswertungen vornehmen zu lassen. Derzeit ist der Evaluator in der Lage, mit zwei externen Systemen zu kommunizieren. Es handelt sich dabei um die Systeme Sage und R. Der Evaluator bietet neben den oben beschriebenen Basisfunktionen einige CAS-Funktionen an, welche bestimmte festgelegte Auswertungen in den externen Systemen vornehmen. So kann zum Beispiel mittels der Funktion isLinearlyIndependent geprüft werden, ob eine Menge von Vektoren linear unabhängig ist. Diese Funktion verwendet intern Sage, um eine Entscheidung zu finden. Der Evaluator meldet das Ergebnis dann an den JACK Kern zurück, welcher dieses weiter verarbeitet. Zudem können mit dem Evaluator auch Funktionen logisch miteinander verknüpft werden, also durch "und", "oder" oder auch "nicht". Wird in einer Prüfregel einer Fill In Aufgabe im Tag <correctanswer> oder <feedback> ein <option>-Tag verwendet, so wird der Ausdruck im Attribut result dem Evaluator übergeben:

<option result="evaluatorfunktion(...)">Feedback</option>

Der Rückgabewert der verwendeten Funktion muss an dieser Stelle also zwingend ein Wahrheitswert sein. In den leeren Klammern müssen noch die Argumente der verwendeten Funktion ergänzt werden. Es können auch mehrere Funktionen folgendermaßen verknüpft werden:

<option result="funktion1(...)&amp;&amp;funktion2(...)">Feedback</option>

Die XML-Entity "&amp;" steht für das &-Zeichen. Zwei &-Zeichen stehen wiederum für die logische "Und"-Verknüpfung. Der Ausdruck wird folglich als wahr ausgewertet, wenn beide verwendeten Funktionen wahr zurückgeben. Die "Oder"-Verknüpfung wird durch zwei senkrechte Striche ("||") erreicht und die "Nicht"-Verknüpfung durch das Ausrufungszeichen ("!").

Variablen erstellen

Der Evaluator kann beim Erzeugen aufgabenbezogener Variablen innerhalb der ExerciseChain genutzt werden. Innerhalb des value-Attributs des <option>-Tags lassen sich Funktionen des Evaluators nutzen, um Aufgaben mit variablen Werten zu erstellen.

<variables>
 <option name="a" value="5"/>
 <option name="b" value="2"/>
 <option name="c" value="[var=a]*[var=b]"/>
</variables>

In diesem Beispiel werden die beiden Variablen a und b mit den Werten 5 bzw. 2 erstellt. Außerdem wird eine dritte Variable c erstellt, die das Produkt der beiden vorherigen Variablen bildet.

Neben den mathematischen Basisoperationen enthält der Evaluator diverse eigen-implementierte Funktionen, die teilweise auf externe Computer-Algebra-Systeme (Sage, R) zugreifen. Beim Benutzen einer solchen CAS-Funktion kann mittels des Attributs cas und den Werten Sage, R explizit angegeben werden, welches CAS verwendet werden soll.

<option name="b" value="factorial([var=a])" cas="R" />

In diesem Fall enthält die Variable b die Fakultät der Zahl, die in der Variablen a enthalten ist, berechnet mit Hilfe des CAS R.

Ergebnisauswertung

Der Evaluator wird ebenfalls bei der Auswertung von Aufgaben verwendet, konkreter bei dem result-Attribut innerhalb des <option>-Tags.

<correctanswer>
 <option result="[pos=1]==25*2"/>
 <message>Richtig! Das Ergebnis ist 50.</message>
</correctanswer>

In diesem Beispiel wird überprüft, ob in dem ersten Fill In-Feld der Aufgabe der Wert 50 steht.

Hierbei versucht der Evaluator den Wert des result-Attributs, also den in Anführungszeichen stehenden Ausdruck, zu einem Boolean auszuwerten. Für eine korrekte Funktionsweise ist es deswegen wichtig, dass der dort stehende Ausdruck auch tatsächlich zu einem booleschen Ergebnis validiert werden kann. Auf diese Weise können viele mitunter sehr unterschiedliche Lösungs-Einreichungen von Aufgaben auf ihre Richtigkeit geprüft werden, ohne jede einzelne Möglichkeit explizit angeben zu müssen. Hierbei kann man genauso wie beim Erstellen von Variablen auf diverse Funktionen des Evaluators zurückgreifen.

Funktionen

Der Evaluator beinhaltet viele verschiedene Funktionen, die alle in JACK für die Aufgabendarstellung benutzt werden können. Hier geben wir eine vollständige Liste aller angebotenen Funktionen mit ihrer Funktionalität.

Hinweise

  • Wenn man zwei oder mehr Funktionen miteinander verknüpft fallen die Anführungszeichen weg: equalsExpr(evalEq('5','5'),'0')

Änderungen in JACK3

Die folgenden Änderungen beziehen sich nur auf JACK3.

Evaluatorausdrücke werden immer geparsed und evaluiert. Eckige Klammern können eingefügt werden, um das Evaluieren von Gesamt- und Teilausdrücken zu verhindern. Es gibt Funktionen, welche nicht innerhalb von eckigen Klammer auftauchen dürfen. Bei diesen entsteht beim parsen eine Fehler (random, getRandomFromList, chooseFromComplement, ...). Einige Funktionen, evaluieren die Argumente nicht, um bspw. die Syntax zu analysieren (isIntegerNumber, isMatrix, isSum, isProduct, ...).


Beispiele:

Variablenname Ausdruck Wert
[var=A] 1+1 2
[var=B] [1+1] 1+1
[var=C] 1+[var=A] 3
[var=D] 1+[var=B] 3
[var=E] [1+[var=A]] 1+2
[var=F] [1+[var=B]] 1+1+1
[var=J] getFromList(1,list(2,3,4)) 3
[var=K] getFromList(1,list(2,[2+5],4)) 2+5
[var=L] getFromList(1,list(2,[var=A],4)) 2
[var=M] getFromList(1,list(2,[var=B],4)) 1+1
[var=N] getFromList([1+1],list(2,3,4)) 4
[var=O] getFromList([var=A],list(2,3,4)) 4
[var=P] getFromList([var=B],list(2,3,4)) 4
[var=Q] [getFromList(1,list(2,3,4))]

getFromList(1,list(2,3,4))

[var=R] [random()] EXCEPTION
[var=S] [getRandomFromList(list(1,2,3,4,5))] EXCEPTION
[var=T] isIntegerNumber([1+1]) false
[var=U] isIntegerNumber(1+1) false
[var=V] isIntegerNumber([var=A]) true
[var=W] isIntegerNumber([var=B]) false