2014-07-17 52 views
0

因此,在我们学校,我们有一天每个人都参与不同的活动。 每个项目可以有10个成员。整天分成2或3个不同的块,其中分配给活动的学生改变(所以在块1中,学生x参与活动a,在活动d中参与第二块)。 在这一天开始之前,我们给出一份名单,让每个学生可以告诉我们他最喜欢的3件(或4件)活动(他只参加了其中的两件,这些活动再次从大部分“最喜欢的”到最少的)想参加。 现在我们的工作是以这样一种方式分配这些学生,使得我们在学生中获得最好的总体满意度(所以每个人或多或少都会获得他/她所选择的活动)。什么是解决这个问题的好算法?对编程(特别是Java)非常熟悉,所以这种方法也足够了(尽管一些(伪)代码也会很好:)) 除了计算这样的“满意度”之外,是否有任何方法可以做到这一点?每种可能解决方案的价值?通过活动分发成员的算法(带有个人偏好)

一个可选的功能是,如果有人不能进入他/她的项目,他们会进入一个类似的(也这听起来是一种性别歧视,你可以例如评价“女性”/“男性“这个活动是根据这个规模选择类似的活动)

我希望这个问题适合stackexchange,如果它是完全偏离主题我会很乐意告诉我一个更合适的堆栈。

期待您的建议, 约翰

+0

是否有任何最低的项目需要发生的学生或1是足够的 –

+0

将不得不比一个或两个在一个组:) :) – joz

回答

0

如果学生排名每个自己喜爱的活动(1-4)那么它的简单分配这些活动的权重(1-4)。您将每个在某个级别上加权某项活动的人群进行分组,并将学生人数与活动数量进行比较。如果有更多的学生比点选择的方法在空中。我会说随机取得公平性,或者如果你想要得到幻想,你可以每天跟踪它,这样每个人都有机会参加一个最喜欢的活动。

如果有比学生更多的老虎机,那么你可以投票评定给它评分为3分的人,等等。

这似乎是一个公平的地方,至少要开始。

+0

这是一个好主意,但如何确定谁必须去哪个街区进行哪项活动,如果不是每个人都可以参加所有那里两项最受欢迎的活动(您还必须确定谁必须参与哪个街区的活动,以便总体满意度最高) – joz

+0

那么if有人错过了一项活动,你可以提高他们的下一个最高的权重(3等4等),增加他们进入更高评级活动的机会。 –

0

我没有一个算法给你,但有一个包可以为你做很多工作。该网站是http://www.optaplanner.org/,它是Drools项目的一部分。

配置应用程序需要一些工作。当你完成配置时,你会得到一些暗示,这个任务有多困难,以及为什么没有简单的算法可以完成这项工作。

+0

你有什么想法,我可以如何引入与不同块(和加权分配)的问题?我需要配置哪种类型的问题? – joz

+0

嗯。我没有详细阅读你的问题。如果每个学生都可以进行两项活动,那么为什么不将第一名和第二名分配给第一名和第二名的学生?这将最大限度地满足。 –

+0

但只有当每个人都可以得到他/她最喜欢的活动时才有效......但是如果没有足够的空间单独不足够 – joz