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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user