CurricularAnalytics.jl
CurricularAnalytics.jl copied to clipboard
coding "or" prerequistes
I'm very interested to use this tool to analyze our current biology B.S. curriculum as we start to make a few tweaks. However, we have a number of "or" prerequisites. We have three groups of mid-tier courses, with four courses in each group. Students must take at least one course in each group for the major. Most upper division courses then have as a prerequisite any one of the courses from a group.
For example, let's take the Ecology and Evolution group. It has four courses we'll call:
- BIOL 301
- BIOL 302
- BIOL 303
- BIOL 304
Then there's an upper division BIOL 401, that has prerequisites:
MATH 370 and (BIOL 301 or BIOL 302 or BIOL 303 or BIOL 304)
I could make one "course" that just represents the group to fix the prerequisite problem, but then the individual courses would still need to be listed because after the one that meets the degree requirement, additional courses from the group can count as electives.
Is there any way to code "or" prerequisites in Curricular Analytics?
Hi @backyardbiomech, thanks for taking the time to make this suggestion. We've had a few users reach out about this issue and here are our current thoughts:
For the purpose of computing the complexity of a curriculum, OR relationships are usually irrelevant. All that matters is that you place one of the two (four) courses belonging to the OR relationship into the curriculum so that the prerequisite structure is captured in the curriculum graph. Caveat: If the two (or more) courses involved in the OR relationship have their own prerequisites, and these prerequisites differ, then there is the potential that the course you choose to include in the curriculum will slightly change the overall curricular complexity. In this case, the complexity of the curriculum is actually a range, and not a single value. To determine the range, simply create a different curricula for each of the possible selections of the OR’ed prerequisites that lead to differing curricular complexities; the minimum and maximum curricular complexity values obtained will give you the curricular complexity range for the curriculum.
Given the caveat that there could be a range of complexity values we have considered adding support for representing requistes as a boolean formula using something like Julog. For example (Course A ∧ Course B) ∨ (Course C)
or the example you provided, MATH 370 and (BIOL 301 or BIOL 302 or BIOL 303 or BIOL 304)
.
Perhaps the biggest challenge coming up with a way for users to easily input these requirements. Currently in our file format users enter the requisites as a semi-colon seperated list of course IDs under one of three types. One solution is to allow users to enter groupings like ((1) AND (2 OR 3))
, but I suspect this would be a big pain point for many of our users.
I'm interested in this idea as well; it complicates some analysis as well (e.g., how to calculate a course's complexity). A potential workaround for reading inputs might be 34;14(space)36;14
or (34;14),(36;14)
for examples that require taking either 34
or 36
as a prereq. Then previous examples with default AND semantics are supported, and syntactic sugar can help absorb complexity.
That doesn't solve analysis and the 'or' semantics will also complicate visualization—but I'm interested in thinking about the outcomes on how to use it. The cartesian product of ORs will produce a full set of candidate scenarios, and selecting the lowest complexity among those might be a way to handle analysis.