所以在我的学校,每个人都参加不同的活动。 每个项目可以有10个成员。整天分为2或3个不同的区块,其中分配给活动的学生改变。(因此在区块1中,学生x参加活动a,并且在活动d的第二区块中)。 在这一天开始之前,我们提供制作清单,其中每个学生可以告诉我们他最喜欢的3个(或4个)活动(他只参加其中两个,这些再次从大多数“最喜欢的”订购到最少)他想要的参加。 现在我们的工作是以这样的方式指派这些学生,使我们对学生的整体满意度最高(所以每个人或多或少都做了他/她选择的活动)。什么是解决这个问题的好算法?(我'我非常熟悉编程(尤其是java),所以这种方法也足够了(虽然一些(伪)代码也很棒:)) 有没有办法做到这一点,除了为每个可能的解决方案计算这样一个“满意度”值?
一个可选的功能是,如果有人无法进入他/她的项目,他们会进入一个类似的问题(这听起来有点性别歧视,例如你可以评价“女性”/“男性”此活动是根据此比例选择类似的活动)
我希望这个问题适合stackexchange,如果它完全偏离主题,我很乐意告诉我一个更合适的堆栈。
期待您的建议, 约翰
答案 0 :(得分:0)
如果学生对他们最喜欢的活动(1-4)进行排名,那么为这些活动分配权重(1-4)很简单。您将每个在特定级别对某个活动进行加权的人进行分组,并将学生数量与活动数量进行比较。如果学生的数量多于斑点,那么选择的方法就在空中。我会说随意的公平,或者如果你想得到想象,你可以每天跟踪它,这样每个人都有机会参加一个喜欢的活动。
如果有比学生更多的广告位,那么您可以轮询那些评分为3的人,依此类推。
这似乎是一个至少可以开始的合适场所。
答案 1 :(得分:0)
我没有为您准备算法,但有一个包可以为您完成大部分工作。该网站是http://www.optaplanner.org/,它是Drools项目的一部分。
配置应用程序需要一些工作。当你完成配置时,你会得到一些关于任务有多难的暗示,以及为什么没有简单的算法可以完成这项工作。