我正在为我工作的英语语言学校开设课程。我没有得到报酬,这只是一种改善/自动化工作流程的兴趣。
这是一所住宿学校,我正在考虑自动化的一个方面是我们为学生分配空间的方式,虽然我不想要一个完整的解决方案,但我希望有人可以指出我正确的方向......建议您可能采用的方式或建议算法查看等等。
基本上在学校我们有一大堆不同的房间,从单身人士到8人宿舍。我们从世界各地获得了许多不同的国籍,我们总是努力确保每个房间都有各种国籍。如果有一个以上的国籍,我们会尝试平衡它们。年龄也很重要,我们总是把年龄相近的学生放在一起,同时仍然试图混合国籍,我们不同寻常的让学生分享两年以上的学生。
我想更一般地说,我感兴趣的是如何根据两个参数对一组给定的学生进行排序,以及附加一些规则的最佳结果。
我希望我已经清楚地解释了我想要实现的目标...在某种程度上听起来很简单,但我试图以一种简单的方式思考如何做到这一点,即按国籍排序然后按年龄排序但它并没有削减它,我知道必须有更好的方法来解决这个问题。当我在excel表单上“手动”执行此操作时,它确实非常直观。
感谢任何提供帮助/建议的人。
答案 0 :(得分:2)
这是一个有趣的问题,但要回答并不容易。不知何故,它与细分和垃圾箱包装或切割库存问题有关。您可能也想寻找拓扑排序。您可以在Drools中寻找可以定义此类规则的业务逻辑平台。
答案 1 :(得分:1)
首先,您可能会发现这很有趣:Stable Room-mates Problem (wikipedia)。不幸的是,它没有回答你的问题。
使用遗传算法有三个主要标准:
将解决方案表示为可变数组的能力。我们可以有一个整数数组,使得[i]是第i个学生的空间。
状态的突变应产生可预测的结果。在我们的例子中,这是事实。改变阵列可以预测在房间之间改变学生。
易于编写快速健身功能。编写O(n)适应度函数应该不会太难。
这是一个有趣的问题。我会尝试用这种方法编写一些代码,我们会看到会发生什么。
答案 2 :(得分:1)
怎么样,你认为一个房间是排斥已经拥有的国籍学生的东西,并吸引了已经拥有的学生。年龄越接近平均年龄,吸引的越多,X族的人越多,如果排斥X族的人就越多。
然后,您可以为每个新学生添加,遍历每个房间,看看哪个更吸引它。我想如果房间是空的,你可以将所有的力都设置为0.此外,你会有两个常数乘以两个“力”的每一个,所以你可以根据重要性与重要性相同的重要程度进行校准。是有不同的国籍。
答案 3 :(得分:0)
我会分析每个学生并根据他/她的年龄和年龄创建一个“个性”向量。国籍。然后我会对矢量进行排序,并且可能在排序后对结果进行一些加扰以鼓励多样性。
答案 4 :(得分:0)
“在优化某些数量时将约束与约束分配给y”的一般主题属于运筹学研究或更具体地http://en.wikipedia.org/wiki/Mathematical_optimization。通常的方法是正式指定问题并使用通用优化求解器,例如http://en.wikipedia.org/wiki/List_of_optimization_software中列出的那个。
试一试,使用现有求解器的正式规范语言相当容易学习,无需调试复杂算法就可以获得最佳解决方案。
答案 5 :(得分:0)
形式化约束和参数将很有用。让我们假设对于1 <= i <= 8,我们有n_i个可用的大小为i的房间。现在让我们强加一个严格的约束,在特定的房间S,每两个学生a,b \在S中,我们有:
|Grade(a) - Grade(b)| <= 2 (1)
现在我们对优化“多样性”功能很感兴趣,这种功能直观地表达了我们希望房间尽可能混合的想法。所以我们可以将此目标表示为:
max over all arrangements {{ Sum over all rooms S of DiversityScore(S) }}
where we have DiversityScore(S) = # of Different Nationalities in the Room
这是最常规的设置,但显然所有安排的最大值在计算上都不可行。现在让我们将此作为一种具有硬等级约束的图形问题。将所有学生表示为图G中的顶点。如果学生满足约束(1),则连接两个顶点。现在这个图中的一个集团代表了一组学生,他们都可以放在同一个房间里。现在以贪婪的方式进行。选择规模最大的4个群体,其中多样性得分最高。然后将它们放在一个房间里继续,直到所有房间都满了。这种集团搜索方法也可以包含有用的性别约束,但不是Clique的发现是NP难问题。
在尝试提出可能更快的内容之前,让我们考虑如何削弱硬约束(1)。我们可以通过在图片中包含边缘权重来按摩我们的图形公式。因此,如果满足硬约束,则表示从i到j的边缘权重为1.如果两个学生i和j偏离年龄大于2,则表示边缘权重为1 /(年龄差异)^ 2或其他。然后,一个集团的分数应该是集团边缘权重与一些多样性分数的乘积。然而很明显,现在问题出在一个完整的图形上,这只是我们希望避免的一般优化,所以我们需要施加一些硬限制来减少图形的连通性。
根据年龄对所有学生进行排序,因此我们有一个排序数组,其中[i]中的所有学生都具有相同的年龄,并且[i]中的所有学生都比[j]中的所有学生都更老&LT;一世。 现在考虑每对i,j,其中有O(n ^ 2),其中我们也有| Age [i] - Age [j] | &lt; = 2.找到最大的不同国籍的学生群体并将他们放在一起。我们连续迭代满足硬约束的O(n ^ 2)个索引对,并使任何具有国籍差异的学生(我们可以通过对索引对进行预处理和散列来找到)。仔细地这样做(比如看一下在靠近之前分开的指数)可以进一步改善运行时间。感觉它应该是聚合时间,但我认为在说出之前首先要解决一些细微之处。