问题描述

一家公司正在改变它的经营方式,因此它的员工需求预计也会发生变化。

通过购买新机器,预计对非熟练劳动力的需求将减少,而对熟练和半熟练劳动力的需求将增加。此外,由于预计明年将出现的经济放缓,销售预期下降,预计将进一步减少所有类别的劳动力需求。

未来三年的劳动力需求预测如下:

Unskilled Semi-skilled Skilled
Current Strength 2000 1500 1000
Year 1 1000 1400 1000
Year 2 500 2000 1500
Year 3 0 2500 2000

公司需要在未来三年每年确定以下事项:

值得注意的是,劳动力每年都一定程度的自然流失。新员工入职后第一年的流失率相对较高,随后几年的流失率相对较低。预期的流失率如下:

Unskilled (%) Semi-skilled (%) Skilled (%)
$< 1$ year of service 25 20 10
$\geq 1$ year of service 10 5 5

目前所有的员工都在公司工作了至少一年。

招聘

每年,可以从公司外部雇佣有限数量的每个级别的员工,具体如下:

Unskilled Semi-skilled Skilled
500 800 500

再培训

每年可以培训多达200名非技术工人,使他们成为半技术工人。每个工人培训花费400美元。

此外,也可以对半熟练工人进行培训,使他们成为熟练工人。然而,这一数字不能超过当前熟练劳动力的25%,而且培训成本为每个工人500美元。

最后,工人也会被降级。但是,50%被降级的员工将离开公司,在自然流失率的基础上增加员工流失。

裁员

每名被解雇的工人可领取离职补偿金,每名非熟练工人领取200元,每名半熟练或熟练工人领取500元。

冗余员工

该公司允许一年至多有150名冗余工人,但这将导致每年一名多出的雇员产生以下额外成本。

Unskilled Semi-skilled Skilled
1500 2000 3000

兼职工人

每个技能级别最多可分配50名员工从事兼职工作。一年每名雇员的费用如下:

Unskilled Semi-skilled Skilled
500 400 400

注意


数学模型

集合及索引

参数

决策变量

目标函数

$$ \begin{equation} + \sum_{t \in \text{Years}}\sum_{s \in \text{Skills}}{\{\text{parttime_cost}*\text{part_time}_{t,s} + \text{layoff_cost}_s*\text{layoff}_{t,s} + \text{overmanning_cost}_s*\text{excess}_{t,s}\}} \end{equation} $$

约束条件

$$ \begin{aligned} \text{workforce}_{1,s} &= (1-\text{veteran_attrition}_s)*\text{curr_workforce} + (1-\text{rookie_attrition}_s)*\text{hire}_{1,s} \\ &+ \sum_{s' \in \text{Skills} | s' < s}{\{(1-\text{veteran_attrition})*\text{train}_{1,s',s} - \text{train}_{1,s,s'}\}} \\ &+ \sum_{s' \in \text{Skills} | s' > s}{\{(1-\text{demoted_attrition})*\text{train}_{1,s',s} - \text{train}_{1,s,s'}\}} - \text{layoff}_{1,s} \\ \qquad \forall s \in \text{Skills} \end{aligned} $$ $$ \begin{aligned} \text{workforce}_{t,s} &= (1-\text{veteran_attrition}_s)*\text{workforce}_{t-1,s} + (1-\text{rookie_attrition}_s)*\text{hire}_{t,s} \\ &+ \sum_{s' \in \text{Skills} | s' < s}{\{(1-\text{veteran_attrition})*\text{train}_{t,s',s} - \text{train}_{t,s,s'}\}}\\ &+ \sum_{s' \in \text{Skills} | s' > s}{\{(1-\text{demotion_attrition})*\text{train}_{t,s',s} - \text{train}_{t,s,s'}\}} - \text{layoff}_{t,s} \quad \forall (t > 1,s) \in \text{Years} \times \text{Skills} \end{aligned} $$ $$ \begin{aligned} \text{train}_{t,s_1,s_2} \leq 200 \quad \forall t \in \text{Years}\\ \text{train}_{t,s_1,s_3} = 0 \quad \forall t \in \text{Years} \end{aligned} $$

参考资料


Python Implementation

Input Data

We define all the input data of the model.

由于能力限制,每年只有200名工人可以从非技术培训再培训为半技术培训。而且,没有人能在一年内从不熟练变成熟练。

将半技能工人再培训为熟练工人的人数不得超过当时熟练劳动力的四分之一

编制过剩的限制确保所有技能级别的人员在一年内的编制过剩总数不超过150人。

确保每个级别和每年的工人数量等于所需的工人数量加上正式员工数量和兼职工作的工人数量。

Analysis

The minimum number of layoffs is 841.80. The optimal policies to achieve this minimum number of layoffs are given below.

Hiring Plan

This plan determines the number of new workers to hire at each year of the planning horizon (rows) and each skill level (columns). For example, at year 2 we are going to hire 649.3 Semi-skilled workers.

Training and Demotions Plan

This plan defines the number of workers to promote by training (or demote) at each year of the planning horizon. For example, in year 1 we are going to demote 168.4 skilled (s3) workers to the level of semi-skilled (s2).

Layoffs Plan

This plan determines the number of workers to layoff of each skill level at each year of the planning horizon. For example, we are going to layoff 232.5 Unskilled workers in year 3.

Part-time Plan

This plan defines the number of part-time workers of each skill level working at each year of the planning horizon. For example, in year 1, we have 50 part-time skilled workers.

Overmanning Plan

This plan determines the number of excess workers of each skill level working at each year of the planning horizon. For example, we have 150 Unskilled excess workers in year 3.

References

H. Paul Williams, Model Building in Mathematical Programming, fifth edition (Page 255-256, 354-356)