Currently, the course-seats in our department are allocated in a first-come-first-served manner: each student tries to enter the system the moment it opens. If they succeed, they get all the best courses; if they are several minutes late, they get only the least wanted courses. We would like to change the system so that students first rate the courses according to their personal preferences, and then - after everyone finishes rating - an algorithm decides on the course allocation in a fair way.

Currently, the GUI gives each student 1000 points, which they can divide between the 25 courses in any way they see fit. Our main worry is that students will focus on the courses that they want the most (e.g. the top 10), give all points to these courses, and pay no attention to the other 15 courses. Why is this a problem? Because each student must get 5 courses to finish their degree, and it may be impossible to give each student 5 courses from among their top 10. In this case, our algorithm can try to give students some of their bottom 15 courses; but it has no information about their preferences among these bottom 15 courses, so the results will not be good.

My question is: how can we design the GUI in a way that will encourage students to give a different number of points to each course, even to their bottom-ranked courses?

  • 1
    Here is a codebase I made that does the assigning as ideally as I found possible. The associated GUI was a system whereby students ranked their top 5 courses. Could certainly be adapted by a competent coder. github.com/tdchristian/club-sandwich Aug 5, 2023 at 0:01
  • @LukeSawczak Thanks! Is there a way to see the GUI in action? Aug 6, 2023 at 7:00
  • The GUI itself was very simple. You can see a demo here (submit button hidden). Aug 6, 2023 at 13:19

3 Answers 3


The usual way is to allow individuals to choose their preference, and then a system assigns the spots.

For example, the University of Buenos Aires is free, public, and excellent, and unrestricted, which presents quite a problem. Therefore, there are a lot of students, which means not all of them will be able to take the course they want. So they sign up for courses in order of preference, and an algorithm randomly defines the spots. Students may take the assigned course or wait for the next semester or year, depending on the course, and try their luck.

A similar system is used in primary education, only in this case, parents choose schools. They can choose any school within the district, but they need to select four (ranked), preferably within the same neighborhood or commune. However, there's an algorithm that gives preference to children who have siblings in the school, then those with disabilities who are closer to the school, followed by distance (and a few other factors I don't remember now). If there are still free places, those spots are assigned randomly to those who are not in the same zone as the school. Otherwise, children are assigned to the school within the same commune based on their preference rank.

The difference between both systems is that in the first case, students will continue studying their chosen career, but the courses are assigned by preference first, then randomly. In the second case, parents choose schools rather than courses, and eligibility is more granular. But in both cases, education is secured.

I mention this because both systems secure education and both systems deal with a massive amount of students, so it might serve as a starting point for your system.

  • Thanks. I am mainly interested in desigining the GUI for such a system. Do you maybe have pictures showing how their GUI looks like? Aug 6, 2023 at 6:48
  • This isn't a GUI; it's a methodology for deriving an algorithm.
    – Devin
    Aug 7, 2023 at 16:53

I mean, you can sort of force this by

  • require that the student assigns a number to every course
  • disallow any two numbers the same (form validation)

However, this will be annoying if it's a lot of courses. And really, I think you may not have to do anything? Like, if I would love to be in Course XY so much that I'm willing to maximize my chances at the cost of not choosing anything else actively, why not let me? Another person may perhaps divide their points equally, so they can be pretty sure that at least 3/5 (or something) of their courses are to their linking.

Seems fair to me already.

By the way, kudos for stepping away from first-come-first-serve. Horrible system that's unreasonably disadvantageous to people with busy lives, weaker devices and bad internet connection.

  • "I would love to be in Course XY so much that I'm willing to maximize my chances at the cost of not choosing anything else actively, why not let me?" My concern is that maybe students are not entirely aware of the consequences. Of course, I can tell them, and then say "it's your problem", but at the end, the students will be unhappy even if it's their problem. Aug 6, 2023 at 6:42

What puzzles me is, if there are no restrictions on which courses the students can choose, why do you offer so many courses that most of them don't want and so few courses of courses that they do want?

If a course is very unpopular, why bother offering it?
If a course is very popular, why not offer several sessions of it?

The obvious system is:

  • Ask each student to list say 7 course choices in order of preference.
  • Working down from the most popular course, divide the demand by the maximum class size, rounding up, and schedule that many instances of the course.
  • If the division will create classes smaller than the minimum class size, then round down instead (and a few students will not get their top 5).
  • If it's impossible to schedule all the classes without any conflicts, then a small number of students will have to be reassigned.
  • When making reassignments for either of these reasons, ensure that there are no two students where the difference between their number of reassignments is greater than 1 (though in practice it shouldn't be necessary to bounce any student more than once).

The result will be:

  • The vast majority of students will get their 5 favourite choices.
  • A few students will end up with 4 of their favourites.
  • Course instructors will be teaching classes where almost all students had this course as one of their favourites.
  • Time and money won't be wasted teaching courses to students that don't want to take.
  • The overall ratings for how much students enjoy their courses will increase.
  • The overall ratings for how much instructors enjoy their courses will increase.
  • Everyone wins.
  • "If a course is very unpopular, why bother offering it? If a course is very popular, why not offer several sessions of it?" These are good questions, but they are beyond my control... the department decides which courses are given based on their own considerations (for example, there may not be enough staff members for teaching the most wanted courses). My task is to allocated the existing courses among students in the fairest way. Aug 6, 2023 at 6:45
  • @ErelSegal-Halevi, yes, I also worked for a university, and there were times when "offer what's easy to schedule" or "offer what the profs want to teach", rather than "offer what our students need", was the administration's philosophy. (A similar but unrelated decision resulted in the Computer Science Club's sale of buttons saying "It doesn't have to make sense — it's [name of university] policy".) Aug 6, 2023 at 13:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.