【问题标题】:Generate closest teams based on employee schedules C#根据员工日程 C# 生成最近的团队
【发布时间】:2017-06-18 18:24:50
【问题描述】:

我得到了一个包含列的员工日程表的 csv:

employee ID, first last name, sunday schedule, monday schedule, ... , saturday schedule

每位员工 1 周的时间表。我附上了部分 csv 文件的屏幕截图。整个文件大约有 300 行。

我需要根据员工的日程安排(地点无关紧要)生成 15 人的团队,以便每个团队的员工拥有彼此最接近的日程安排。我尝试过的伪代码:

  • 将 csv 文件解析为调度数组(我自己的结构定义)

  • 将具有相同确切时间表的员工匹配到团队中(创建约 5 个完整团队,20 - 25 个半满团队,留下约 50 个与任何人都不匹配的时间表)

  • 对于 i = 1 到 14,对于规模为 i 的团队的每个成员,找到具有最接近时间表的团队(作为一个整体)并将该成员添加到该团队。团队规模达到 15 人后,将其标记为“完成”。

这有点奏效,但绝对没有给我最好的团队。我的问题是有人知道更好的方法吗?伪代码或只是一般的想法会有所帮助,谢谢。

编辑:这是一个比较公式的例子 比较基于代理计划之间的半小时块差异。特工 25 的得分是 16,因为他与特工 23 和 24 相差 8 个半小时。根据每个人的得分相加,团队的总分是 32。

并非所有座席每天工作 8 小时,而且许多座席有不同的休息日,这对他们的“亲密度”得分影响最大。此外,一些座席在某一天的日程安排与他们的正常日程安排不同。例如,一位代理可能在周一上午 7 点至下午 3 点工作,但在周二至周五上午 8 点至下午 4 点工作。

【问题讨论】:

  • 您如何定义“最佳团队”?
  • 当每个团队的员工彼此的日程安排差异最小时。
  • @mrogers:这是真正的问题。一旦你有了指标,你就可以开始优化了。
  • 定义“他们的日程安排中的最小差异”
  • 你能把你的代码贴在这里吗?

标签: c# algorithm schedule c#-7.0


【解决方案1】:

除非您找到一种可以为您提供确切最佳答案的方法,否则我会在最后添加一个爬山阶段,反复检查在团队之间交换任何代理对是否会改善事情,如果是的话就交换他们这种情况,只有在它重新检查了每一对代理并且没有更多的改进时才会停止。

我会这样做有两个原因:

1) 这种爬山法经常能找到相当好的解决方案。

2) 人们善于发现这样的改进。如果你制作了一个计算机生成的时间表并且人们可以找到简单的改进(也许是因为他们注意到他们经常与另一个团队的某个人同时安排)那么你会看起来很傻。

考虑 (2) 寻找本地改进的另一种方法是寻找同时安排来自不同团队的少量人员的情况,看看您是否可以将他们全部换到同一个团队。

【讨论】:

    【解决方案2】:

    无法确定时间表,但在字符串算法中,您可以找到edit distance 计算。这个想法是定义从另一个字符串获取一个字符串所需执行的操作数。例如,kitten 和 sitting 之间的距离为 3,2 表示替换,1 表示删除。我认为您可以以类似的方式在两个员工的日程安排之间定义一个指标。

    现在,有了距离函数后,您就可以开始聚类了。 k-means 算法对你来说可能是一个好的开始,但它的主要缺点是组数最初是固定的。但我认为您可以根据需要轻松调整一般逻辑。之后,您可以尝试一些其他方法来聚类您的数据,但您确实应该从距离函数开始,然后简单地在您的员工记录上对其进行优化。

    【讨论】:

      猜你喜欢
      • 2017-03-16
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多