我有一个调度难题,我正在寻找使用R的建议/解决方案。
上下文
我正在协调一系列实时在线小组讨论,其中注册参与者将根据其可用性进行分组。在一项调查中,28名参与者(id)表示周一至周六(18种可能性)的早晨,下午或晚上(上午,下午,下午)可用性。我需要生成4-6个参与者的组,这些参与者可以同时使用,无需替换(这意味着他们只能被分配到一个组)。一旦分配,小组将每周同时开会(即A组成员将始终在周一早上见面)。
问题
目前正在手动(由人工)实现组分配,但是更多参与者优化组分配将变得越来越具有挑战性。我有兴趣找到一种有效实现相对平等的群体位置的算法,并且尊重其他因素,例如人的时区。
示例数据
示例数据采用长格式,位于R脚本here。
>str(x)
'data.frame': 504 obs. of 4 variables:
$ id : Factor w/ 28 levels "1","10","11",..: 1 12 22 23 24 25 26 27 28 2 ...
$ timezone: Factor w/ 4 levels "Central","Eastern",..: 2 1 3 4 2 1 3 4 2 1 ...
$ day.time: Factor w/ 18 levels "Fri.after","Fri.am",..: 5 5 5 5 5 5 5 5 5 5 ...
$ avail : num 0 0 1 0 1 1 0 1 0 0 ...
前12行数据如下所示:
> head(x, 12)
id timezone day.time avail
1 1 Eastern Mon.am 0
2 2 Central Mon.am 0
3 3 Mountain Mon.am 1
4 4 Pacific Mon.am 0
5 5 Eastern Mon.am 1
6 6 Central Mon.am 1
7 7 Mountain Mon.am 0
8 8 Pacific Mon.am 1
9 9 Eastern Mon.am 0
10 10 Central Mon.am 0
11 11 Mountain Mon.am 0
12 12 Pacific Mon.am 1
理想解决方案
一种算法,用于最佳地定义在day.time
和avail
上完全匹配的组(大小= 4到6),同时最小化其他更灵活的因素(在这种情况下为timezone
)的差异。在最终结果中,参与者应该只存在于一个组中。
答案 0 :(得分:0)
好的,所以我对此并不是最了解,但是你看过K-Means聚类算法了吗?您可以指定所需的群集数量以及要考虑的算法变量。然后,它会将数据聚集到指定数量的聚类中,也就是您的类别。
您怎么看?
参考文献:
https://datascienceplus.com/k-means-clustering-in-r/
http://www.sthda.com/english/wiki/cluster-analysis-in-r-unsupervised-machine-learning