编码挑战 - 员工安排

时间:2016-02-18 01:56:43

标签: javascript php jquery mysql coldfusion

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

根据要求。这是一家拥有50名员工的公司,每周工作7天,从0600和1200开始有2-10个小时的班次(每班25名员工)。每位员工工作4天,然后每7天休息3天(周日至周六)。每个星期他们的假期都应该进展 - 这意味着,他们每周都不会有同样的假期。员工幸运地度过了这一年。

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

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

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

1 个答案:

答案 0 :(得分:5)

我对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
    }
  });
});

这是以最少的潜在员工找到班次的功能。你做了一些similer,找到剩余天数最少的员工(目前全部都是4,所以它会抓住Jim)。你安排他。然后星期一,吉姆将是最不可用的人,它会再抓住他。但是,如果他们之间的星期二说他们之间,并且吉姆星期二没有,那么就会抓住鲍勃,那么鲍勃和吉姆在星期一安排的时候都是3分。

基本上发生的事情是程序说:“此人可能无法在以后安排,让我们现在安排他们,而不是可以采取后一个插槽的其他人”。显然这是非常基本的,算法需要进行一些调整以避免死亡本身,但也许这会给你一个可以帮助你解决问题的想法。