我正在为学校的一个辅助项目建立一个网站,学生可以参加他们需要参加的课程,他们想要或不想上课的日子,以及他们何时不能上课或不想上课。基础是有课程,每个班级在不同时间有许多部分,不同的教授可供学生选择。对于新生级别课程,每个班级可以有超过30个不同的部分。我有一个mysql数据库中的类和部分,我一直在PHP编码。
到目前为止,我有它的工作,但我想让它更快。我一直在阅读其他调度问题,但我正在寻找我正在做的具体细节。这不是从头开始制定时间表。它根据可用的部分制定时间表,并根据学生的输入进行排名。目前很少有可能的部分,它运行速度很快。但是当可能的时间表达到大约300,000时,需要大约30秒来比较和排序所有内容。我一直在通过改变计划的生成方式来改进它,但我希望更快。我从强力生成切换到使用基于树的方法。
我不是要求家庭作业帮助,也不是要求有人为我这样做。我只想指出正确的方向,已经存在的问题和算法,我可以了解。
答案 0 :(得分:1)
还记得eight queens puzzle吗?我确定希望你这样做,如果没有,先去解决它,然后回到你的日程安排任务。
您已经从蛮力变为树状结构。现在是branch and bound的时候了。无论你的“好时间表”是什么意思,170000太多了 - 你不会修剪你的树。我不认为每个学生可以有超过20-50个非常好的时间表,除非他们只上课很少并且非常灵活。
答案 1 :(得分:1)
尝试禁忌搜索或模拟退火等元启发式算法。 蛮力和分支和界限不够扩大。
按照ITC2007的定义,查看drools planner中的课程课程示例。 它可能是您用例的高级形式(不包括gui / db)。
答案 2 :(得分:-1)
看看this。它可能不是你想要的,但你可以得到一些设计思路。