【问题标题】:Coding Challenge - Employee Scheduling [closed]编码挑战 - 员工调度[关闭]
【发布时间】:2016-02-18 01:56:42
【问题描述】:

因此,我正在尝试找出自动计算员工休假天数并确保最大覆盖范围的最有效方法。我在 MySQL 上使用 ColdFusion 和 Javascript,但如果这是一个更好的平台,可以轻松添加 jQuery 或切换到 PHP。

满足要求。这适用于拥有 50 名员工、每周工作 7 天、从 0600 和 1200 开始的 2-10 小时轮班(每班 25 名员工)的公司。每个员工每周工作 4 天,然后每 7 天(周日至周六)休息 3 天。每周他们的休息日都应该有所进展——也就是说,他们每周的休息日不会相同。幸运的是,员工们全年都在轮班。

目前的问题是班次覆盖不一致。目前,周一有很多员工,然后周四几乎没有人员,因为他们如何轮换休假。我想找出自动计算最佳覆盖率的最佳方法。

关于如何最好地进行的任何想法?

编辑:哎哟!所以我猜代码是你想看到的,而不是理论数学。

【问题讨论】:

  • 不应该只是基本的数学来解决这个问题,一旦你得到了正确的数学,你就可以编写代码吗?
  • 好吧,我同意。我被困在循环内的循环中,然后我的结果很差。就在那时,我意识到我做的数学不对。我知道我可以编码,但我正在努力获得正确的数学。这就是为什么我想发帖看看其他人的想法是什么,以及他们将如何构建覆盖范围的数学循环。理想情况下,我将能够更改变量,算法将自动调整以最佳覆盖工厂班次。

标签: javascript php jquery mysql coldfusion


【解决方案1】:

我对 ColdFusion 不熟悉,即使我熟悉,这个问题也足够复杂,以至于我无法编写一些功能代码。但如果你能原谅,我有一些概念性的想法给你(用 JS 来解释)。

从给每个员工 4 天开始

var jim = 4;
var bob = 4;
var tom = 4;

然后按最不可能安排的员工对班次进行排序(我假设这在您的数据库中,或者如果没有,计算起来并不难)。

var thursday = 2;
var monday = 3;

确定哪些员工可用。

var thEmployee = ['jim', 'tom'];
var monEmployee = ['jim', 'bob', 'tom'];

获得所有这些信息后,将可用时间最少的员工按潜在可用员工的升序安排轮班。

shifts.foreach(function(){
  var smallest = 'monday';
  days.foreach(function(){
    var current = //dammit, I forget how to specify this in JS, use your imagination, this is just an idea anyway
    if (current  < smallest) {
      //these vars are placeholders for the actual function that returns the count of the potential employees for the day
      smallest = current
    }
  });
});

这是查找潜在员工数量最少的班次的功能。你做一些类似的事情来找到剩余天数最少的员工(目前都是 4 天,所以它会抓住吉姆)。你安排他。然后到了星期一,Jim 将是最没空的人,它会再次抓住他。但是如果说星期二在他们之间,而吉姆星期二没有空,它将抓住鲍勃,那么鲍勃和吉姆在星期一安排时都在 3 点。

基本上发生的事情是程序说,“这个人以后可能无法被安排,让我们现在安排他们,而不是其他人可以占据以后的时间”。显然这是非常初级的,算法需要一些调整来避免死胡同,但也许这会给你一个想法,帮助你解决问题。

【讨论】:

  • 嘿!这实际上是一个很好的工作起点。我以不同的方式考虑它,即首先分配员工,然后弄清楚他们还剩下什么。我认为如果我从他们的总可用天数减少到 0,这将是一种更好的格式。