1.2 排班简单数学模型建立

1,278 阅读3分钟

智能排班简易模型

😄 大家好,我是小智,这期我们来学习智能排班一个简单的建模。

配送简易模型

📕 上一期,我们提到了零售商配送排班的业务场景。

image.png

比如某个商超,有自己的配送人员,如果大促期间人手不够,会通过三方平台的配送员配送。公司配送员每个的能力不同即每日可以最多配送的单量不同(平均),公司配送人员一周最多工作6日, 公司配送人员的配送一单成本为5元钱,三方平台的配送人员的一单成本为7元钱,而零售商已经预估了未来一周的配送单量,那么下一周如何排班才能使成本最低?

上面的场景其实就是一个运筹学的例题,可以用线性规划方法来解决这个问题。

例题

现在将上面的业务场景,转换成运筹学的一个例题。

🍼 注意:不便将工作过的场景分享,我们转换下场景。

image.png

例1 某工厂车间规划了下一周每日需要出电子元件的数量,目前车间拥有5名全职人员,每名人员拥有每日人效(即每日能完成的件数),若不能满足每日约定的总件数,可以借调其他车间员工, 但成本不同,全职员6元计件,其他车间员工7元计件,每名员工最多工作6日,问如何排班可以使成本最低?

员工ID员工姓名归属车间人效
10001张飞52
10002赵云37
10003关羽45
10004马超78
10005黄忠45
30001夏侯惇31

🏉 7日要求生产的电子元件数

员工ID需要件数
1310
2180
3290
4400
5350
6270
7190

数据建模

image.png

从实际问题中建立数学模型一般有以下三个步骤:

  1. 根据影响所要达到目的的因素找到决策变量;
  2. 由决策变量和所在达到目的之间的函数关系确定目标函数;
  3. 由决策变量所受的限制条件确定决策变量所要满足的约束条件;

下面我们先将第一步完成,也就是找出常量决策变量

常量和决策变量

常量

从例题中,我们把相对应的变量给找出来。

  • 员工 i1,2...i\in{1,2...}
  • 排班日 j1,2,3,4,5,6,7j\in{1,2,3,4,5,6,7}
  • 员工 ii 在工作日是否上班 xij0,1x_{ij}\in{0,1}
  • 员工人效 ai0,+a_i\in{0,+\infty} 单日件数
  • 工作日电子元件需求数 yi0,+y_i\in{0,+\infty}
  • 工作日人效总数 bj0,+b_j\in{0,+\infty}
  • 全职员工成本 c0=6c_0=6 ,其他车间员工成本 c1=7c_1=7

决策变量

在列出约束条件和目标函数前,需要找出最关键的一个变量:决策变量。 从这个词语当中,可以捕捉到一个重要信息变量,从我们的例题当中可以找到:

某员工某日是否上班,就是决策变量 xij0,1x_{ij}\in{0,1}

约束条件

从例题中可以得出两个约束条件:

  1. 需要满足每日电子元件需求。

公式为: i=1naixij+yjbj\sum\limits^n\limits_{i=1}a_ix_{ij} + y_j \ge b_j

  1. 员工最多工作6日。

公式为:i=1nxij6\sum\limits^n\limits_{i=1}x_{ij}\le6

目标函数

我们的目标是成本最低,从成本来看就是需要完成每日的电子元件的前提下,少量使用其他车间的员工,如何安排不同人效在那一天上班就是很关键的了。

最小成本公式 Min c0j=0mi=0naixij+c1j=0myjMin\ c_0\sum\limits_{j=0}^m\sum\limits_{i=0}^n a_i x_{ij}+c_1\sum\limits_{j=0}^my_j

这里给大家提个小小的问题,为什么使用背包算法不可以呢,比如可以计算出每日最小缺口元件的,然后选择对应的其他车间人员就可以了,这样方法是否可行呢?

结束语

🍗 整个的简易排班的数学模型,我们已经建立了,那如何在Java内进行求解呢,下一期告诉你。