Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为学校生成时间表使用哪种算法_Algorithm_Scheduling_Data Structures - Fatal编程技术网

Algorithm 为学校生成时间表使用哪种算法

Algorithm 为学校生成时间表使用哪种算法,algorithm,scheduling,data-structures,Algorithm,Scheduling,Data Structures,我正在开发一个简单的应用程序,它将为学校生成时间表(每日计划表)。我已经读过算法的基础知识,但不知道从哪里开始 问题: 将教师分配到班级时要考虑很多限制,如: 1) 主题 2) 教师的专业知识 3) 连续不超过2节课。。etc 不用说,不应该有重叠。基本上,我需要分配N名教师到M个班级,每天有固定的工作时间(8) 输入: 1) 课程总数 2) 教师及其学科专业知识 3) 每堂课的科目/课程 4) 每天每节课的授课次数 5) 其他灵活的限制,如教师每天的最低/最高工作时间、教师每周的总工作时间等

我正在开发一个简单的应用程序,它将为学校生成时间表(每日计划表)。我已经读过算法的基础知识,但不知道从哪里开始

问题:
将教师分配到班级时要考虑很多限制,如:
1) 主题
2) 教师的专业知识
3) 连续不超过2节课。。etc

不用说,不应该有重叠。基本上,我需要分配N名教师到M个班级,每天有固定的工作时间(8)

输入:
1) 课程总数
2) 教师及其学科专业知识
3) 每堂课的科目/课程
4) 每天每节课的授课次数
5) 其他灵活的限制,如教师每天的最低/最高工作时间、教师每周的总工作时间等

我的问题:
1) 将其视为具有多个约束的分配问题是否正确?
2) 我应该使用哪种算法?(匈牙利算法?)
3) 我应该一次获得整个约束集,然后生成表,还是应该在中间步骤中完成


我是一个学习/实现算法的初学者,因此任何能为我指明正确方向的帮助都将不胜感激!谢谢。

您选择了一个问题作为开始。这样的调度优化是NP完全的。关于如何处理这样的问题有很多论文,这类问题被称为约束满足。您可以执行最简单但也非常耗时的穷举搜索,如果您有几个以上的类,它将无法工作。你可以看看Sover基金会,它是一套用于解决这些问题的.NET工具套件。斯科特·汉斯曼为此做了一个播客 在这里,你可以在这里找到更多关于它的信息
. 如果你想自己做,试着看看GSAT或者其他一些进化算法看起来很有趣。

这个问题每周至少会出现一次,答案(包括我的)总是一样的。我认为如果调度算法不存在,我们应该在调度算法上创建一个特定的标记


我要重申,对于这样的调度问题,最合适的解决方法是在约束编程领域。虽然其他优化技术可以解决小问题,但对于某些约束条件,公式通常是痛苦的。考虑所有要为一些简单约束创建的整型变量。因为问题通常需要一组可行的计划(或确定不可行性),而不是一个最优的解决方案,所以CP是首选方法,因为这是它的设计目的。大多数其他方法要求用户“强制”一个最优性条件,以解决实际不存在的问题

我发现了一个PostScript文件,其中讨论了一个禁忌搜索()算法,用于将教师分配到班级()。这主要是数学启发法。我希望它能给你一些指导。这是一个复制品。几周前我回答了这个问题: