关于语言不可知论:有限制的时间表计算算法

Algorithm for computing timetable given restrictions

我正在考虑一个假设性的问题,并从算法的角度寻求如何解决问题的指导。

问题:

考虑一所大学。您有以下对象:

  • 教员。每位员工都会教授一篇或多篇论文。
  • 学生。每个学生都要拿一份或多份论文。
  • 房间。房间里有一定数量的学生,并装有一定类型的设备。
  • 论文。需要一定类型的设备,每周需要一定的时间。

考虑到入学信息(即每篇论文中录取了多少学生,以及分配了哪些员工教授每篇论文),我如何计算一个遵守以下限制的时间表:

  • 工作人员一次只能教一件事。
  • 学生一次只能读一篇论文。
  • 房间只能容纳一定数量的学生。
  • 需要某种设备的纸张只能放在提供这种设备的房间里。
  • 营业时间为周一至周五、8-12和1-5。
  • 讨论:

    事实上,我并不太关心上面概述的情况——我对这类问题很好奇。乍一看,这似乎是一个很好的适合遗传算法,但适合这种算法的函数将是非常复杂的。

    解决这种约束满足问题的好方法是什么?

    我想可能没有办法完美地解决这一问题,因为学生们可能会把导致不可能的情况的论文结合起来,特别是随着学生人数和论文数量的增加。


    基于遗传算法,我不认为适应度函数会非常复杂,恰恰相反。

    基本上,您只需检查每个约束(您只有5个)的候选解决方案(无论编码如何),并为它们分配一个权重,以便当约束不满足时,将权重添加到可以表示适合性的总分中。

    在这种情况下,您只需最小化适应度函数(因为可能的最佳适应度是0,这意味着满足了所有约束条件),然后让GA计算出数字。

    编码需要一些计算,但一旦完成,它应该是简单的,除非我遗漏了一些东西,当然:)


    这个问题的一个非常有限的版本是NP完全。

    当只有一个学生可以拿一篇论文时,考虑一下这个问题。

    现在,对于一个给定的时间段(比如说,纸是一整天教的),你可以构建一个三分图,有房间、纸和学生,如果学生愿意,纸和学生之间有一个边缘。在纸和可能的房间之间添加边。

    我们现在看到三维匹配问题是您问题的一个例子:您需要为特定的时间段选择一个不重叠的(学生、纸张、房间)组合。

    对于一般问题,你最好用一些启发式方法。对不起,我帮不了你。

    希望有帮助。