# Selecting Problems from Problem Groups

This "HowTo" is intended to facilitate the use of problem groups with Gateway Tests and Quizzes. **Please note** that **only** gateway_quiz assignments support problem groups. Sadly, they cannot be used with regular homework assignments.

## Contents

## What Problem Groups Are

Problem groups are groupings of problems from which one or more problems are to be selected for insertion into a *gateway_quiz* assignment. For example, in a derivative quiz it might be desirable to have problems that are divided by topic: the first problem is some sort of polynomial problem, the second some sort of product rule problem, the third a quotient rule problem, etc. It's possible to do this in WeBWorK without problem groups by defining a big random loop in each problem, but problem groups allow this to be done more elegantly and more extensibly.

Each problem group in WeBWorK is just a homework set that isn't assigned to any students. Thus in our example above, we might have a set named "topic_polynomial", another named "topic_product_rule", a "topic_quotient_rule", etc. Each of these sets consists of all of the problems that are to be selected from on the quiz. Then the quiz references these sets to draw problems from them, as described below.

## Creating Problem Groups in Assignments

As suggested above, the meat of setting up problem groups is first setting up the topic homework sets that include all the problems that are to be selected from for the different problems in an assignment. To define a quiz that has five problems, each of which is to be drawn from a problem group, we need to define six problem sets: the quiz, and the five topic sets that provide the problem groups.

These sets can be created either using the WeBWorK GUI, or by uploading files through the file manager and set importer (or, by copying files in the filesystem of the WeBWorK server).

### Using the WeBWorK GUI to Create Problem Groups

To use the WeBWorK GUI to create a quiz that uses problem groups, we need to create the various assignments for the topics and the quiz. This can be done with the Library Browser and Homework Sets Editor.

First, create the problem group sets. Following our example above, let's suppose that we're interested in creating the sets `topic_polynomial`

, `topic_product_rule`

, `topic_quotient_rule`

, and `topic_chain_rule`

, and that we'll pick two problems from the last for our quiz. Thus we need to create four problem group assignments and the quiz. For each problem group assignment, we can create the assignment as we usually do using the Library Browser:

- Click "Library Browser" under "Instructor Tools" on the left sidebar.
- Create the new set by giving a name in the
*Name for new set here*box, and click "Create a New Set in This Course"--for our example, we'd give the name`topic_polynomial`

for the first set, etc.*Note that problem group sets should*. They exist only to contain the problems from which we'll be selecting.**not**be assigned to any users in the course - Then add problems to the set as you would normally using the Browse/Mark/Add features in the middle and lower table elements in the Library Browser. The problems added to the problem group set should be all of the problems from which we want to select on the quiz. Thus if we want to select from a group of 25 polynomial derivative problems we would add those 25 problems to the
`topic_polynomial`

set.

We repeat this process for each of the problem group sets.

Finally, we can create the actual quiz assignment that will draw from these problem groups. We need to create the new set first, then add the grouped problems to it.

- Click "Library Browser" under "Instructor Tools" on the left sidebar.
- Create the new set by giving the name and clicking "Create a New Set in This Course". In our example from above, we might call this set
`derivative_quiz`

. - To add the problems from the problem groups, it's easiest to use the Homework Set Editor in the Instructor Tools: Click "Instructor Tools", and then select "derivative_quiz" from the homework set list in the right selector menu. Then click "Edit" one set below the selector.
- Your set will appear as a set with no problems. Add blank problems by clicking the "Add blank problem template to end of homework set" checkbox at the bottom of the set information and then clicking "Save Changes". In our example, which has five problems, we would have to do this five times.
- Finally, set the "Source File" for each of the problems to
`group:setname`

to select from a problem group. Thus, in our example, we would make the source file for the first problem be`group:topic_polynomial`

, for the second,`group:topic_product_rule`

, for the third,`group:topic_quotient_rule`

, and for the fourth and fifth`group:topic_chain_rule`

(recall that we wanted to select two chain rule problems for our quiz).*Note that if you're using a version of WeBWorK <= 2.4.5, when you save the assignment you will get the error message "This source file does not exist!" for each grouped set. This is ok!*

At this point, we're all set. Two other things deserve note: when the system selects from problem groups, it avoids picking the same problem twice (there was a bug in the WeBWorK 2.2 implementation of this, but it should work correctly on 2.3 and subsequent versions). And on the set edit page we can also change the characteristics of the set to make it a gateway/quiz assignment, and once that is saved set the time limit and other quiz characteristics.

### Uploading Files to Create Problem Groups

As with the WeBWorK GUI, we can create the various assignments needed for the problem group topics and the assignment that uses them by uploading set definition and problem files, too. This is described below.

As before, let's consider the example of a quiz on differentiation that has five questions. We'll make the first three questions be drawn from problem groups covering polynomials, product rules, and quotient rules, and the last two be drawn from a problem group on the chain rule. To do this, we have to define five problem sets: four problem group sets, and the actual quiz. We'll create the sets by importing them from set definition files, as suggested in the Gateway Quiz documentation. First, create a set definition file for each topic. For the first topic, which we'll call `topic_polynomials`

, the file would be called `settopic_polynomials.def`

, and might look like the following:

openDate = 07/01/2011 at 8:00 AM dueDate = 07/01/2011 at 11:59 PM answerDate = 07/01/2011 at 11:59 PM problemList = topic_polynomials/prob1.pg topic_polynomials/prob2.pg topic_polynomials/prob3.pg ...

Note that we include the open/due and answer dates because the system doesn't like it if we don't include them, and that we've said that the problems for this topic are all located in a subdirectory called `topic_polynomials`

in the `templates`

directory for the course. The `...`

would, of course, be replaced by the remainder of the problems in the topic.

Similarly, we would create the set definition files `settopic_product_rule.def`

, `settopic_quotient_rule.def`

and `settopic_chain_rule.def`

. Then we would create the set definition file for the actual quiz assignment, which might be called `setderivative_quiz.def`

and contain the following:

openDate = 09/24/2007 at 8:00 AM dueDate = 10/23/2007 at 11:59 PM answerDate = 10/23/2007 at 11:59 PM assignmentType = proctored_gateway attemptsPerVersion = 1 timeInterval = 0 versionsPerInterval = 1 versionTimeLimit = 900 problemRandOrder = 1 problemsPerPage = 0 hideScore = N hideWork = BeforeAnswerDate capTimeLimit = 1 restrictIP = No # problemList= group:topic_polynomials group:topic_product_rule group:topic_quotient_rule group:topic_chain_rule group:topic_chain_rule

This defines a proctored gateway assignment that may be taken only once (`versionsPerInterval = 1`

, and `timeInterval = 0`

says that the interval over which the number of versions is calculated is infinite), which may be submitted only once for a grade (`attemptsPerVersion = 1`

) and which has a time limit of 15 minute (`versionTimeLimit = 900`

seconds). The problems on the quiz are ordered randomly (`problemRandOrder = 1`

) and all displayed on a single page (`problemsPerPage = 0`

). On completion, students see their scores (`hideScore = N`

) but can't see their completed work or the problems on the quiz until after the quiz is due (`hideWork = BeforeAnswerDate`

). If they start the test near the due date, the amount of to take the test may be reduced from 15 minutes (`capTimeLimit = 1`

), but there are no IP restrictions on the test. (See GatewayQuiz Parameters for a description of these parameters, and creating GatewayQuiz assignments by importing for the general discussion of creating these assignments by importing a set definition file.)

After creating these set definition files, they can be imported to create sets in the WeBWorK course:

- First, we need to put the set definition files in the
`templates`

directory of the course. If we have access to the WeBWorK server, we may be able to copy the files directly. If not, we can use the "File Manager":- Click "File Manager" at the bottom of the "Instructor Tools" menu in the left sidebar of the course.
- Click the "Browse" button at the bottom of the File Manager and select one of the set definition files, then click "Open".
- Then click the "Upload" button. You will see the file appear in the file listing box above. Repeat this until all of the set definition files are uploaded.

- Then click "Hmwk Sets Editor" under "Instructor Tools" in the left sidebar of the course.
- Click the radio button for "Import" a set or multiple sets, select "multiple sets", and then pick the set definition files that you just uploaded to the
`templates`

directory. Don't assign these sets to anyone yet, and then click "Take Action".

At this point, we're all set. All that remains to be done is to assign the set `derivative_quiz`

(the actual GatewayQuiz assignment) to all of the users in the course that need the assignment.

There is one more thing to note about this process, the locations of all of the problem files for the sets `topic_polynomials`

, etc. We assumed that they were all in subdirectories of the `templates`

directory, `templates/topic_polynomials`

, `templates/topic_product_rule`

, etc. If these do not already exist we'd have to use the File Manager to put them there (or copy them there ourselves).

## Existing Test Banks

A final question about problem groups that might be raised is where there are good sources of problems. There are a lot of very good problems in the Problem Libraries and National Problem Library. Among the existing problem libraries are the problems developed at the University of Michigan for the Gateway Testing program there. The libraries for UM's precalculus entrance, calculus derivative, calculus II entrance and calculus II integral gateways are all freely available for academic use there. If you have questions about this, please contact Gavin LaRose.