Course:CPSC312-2023/UBC-Course-Scheduler

From UBC Wiki

UBC Course Scheduler

Authors: Yu, James

What is the problem?

Our specific goal is to implement the course scheduler for UBC students. Our application is going to be Web based. The users select the number of credits to finish, the specific course name & number, the time span they don’t want to have the course, favorite courses or course year level, then the website provides the optional course schedules according to their requests. There are several challenges in this project. One of them is that how feasible making a web app in Prolog is, compared to a widely known imperative language like Javascript. Another challenge is that the problem solving for course scheduling given the student's preference and the pre-defined facts about the courses.

What is the something extra?

  • Having web app as the user interface and this makes the user easy to request the form and see the recommended schedule.
  • Allowing users to use natural language to query the the course relations. For example, "what courses require <course___>". One challenge will be preserving context between queries if, for example, after submitting the above query the user then submits "but consists only of CPSC courses".

What did we learn from doing this?

Prolog is basically useful since it's well-suited for representing and reasoning with complex knowledge and relationships between entities. This enables us to apply the feature to the UBC course scheduler to select the schedules based on the user's request.

Also, because our application is web-based, we learned how to create a basic Prolog web backend that allows a user to query the knowledge base via browser. For the Natural-Language portion of our project our project, we gathered facts about UBC courses and experimented with different ways of storing facts in our knowledge base, and determined what should/shouldn't be an individual entity, and what should. We also learned how our structured-language grammar relates to our fact structure.

Testing is easy due to its declarative nature and its ability to reason logically about a problem. With Prolog, we can express our program as a series of logical rules and facts, which can be easily tested by running queries against them.

Links to code etc

https://github.com/yunishimura0716/PrologCourseScheduler