apluslms/mooc-grader

Add choice groups to randomized checkbox questions in questionnaires

markkuriekkinen opened this issue · 5 comments

Background

Questionnaires already support randomized checkbox questions that select a random subset of the choices for the student. All students do not then see identical choices and they can not directly copy answers from each other. In RST, the pick-any directive has the option randomized.

Current implementation:

https://github.com/apluslms/mooc-grader/blob/v1.10.2/access/types/forms.py#L250-L255

New feature request

Allow the teacher to group the checkbox choices into N subgroups (two or more). Randomly select X choices from each group (X given as a parameter). This way, the teacher can guarantee that the combined choices include both easy and challenging options. Random selection from one large pool could include only easy choices for some students and challenging choices for some, hence the teacher wants to ensure that the combined random selection includes some choices from each group.

The student sees the checkbox question normally. The choices (randomly selected for the student) are combined as one list without any visible grouping. The student does not know that the random selection is based on grouping.

There are some open questions:

  • Should each subgroup have the same size or could they vary?
  • How should we guarantee that the combined random selection includes some correct choices and not only incorrect ones?

This was requested by Tomi J. from Tampere University.

A new request from a different teacher for essentially the same feature. This suggestion also includes a draft for the syntax to use in RST for the subgroups. The subgroups don't have to be of the same size.
Internal ticket: https://rt.cs.aalto.fi/Ticket/Display.html?id=24009


The following feature would be useful for the randomized multiple-choice questions.

Currently one can use :randomized: to generate different multiple-choice
questions for different students. However, in some cases it is difficult
to come up with a large number of completely different questions, and
some of the alternative questions tend to be similar.

What would be useful is some mechanism to prevent more than one question
from a given group of similar questions.

For example, my questions could be the following.

   *a. 2*x = x+x

   *b. x-x+-x+x = x+x

   *c. 3*x = 2*x + x

   *d. y+2*y = 3*y

Let's say that (c) and (d) are "too similar", and we don't want to pick
both.

This could be expressed as a expression (pick 2 (pick 1 c d) a b), so
that first one picks randomly one of c and d, and then (two different
cases) one either picks two of c, a, b or two of d, a, b, depending on
how the choice between c and d played out.

Syntactically, this modification could be done e.g. as
:structured-randomized: followed by the kind of syntax I used above, that
is, (pick 2 (pick 1 c d) a b).


The teacher would like to have this available in production by mid-December 2023.

This was implemented in apluslms/a-plus-rst-tools#169, but a nested structure was not used, since it does not guarantee that an option from the inner subgroup is selected. However, the non-nested syntax can still be used for selecting one of several similar answer choices, which was one of the requested features.

A nested structure was implemented, since it was emphasized by a teacher that it is needed and useful.