'Wildcard' in Grading Code

  • In order to simplify the algorithm for partial grading of a maple graded question I would like to have part of the response of the student be 'ignored'. For instance: the following formula is the correct answer: 

    . This response will give the student a full score .  In this formula the part should be correct to gain a partial score, regardless mistakes in the second part, 

    Can I create a grading code that allows for that?

    I was thinking of: multiplying the student response with 

    and evaluating whether any of these parameters E, k or rho are still present in the adjusted student response. 

    Is this possible? If yes, what's the code?

    Hope anyone can help me with this 😊

  • administrators

    Hi @Metahofzicht. Here is a way to do this in Maple. I have attached a working version for Maple T.A..

    if TA = RESPONSE then  1.0;
    elif algsubs(fact = 1,RESPONSE) <> RESPONSE then  0.5;
    else  0;
    end if


  • @jmtrik Thanks Jonathan. Never could have found this myself 😄

  • administrators

    @Metahofzicht This code should work but depending on your use case you may need to tweak it a bit. Often the easiest way to think about grading code is through the unit tests. For example, here are the unit tests that I used to test this grading code. What ever code I write must give the correct grade for the all the unit tests.

    Unit Tests

    Teacher's Answer          Student's Answer               Expected Grade

    k*rho/E*sqrt(2*L^2/S)    k*rho/E*sqrt(2*L^2/S)         1.0
    k*rho/E*sqrt(2*L^2/S)    k*rho/E*sqrt(L^2/S)             0.5
    k*rho/E*sqrt(2*L^2/S)    0                                          0

    If you add some other cases to this list, we can further refine the grading code.


  • @jmtrik I have some alternative responses to the same question, that are not resembling the other options:

    Teacher's Answer               Student's Answer               Expected Grade

    H[m]*A*L*rho                      H[m]*A*L*rho                      1.0
    H[m]*sqrt(3)/4*a^2*L*rho    H[m]*sqrt(3)/4*a^2*L*rho    1.0
    H[m]*sqrt(3)/4*a^2*L*rho    H[m]*a^2*L*rho                   0.5  (the numerical factor is not relevant for the final answer to the problem)

  • administrators

    @Metahofzicht Is this for a different question? Is this another example of partial expression grading?

  • administrators

    @Metahofzicht I've added a few cases.

    You should receive

    • 1.0 for H[m]*sqrt(3)/4*a^2*L*rho or where sqrt(3)/4*a^2 has been replaced by A
    • 0.5 if you answer H[m]*a^2*L*rho 0.5 if you answer H[m]*C*a^2*L*rho, where C is any constant (you could set this to give the grade 0.25)
    • 0 otherwise

    I used this algorithm, where I've defined the grading code. Note I have different cases for C=1 and C= any other constant. 

    $TA = "H[m]*sqrt(3)/4*a^2*L*rho";
    $subslist = "A=sqrt(3)/4*a^2";
    #define grading code function
    if evalb(simplify(algsubs(subslist,RESPONSE) = TA)) then  1.0;
    elif evalb(simplify(algsubs(subslist,RESPONSE) = TApartial1)) then 0.5;
    elif evalb(simplify(RESPONSE = 0)) then 0.0;
    elif type(simplify(algsubs(subslist,RESPONSE)/TApartial1),constant) then 0.25;
    else  0;
    end if
    ;end proc;

    And the I have used a Maple-graded question with Maple-syntax and the following grading code.


    Here is the Maple T.A. question Partgradfactorexample2.zip

  • @jmtrik Hi , Jonathan. I'm trying my best to apply the procedure on other examples. But I get stuck in the following example: (introducing the parameter I - second moment of area - that needs special treatment due to the confusion with imaginairy numbers and a second substition):

    Teacher's Answer               Student's Answer               Expected Grade

    C[1]*E*I/L^3                       C[1]*E*I/L^3                            1.0                          C[1] equals C
    C[1]*E*I/L^3                       C[1]*E*a^4/(32*sqrt(3)*L^3)    1.0                          C[1] equals C
    C[1]*E*I/L^3                       6*E*a^4/(sqrt(3)*L^3)              1.0                          C[1] = 192
    C[1]*E*I/L^3                       Constant*E*a^4/L^3                0.8                          Constant is any number
    C[1]*E*I/L^3                       Factor*E*a^4/L^3                    0.5                          Factor is any parameter

    $fact = "E*a^4/L^3";
    $TA = "$fact*6/sqrt(3)";
    $subslist1 = Maple("local I:='I ': I=a^4/32/sqrt(3)");
    $subslist2 = "C[1] = C = 192";
    $TApartial1 = "E*a^4/L^3";

    #define test cases

  • @Metahofzicht Nailed it. I found out how to fix it.

    My grading code:

    local I:=II:
    if evalb(simplify(algsubs(I = a^4/(32*sqrt(3)), algsubs(C = 192, $RESPONSE) = $RV1))) then 1.0;
    elif evalb(simplify(algsubs(I = a^4/(32*sqrt(3)), algsubs(C[1] = 192, $RESPONSE) = $RV1))) then 1.0;
    elif algsubs($fact2 = 1,$RESPONSE) <> $RESPONSE then 1.0;
    else 0.0;
    end if;

    Custom previewing code: local I:=`I `:printf(MathML[ExportPresentation]($RESPONSE));

    my algoritm:

    $fact2 = "E*a^4/L^3";
    $RV1 = "$fact2*2*sqrt(3)";
    $RVdisplay = "printf(MathML[ExportPresentation]($RV1))";