Логика расчета баллов - PullRequest
0 голосов
/ 08 июня 2011

Сложнее, чем этот вопрос SO , я после ваших мыслей о подсчете оценки теста, вот мой сценарий:

У меня есть X количество вариантов (любой элемент HTML может быть предоставленкак вариант), из которого пользователь может выбрать комбинацию вариантов в качестве своего ответа.До сих пор я пытаюсь сохранить общий характер:

  • поддержание массива правильных ответов
  • сравнение выбранных ответов с правильными ответами по элементам указателя
  • увеличение оценки на 1, если найдено правильное совпадение
  • обработка опционального вопроса по радио отдельно, так как они всегда верны / ложны в любом случае

Пример ниже: предполагается, что 6 узлов отвлекающеговершины 0,1,2 правильны, если выбраны.'selectedAnswers' - это массив, содержащий значение индекса любых выбранных отвлекающих факторов.'correctAnswers' - это предопределенный набор правильных индексов отвлекающих факторов.

// Each option is worth a standardised amount, unless custom weightings
// are required - not implemented.
var weighting = (100/this.distractors.length);
var score = 0;
for(var i=0;i<this.selectedAnswers.length;i++){
  if( ut.arrayContains(this.correctAnswer, this.selectedAnswers[i]) ){
    // Correct answer found, increase total
    score += weighting*2;
  } else {
    if( yd.hasClass(this.distractors[ this.selectedAnswers[i] ], SELECTED_CLASS) ){
      // Penalise the score by a double weightingfor selecting an incorrect answer
      score -= weighting*2;
      //log('reducing score by 2 weightings');
    } else {
      // Penalise the score by a single weighting for leaving an incorrect node unselected
      score -= weighting;
      //log('reducing score by 1 weighting');
    }
  }
}
this.score( (score<0)? 0 : Math.ceil(score) );

Казалось нелогичным уменьшать оценку, когда опция не выбрана, если она была бы неправильной, если бы она была выбрана- но это, казалось, приблизило меня к логике, которой я следую.На самом деле, полученная оценка кажется довольно точной, пока вы не рассмотрите сценарий, в котором вы выбираете все больше и больше неправильных и менее правильных вариантов.

Если я должен, я вырежу демонстрацию из нашей сборкии запустите его, дайте мне знать!


РЕДАКТИРОВАТЬ: Э-э, извините, я слишком много думал об этом, вопрос:

Как я могу доставить точный% баллов с учетом как неправильных, так и правильных ответов?

1 Ответ

0 голосов
/ 08 июня 2011

Я остановился на этом, но я все еще не думаю, что он охватывает достаточно земли:

var correctWeighting = 100/this.correctAnswer.length;
var incorrectWeighting = 100/(this.distractors.length-this.correctAnswer.length);
var score = 0;
for(var i=0;i<this.selectedAnswers.length;i++){
    // Scan through all selected distractors and determine if they are in/correct,
    // adjusting the score accordingly
    if( ut.arrayContains(this.correctAnswer, this.selectedAnswers[i]) ){
        score += correctWeighting;
    } else {
        score -= incorrectWeighting;
    }
}

// The score can be calculated to be <0 if there are many incorrect distractors
// selected, which isn't technically wrong (if a bit imprecise?), but a workable
// score should be in the 0-100 range.
this.score( (score<0)? 0 : Math.ceil(score) );

Кажется, что это работает, за исключением, опять же, когда много неправильных ответов выбрано и мало или нет правильных ответов (оценка сдвигается в минус). Примером, когда это может быть недостаточно хорошо, является, если у меня есть 10 или около того вариантов, из которых, скажем, 3 являются правильными, и я выбрал 1 правильный (+ 34%), и более 3 из них выбраны, но неправильные. В этой ситуации разумно сказать, что пользователь заслуживает хотя бы некоторой оценки за 1 правильно выбранный ответ.

Такое ощущение, что мне нужно настроить 'correctWeighting' в зависимости от некоторого фактора, вращающегося вокруг 'incorrectWeight'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...