2017-04-14 57 views
1

进出口寻找该分配n个学生米课程,每个学生定义了三个优先算法和每门课程都有一个分钟最大数和也是一个优化计数介于最小值和最大值之间。课程分配学生的三项重点工作

我至今是:

  • 课程数组
  • 学生与属性的数组,他们的三个重点

1)洗牌课程; shuffle students

2)让学生循环并暂时将其分配到他们的第一选择。
如果他们的第一选择是全部的,比如说10个学生,我们需要确定11个学生中的哪个要放弃。 由于我们没有课程的学生优先级找到最弱的学生放弃,我们希望找到一个优先级为2的学生开放插槽

这可以重做优先级2和3,但在它并不总是得到最好的结果..

+0

似乎你有两个相互冲突的目标(学生的优先次序和最佳点击次数)。你需要正式确定这一点。此外,您需要定义使用中的损失。常见的是绝对差分和(l1)和平方和差分(l2)。两者会有很大的不同。 – sascha

+0

学生的优先考虑绝对是重要的一部分。最佳课程数是相当可选的。最后,算法应该找到一个解决方案,将所有学生的偏差尽可能减少到最低程度 –

+0

这是不够的。两种惩罚都达到了这一点,但损失是不同的。阅读关于损失函数及其影响的一些基本知识。 – sascha

回答

0

最接近的类似问题可能是stable marriage problemhospital/resident matching problem

您可能正在寻找最佳解决方案,这意味着,在给定分配的情况下,学生和课程都不会选择其他任务(学生=>课程)。

+0

恰好在我的情况下,课程没有偏好,只有学生。我研究了稳定的婚姻问题,但我们有两个同样大小的集合。随着课程有点不同,因为我们有最小,最大和最佳 –

0

如果您创建变量Xij,其中Xij = 1,如果学生i被分配到课程j,那么您可以将约束记录为线性等式和不等式:0 < = Xij < = 1,SUM_j Xij =每个学生只能分配一门课程,分< = SUM_i Xij < =最大 - 每门课程有最少和最多学生人数。学生的快乐总和是SUM_ij Xij Pij,其中Pij可能是3,2,1或0,这取决于课程j是学生i的1,2,3或其他选择。

然后,你使用线性规划来最大化学生的幸福感。如果你遵循通过https://en.wikipedia.org/wiki/Integer_programming#Using_total_unimodularityhttps://en.wikipedia.org/wiki/Unimodular_matrix#Common_totally_unimodular_matrices我想你可以假设得到的溶液将整数值为Xij,因此它必须是0或1

试图寻找解决方案,其中每门课程已接近其最佳规模,我建议你也尝试找到解决办法,让你减少最大值,并增加每道菜的最小值,使它们接近最佳大小。举例来说,你可以在补贴s上找到二进制排序,找到解决方案的最小值s,并且为每个课程选择的最小值和最大值都不会超过该课程的最优值。