MDL-32188 question CBM: alter score handling.

We now change so that minfraction is -6 and maxfraction is 3, so getting
the question right a low certainty gives maxmark marks, and you get a
bonus for being more confident (rather than being penalised for being
unconfident). Mathematically it is the same, but the difference is
importnat psychologically.

We also change how partially correct scores are handled.
It is too harsh to penalise a partially correct score with full
certainty by doing a linear interpolation between -6 and +3. Instead,
any partially correct score (e.g. 0.5) becomes that fraction of the
correct score (e.g. 0.5 * 3 = 1.5). Also, any incorrect score is treated
as 0, so if you have a multiple choice question that normally gives a
negative score for a wrong choice, this will now never give a score of
less than -6.

Finally we change how this is displayed to students beside the question.
Rather than saying "Marked out of 1.00", we say "Base mark 1.00", and
then later we say "CBM mark 3.00" (or whatever it is).
This commit is contained in:
Tim Hunt
2013-10-04 17:52:29 +01:00
parent 7ab9ce3a3c
commit fb74929e97
9 changed files with 167 additions and 87 deletions
+13 -9
View File
@@ -643,16 +643,16 @@ abstract class question_cbm {
/** @var array list of all the certainty levels. */
public static $certainties = array(self::LOW, self::MED, self::HIGH);
/**#@+ @var array coefficients used to adjust the fraction based on certainty.. */
protected static $factor = array(
self::LOW => 0.333333333333333,
self::MED => 1.333333333333333,
/**#@+ @var array coefficients used to adjust the fraction based on certainty. */
protected static $rightscore = array(
self::LOW => 1,
self::MED => 2,
self::HIGH => 3,
);
protected static $offset = array(
self::LOW => 0,
self::MED => -0.666666666666667,
self::HIGH => -2,
protected static $wrongscore = array(
self::LOW => 0,
self::MED => -2,
self::HIGH => -6,
);
/**#@-*/
@@ -671,7 +671,11 @@ abstract class question_cbm {
* @return number the adjusted fraction taking the certainty into account.
*/
public static function adjust_fraction($fraction, $certainty) {
return self::$offset[$certainty] + self::$factor[$certainty] * $fraction;
if ($fraction <= 0.00000005) {
return self::$wrongscore[$certainty];
} else {
return self::$rightscore[$certainty] * $fraction;
}
}
/**