什么优化算法更适合时间表重排?

What optimization algorithm is more suitable for timetable rescheduling?

我正在做一个项目,其中大学课程被表示为待办事项列表,其中:

如果学生将任务标记为完成 - 他的帐户 + 他标记的元素将显示在课程 activity 选项卡中,教师可以在其中:

您可以推荐我在这里使用什么优化算法来重新安排时间表(如果学生拖延,则更改待办事项元素的日期时间字段)?

实际上,我们可以在资源上使用学生 activity + 他将任务标记为完成的事实 + 如果他点击或未点击放置在待办事项元素上的 URL到外部学习material(例如Google书)。

比如遗传算法适合这个模型吗,有什么陷阱:https://medium.com/@vijinimallawaarachchi/time-table-scheduling-2207ca593b4d ?

我不确定我是否完全理解你的问题,但听起来你有一个可行的时间表,你只需要改进它。

如果是这样,遗传算法会工作得很好,但我认为像 link 中那样将所有内容都表示为二进制 'chromosomes' 可能不切实际。 您可以通过许多其他方式来表示时间表,例如在二维数组中,或为事件指定一个时段号。 您可以研究诸如 Tabu 搜索、模拟退火和 Great Deluge 和 Hill Climbing 等算法。它们都基于相似的想法,但有些比其他的更能解决某些问题。例如,如果你有一个非常粗略的搜索 space 模拟退火不会是最好的,爬山通常只能找到局部最优。

上述算法以及许多其他遗传算法和元启发式算法的一般架构是:select 使用移动运算符的相邻解决方案(例如交换一个或两个或三个事件的时间或交换房间两个事件等...),检查移动不违反任何硬性约束,使用接受策略,例如模拟退火或 Great Deluge,以确定移动是否被接受。如果是,则保留解决方案并重复这些步骤,直到满足终止条件。这可以是最大时间、达到的迭代次数或在 x 次迭代中未找到改进移动。 虽然这是 运行 记录 'best' 解决方案,因此当算法终止时,您会找到最佳解决方案。您可以根据时间表违反了多少软约束

来确定考虑的内容 'best'

希望对您有所帮助!