gpt4 book ai didi

arrays - 如何为 worker 座位安排生成 "Social Golfer"矩阵?

转载 作者:太空狗 更新时间:2023-10-29 19:44:09 24 4
gpt4 key购买 nike

编辑:我正在寻找一个 APL 函数或 MS Access VBA 函数,它将员工总数、餐 table 总数和每张餐 table 的员 worker 数作为参数,用于生成轮换座位分配。

这个挑战是一个 Social Golfer Problem设想。我有一家有 280 人的公司。我最近实现了一个目标管理 (MBO) 计划,每个 worker 都被分配了每月要完成的目标。反复出现的目标之一是每天早上准时上类,参加 30 分钟的咖啡和 donut session 。 session 在我们有50张 table 的餐厅举行。每张 table 最多可容纳 12 人,但由于 Covid 大流行,我们每张 table 只使用 6 人。

我想为每张餐 table 生成独特的座位安排,这样每个人都可以轮流与其他人会面和协作,直到所有独特的座位都用完为止。然后整个循环重新开始,两个或更多员工可能再次坐在同一张 table 旁。

(EDIT) 规则:每个工作日需要一组独特的 6 人。在用尽所有可能的排列之前,一个人不能再次与他们过去坐在一起的其他人坐在一起。

编辑:所需结果的示例是:

Day 1: 

Table 1 will seat worker numbers 1,2,3,4,5,6.
Table 2 will seat worker numbers 7,8,9,10,11,12.
...
Table 50 will seat worker numbers 275,276,277,278,279,280.

Day 2:

Table 1 will seat worker numbers 7,13,19,26,33,40.
Table 2 will seat worker numbers 14,20,27,34,41,48
...

注意:(因此,下一个工作日及之后, worker 1 到 6在所有可能的排列都用尽之前,永远不能与同一组中的任何其他 worker 坐在同一张 table 上。

最佳答案

这就是所谓的“Social Golfer Problem”,虽然它是用APL 完成的,而不是单行。这实际上是一个非常困难的问题,所以我很难想象它可以通过数据库查询来完成。网上有很多关于该主题的文献和一些在线计算器。

编辑:

您的 APL 代码只是创建一个排列矩阵。例如,如果您输入以下内容:

pmat2←{{,[⍳2]↑(⊂⊂⎕io,1+⍵)⌷¨⍒¨↓∘.=⍨⍳1+1↓⍴⍵}⍣⍵⍉⍪⍬}
pmat2 3

你得到以下矩阵:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

根据维基百科:

循环赛(或 all-play-all 锦标赛)是“每个参赛者依次与所有其他参赛者相遇”的比赛。

根据 Markus Triska 在他关于该主题的硕士论文中的说法:

社交高尔夫球手问题 (SGP) 是一个组合优化问题。任务是将 g × p 个高尔夫球手安排成 g 组,每组 p 个球员,持续 w 周,这样同一组中没有两个高尔夫球手打球超过一次。

在数学上有很大的不同。循环赛是两人一组,所以如果你有 9 名参赛者,则需要在 8 轮比赛中进行 36 场比赛。对于社交高尔夫球手,您可以将他们分成三组,这需要在 4 轮比赛中进行 12 场比赛:

6 4 8   1 8 3   1 9 6   9 5 8
3 9 7 4 2 9 4 3 5 4 7 1
5 1 2 5 7 6 8 7 2 6 3 2

关于arrays - 如何为 worker 座位安排生成 "Social Golfer"矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17833851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com