首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将人分成每个组具有最大多样性的组的算法

将人分成每个组具有最大多样性的组的算法
EN

Stack Overflow用户
提问于 2017-09-08 19:10:16
回答 2查看 1.8K关注 0票数 3

我想要一种算法来为即将到来的会议将人们分组。有很多人,来自不同的地区,部门,性别等,他们想要尽可能地将人们分开,以便在每个群体中获得多样性。

那么,(比方说) Excel中是否有一个众所周知的算法或工具或其他东西来解决这个问题,这肯定是非常常见的?

为了简化问题,假设有n个人(假设100人)被分成g个组(例如6个),并且每个组中应该有接近偶数的数字。

他们有地区:伦敦,北部,中部,西部,苏格兰(主要是伦敦)

性别:女性,男性,其他

部门:销售、支持、管理

等级:6个不同等级

其他信息每个类别的人员比例不同,即销售人员比管理人员多。

可能在排序中有一个优先事项,他们更想要一个均匀的性别划分,而不是一个均匀的部门划分。

我在C#中工作,但我很乐意读入任何内容。

谢谢!本

EN

回答 2

Stack Overflow用户

发布于 2017-09-08 19:32:05

让我们首先定义一个效用函数。我们想要一个准确但快速计算的模型,那么与每个类别的实际总比例相比,每个类别的人在组中的比例有多接近呢?

因此,如果一个8人组有5名男性,3名男性,4名销售人员和4名支持人员,但男性和女性的总人数相等,2/3的人是销售人员,另外1/3的支持人员将是效用函数-((5/8-1/2)+(3/8-1/2)+(4/8-2/3)+(4/8-1/3))

前面有一个减号的原因是效用函数随着多样性的增加而增加。

一旦您定义了一个效用函数,就有很多方法可以使用它,例如,包括模拟退火。然而,为了你的目的,我推荐随机重新开始爬山,因为我认为这将是足够的。

将人们随机分配到不同的组,然后计算效用函数。从一个组中随机选择一个人,从另一个组中随机选择另一个人,如果当你交换他们时效用会更高,就这样做。继续交换,循环数(例如,200),然后记录赋值和效用函数。从新的随机分配重新启动,并将整个过程重复几次。选择效用函数最高的那个。

如果这一点不清楚,请让我澄清。

票数 2
EN

Stack Overflow用户

发布于 2017-09-08 19:45:04

无论如何,这都不是一个微不足道的问题,即使不是不可能用精确的算法来解决,也是很难的。我不知道学术上的类比,但这是随机/概率优化的完美用例。

你需要一个适应度函数,它可以用一个数字来表达当前赋值的多样性,例如,一些简单直观的东西,比如:

代码语言:javascript
复制
sum
  for each group
    for each trait
      trait_weight * abs(%_occurrence_in_group - %_occurrence_in_population)

(在上述情况下,越低越好)

选择一种方法,如模拟退火或遗传算法,并搜索极值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46115135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档