现场排班算法问题,请高手指点!谢谢

现场排班算法问题:
1、已知排班班次时间(半点或整点上线班):
班次 上班时间 下班时间
A:7:00 ~ 10:30
B:8:00 ~ 12:00
C:8:30 ~ 12:30
D:9:00 ~ 13:00
2、已知半点及整点时刻人力总需求ZRL

我的想法是:
1、根据班次时间,把现场人力发生变化的时刻每天分为几个时段如下:
7:00 ~ 8:00
8:00 ~ 8:30
8:30 ~ 9:00
9:00 ~ 10:30
10:30 ~ 12:00
12:00 ~ 12:30
12:30 ~ 13:00
2、采用顺序排班的方法:也就是时间在前的先排班,也就是讲先排7:00的班次人员,再排8:00班次人员,这样,在后面的时刻能够知道当时及之前的时刻的在班人员。
3、那对于:7:00,8:00,8:30,9:00的人力安排公式如下:
需要增加人力RL = 人力总需求ZRL - 当前在上班的人力DRL + 当前时刻下班的人力XRL
4、但是这时候有一个问题:根据班次时间情况,10:30 ~ 12:30这个时段内没有人员上班,可能会导致此时段上班人员不能满足人力需求,此时肯定需要满足一个条件:人力总需求ZRL = 当前在上班的人力DRL。此时段的人力需求只能在前面的时刻添加上班人员时实现。

请教:什么算法能够合适的增加10:30前面的时段人力需求,同时也能满足10:30~12:00的人力需求呢?思路也行,我大脑快爆炸了。

作者: chencan0603   发布时间: 2011-03-29

这个排班算法就是要解决每个上班时间安排多少人上班的问题呗。
算的时候,考虑一下接下来的新人力需求时间段是不是有人上班。如果有的话,用你的那个公式就可以了。如果没有的话,判断 新的人力需求>原来人力需求-下班人数。如果满足的话,直接用原来的公式就可以了。如果不满足,在原来的要加的人数上+新的人力需求-(原来人力需求-下班人数)。当然你这里不是只有一个时间段没有上班人数,对这个问题你递归一下,就可以了。

个人意见,仅供参考。没有时间详细验证算法。

[ 本帖最后由 天佑我中华 于 2011-5-6 17:34 编辑 ]

作者: 天佑我中华   发布时间: 2011-05-06