Course Recommender (Kate, James)

From UBC Wiki

Authors: Kate Huang, James Zhu

What is the problem?

UBC CPSC's graduation requirements can get quite complicated. We want to build a tool that recommends potential courses a student might want to take given their preferences and course history.

Our program provides the following functionalities:

  • Recommend a course based on courses you've already taken previously and your year level.
  • Get the requirements tree of a course. You can see the prereqs of a course, as well as the prereqs of all prereqs.
  • Recommend a list of courses to take next term given a list of courses you've already taken previously, your year level, and a minimum and maximum number of credits you want to take. This recommendation will also take into account coreqs.

What is the something extra?

Our program's extra functionality is that it can also recommend a course based on a keyword (and optionally year level). The keyword is searched on all courses' titles and descriptions.

What did we learn from doing this?

We got very familiar with using Prolog and the Swi-Prolog shell! We learned about using definite clauses and building logic models for an application, all in a scalable manner.

Prolog was very suitable for the task, as it is easy to build rules for courses' information such as prereqs, coreqs, title, number of credits, etc. Having a rule-based query program like Prolog is very useful for our application which was required to generate possibilities for what courses to take, or build the prereq tree. In an object-oriented language, this would require building graphs and performing many complicated graph operations and analysis.

Some challenges we ran into was that debugging would require tracing through the entire logic of the box model, which gets complicated if you have a lot of rules.

Links to code etc.

https://github.students.cs.ubc.ca/suisei/CPSC312-prolog