智能排班简易模型
😄 大家好,我是小智,这期我们来学习智能排班一个简单的建模。
配送简易模型
📕 上一期,我们提到了零售商配送排班的业务场景。
比如某个商超,有自己的配送人员,如果大促期间人手不够,会通过三方平台的配送员配送。公司配送员每个的能力不同即每日可以最多配送的单量不同(平均),公司配送人员一周最多工作6日, 公司配送人员的配送一单成本为5元钱,三方平台的配送人员的一单成本为7元钱,而零售商已经预估了未来一周的配送单量,那么下一周如何排班才能使成本最低?
上面的场景其实就是一个运筹学的例题,可以用线性规划方法来解决这个问题。
例题
现在将上面的业务场景,转换成运筹学的一个例题。
🍼 注意:不便将工作过的场景分享,我们转换下场景。
例1 某工厂车间规划了下一周每日需要出电子元件的数量,目前车间拥有5名全职人员,每名人员拥有每日人效(即每日能完成的件数),若不能满足每日约定的总件数,可以借调其他车间员工, 但成本不同,全职员6元计件,其他车间员工7元计件,每名员工最多工作6日,问如何排班可以使成本最低?
| 员工ID | 员工姓名 | 归属车间 | 人效 |
|---|---|---|---|
| 10001 | 张飞 | 蜀 | 52 |
| 10002 | 赵云 | 蜀 | 37 |
| 10003 | 关羽 | 蜀 | 45 |
| 10004 | 马超 | 蜀 | 78 |
| 10005 | 黄忠 | 蜀 | 45 |
| 30001 | 夏侯惇 | 魏 | 31 |
🏉 7日要求生产的电子元件数
| 员工ID | 需要件数 |
|---|---|
| 1 | 310 |
| 2 | 180 |
| 3 | 290 |
| 4 | 400 |
| 5 | 350 |
| 6 | 270 |
| 7 | 190 |
数据建模
从实际问题中建立数学模型一般有以下三个步骤:
- 根据影响所要达到目的的因素找到决策变量;
- 由决策变量和所在达到目的之间的函数关系确定目标函数;
- 由决策变量所受的限制条件确定决策变量所要满足的约束条件;
下面我们先将第一步完成,也就是找出常量和决策变量。
常量和决策变量
常量
从例题中,我们把相对应的变量给找出来。
- 员工
- 排班日
- 员工 在工作日是否上班
- 员工人效 单日件数
- 工作日电子元件需求数
- 工作日人效总数
- 全职员工成本 ,其他车间员工成本
决策变量
在列出约束条件和目标函数前,需要找出最关键的一个变量:决策变量。 从这个词语当中,可以捕捉到一个重要信息变量,从我们的例题当中可以找到:
某员工某日是否上班,就是决策变量
约束条件
从例题中可以得出两个约束条件:
- 需要满足每日电子元件需求。
公式为:
- 员工最多工作6日。
公式为:
目标函数
我们的目标是成本最低,从成本来看就是需要完成每日的电子元件的前提下,少量使用其他车间的员工,如何安排不同人效在那一天上班就是很关键的了。
最小成本公式
这里给大家提个小小的问题,为什么使用背包算法不可以呢,比如可以计算出每日最小缺口元件的,然后选择对应的其他车间人员就可以了,这样方法是否可行呢?
结束语
🍗 整个的简易排班的数学模型,我们已经建立了,那如何在Java内进行求解呢,下一期告诉你。