Efficient scheduling of university courses

后端 未结 5 1289
耶瑟儿~
耶瑟儿~ 2020-12-13 07:38

I\'m currently working on a website that will allow students from my university to automatically generate valid schedules based on the courses they\'d like to take.

相关标签:
5条回答
  • 2020-12-13 08:03

    The problem you're describing is a Constraint Satisfaction Problem. My approach would be the following:

    • Check if there's any uncompatibilities between courses, if yes, record them as constraints or arcs
    • While not solution is found:
      • Select the course with less constrains (that is, has less uncompatibilities with other courses)
      • Run the AC-3 algorithm to reduce search space

    I've tried this approach with sudoku solving and it worked (solved the hardest sudoku in the world in less than 10 seconds)

    0 讨论(0)
  • 2020-12-13 08:07

    This is a hard problem. It you google something like 'course scheduling problem paper' you will find a lot of references. Genetic algorithm - no, dynamic programming - yes. GAs are much harder to understand and implement than standard DP algos. Usually people who use GAs out of the box, don't understand standard techniques. Do some research and you will find different algorithms. You might be able to find some implementations. Coming up with your own algorithm is way, way harder than putting some effort into understanding DP.

    0 讨论(0)
  • 2020-12-13 08:08

    The way you're currently generating combinations of sections is probably throwing up huge numbers of combinations that are excluded by conflicts between more than one course. I think you could reduce the number of combinations that you need to deal with by generating the product of the sections for only two courses first. Eliminate the conflicts from that set, then introduce the sections for a third course. Eliminate again, then introduce a fourth, and so on. This should see a more linear growth in the processing time required as the number of courses selected increases.

    0 讨论(0)
  • 2020-12-13 08:13

    Did you ever read anything about genetic programming? The idea behind it is that you let the 'thing' you want solved evolve, just by itsself, until it has grown to the best solution(s) possible.

    You generate a thousand schedules, of which usually zero are anywhere in the right direction of being valid. Next, you change 'some' courses, randomly. From these new schedules you select some of the best, based on ratings you give according to the 'goodness' of the schedule. Next, you let them reproduce, by combining some of the courses on both schedules. You end up with a thousand new schedules, but all of them a tiny fraction better than the ones you had. Let it repeat until you are satisfied, and select the schedule with the highest rating from the last thousand you generated.

    There is randomness involved, I admit, but the schedules keep getting better, no matter how long you let the algorithm run. Just like real life and organisms there is survival of the fittest, and it is possible to view the different general 'threads' of the same kind of schedule, that is about as good as another one generated. Two very different schedules can finally 'battle' it out by cross breeding.

    A project involving school schedules and genetic programming: http://www.codeproject.com/Articles/23111/Making-a-Class-Schedule-Using-a-Genetic-Algorithm

    I think they explain pretty well what you need.

    My final note: I think this is a very interesting project. It is quite difficult to make, but once done it is just great to see your solution evolve, just like real life. Good luck!

    0 讨论(0)
  • 2020-12-13 08:17

    Scheduling is a very famous constraint satisfaction problem that is generally NP-Complete. A lot of work has been done on the subject, even in the same context as you: Solving the University Class Scheduling Problem Using Advanced ILP Techniques. There are even textbooks on the subject.

    People have taken many approaches, including:

    • Dynamic programming
    • Genetic algorithms
    • Neural networks

    You need to reduce your problem-space and complexity. Make as many assumptions as possible (max amount of classes, block based timing, ect). There is no silver bullet for this problem but it should be possible to find a near-optimal solution.

    Some semi-recent publications:

    • QUICK scheduler a time-saving tool for scheduling class sections
    • Scheduling classes on a College Campus
    0 讨论(0)
提交回复
热议问题