根据年龄和国籍将人员分类到房间的算法

时间:2011-10-30 17:42:57

标签: algorithm sorting

我正在为我工​​作的英语语言学校开设课程。我没有得到报酬,这只是一种改善/自动化工作流程的兴趣。

这是一所住宿学校,我正在考虑自动化的一个方面是我们为学生分配空间的方式,虽然我不想要一个完整的解决方案,但我希望有人可以指出我正确的方向......建议您可能采用的方式或建议算法查看等等。

基本上在学校我们有一大堆不同的房间,从单身人士到8人宿舍。我们从世界各地获得了许多不同的国籍,我们总是努力确保每个房间都有各种国籍。如果有一个以上的国籍,我们会尝试平衡它们。年龄也很重要,我们总是把年龄相近的学生放在一起,同时仍然试图混合国籍,我们不同寻常的让学生分享两年以上的学生。

我想更一般地说,我感兴趣的是如何根据两个参数对一组给定的学生进行排序,以及附加一些规则的最佳结果。

我希望我已经清楚地解释了我想要实现的目标...在某种程度上听起来很简单,但我试图以一种简单的方式思考如何做到这一点,即按国籍排序然后按年龄排序但它并没有削减它,我知道必须有更好的方法来解决这个问题。当我在excel表单上“手动”执行此操作时,它确实非常直观。

感谢任何提供帮助/建议的人。

6 个答案:

答案 0 :(得分:2)

这是一个有趣的问题,但要回答并不容易。不知何故,它与细分和垃圾箱包装或切割库存问题有关。您可能也想寻找拓扑排序。您可以在Drools中寻找可以定义此类规则的业务逻辑平台。

答案 1 :(得分:1)

首先,您可能会发现这很有趣:Stable Room-mates Problem (wikipedia)。不幸的是,它没有回答你的问题。

尝试genetic algorithm

使用遗传算法有三个主要标准:

  • 将解决方案表示为可变数组的能力。我们可以有一个整数数组,使得[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)个索引对,并使任何具有国籍差异的学生(我们可以通过对索引对进行预处理和散列来找到)。仔细地这样做(比如看一下在靠近之前分开的指数)可以进一步改善运行时间。感觉它应该是聚合时间,但我认为在说出之前首先要解决一些细微之处。