**
数学建模_1:家政服务(1)
**
最近在备战数学建模国赛,然后也有一些题目练手,为了督促自己学习,就在博客上不定时更新一下自己练习的题目,用的软件是Python以及Lingo,lingo的官方教程我已经上传到了资源里,只要3个积分,大家自取吧。
问题背景及要求:
1.1 问题背景
某一家政服务公司(甲)专门向雇主提供护理,保姆等M项服务。根据估计,某城市下一年中第i项(i=1,2…,M)家政服务在春、夏、秋、冬四个季度的需求分别是:di1人日,di2人日,di3人日,di4人日,且假设公司的每位员工每季度工作65天。若假设提供第i项(i=1,2…,M)家政服务的员工是直接从该公司而不是从雇主那里得到Ci元/月的报酬(说明:雇主先支付报酬给公司,由公司扣除1%比例的中介费后再支付给员工,即公司主要靠收取中介费盈利,但不是全部。员工的工资Ci与中介费已经无关了。)。春季开始时,甲公司有i种(i=1,2…,M)员工Si名,且在每个季度结束后,第i种员工将有一定比例(设为ri (0,1))的人数将会自动离职。试考虑如下三种情况的最优招聘计划。即考虑在满足市场需求的条件下使得公司的利润最大(即公司的工资支出最少,或公司的待业员工人数最少)。
1.2 问题要求
(1)如果甲公司不允许主动解除员工,请你为公司制定下一年每种员工的最优招聘计划(每年只招聘一次);分析哪些季度需求的增加不会影响招聘计划?可以增加多少?
(2)如果甲公司不允许主动解除员工,且每个季度进行一次招聘,请你为公司制定最优的招聘计划。
(3)如果甲公司针对第i种(i=1,2…,M)员工在每个季度结束后允许解雇一定比例(设为ki)的员工,清为公司制定下一年度的最优招聘计划?(假设k1=k2=…kM=0.02)
因为篇幅的问题,其他的我就不写了,我只把问题的分析以及建模过程稍微写一下,我会将完整的题目以及我和队友建好的模型上传到资源里。
第一问:
问题一的分析
题目要求,在满足市场需求以及公司要求的前提下,为公司制定最优的招聘计划,使得公司的工资支出最少。因此我们建立以公司所有项目年工资支出最少作为目标函数的数学优化模型。如果将招聘员工的数量约束为整数,则可能使新招聘的员工数量远远大于实际需要的数量,很难找合理的到整数解,因此我们将新招聘员工的数量约束为实数并对所得结果向上取整。
根据题意可知,第i项项目的每个员工每季度所得工资为3Ci元。为达到公司与雇主的“互利双赢”原则,则要使员工的数量最少并且每位员工的季度工作强度最高(即每个项目的每位员工每季度工作65天)。我们设第i项服务项目下一年春季初招聘员工xi名,每季度结束后第i种员工有ri比例自动离职,建立数学优化模型并利用LINGO软件进行求解求得最优的年招聘计划。而后我们进行灵敏度分析,求解出哪些季度需求的增加不会影响招聘计划以及允许增加的数量范围。
4.1.1模型的准备
假设第i项(i=1,2…,M)服务项目春夏秋冬四个季度的需求分别为di1人,di2人,di3人,di4人;设第i项服务项目下一年最优招聘人数人数为xi人/年;第一年春第i项项目有员工Si名;第i项服务项目员工工资为Ci元/月/人,则每季度员工工资为3Ci元/季度/人。
4.1.2 模型的建立
根据4.1.1的模型假设及题目中给定的表1、表2、表3中的数据,在公司不允许主动解雇员工的前提下,我们建立以公司M项项目总工资支出(Z)最少为目标函数,以员工工作日总量大于市场需求作为约束条件的数学优化模型,模型如下:
接下来我用lingo进行编程解答:
model:
sets:
project/1..18/: x ,c,s,r;
season/1,2,3,4/;
link(project,season):d ;
m/1,2,3/ ;
endsets
data:
d = 6300 7900 5600 9400
6100 7900 6100 9200
6600 7800 5900 9000
6400 7700 6300 9500
6600 7500 5400 9500
6200 7500 5700 9300
6100 8100 6100 9400
6000 7900 5900 9200
6500 7600 5500 9100
6000 7400 5600 9200
6500 7600 5500 9100
6500 8200 6200 9100
6000 8400 6000 9300
6400 7600 6200 9700
6600 7600 5400 9500
6400 7900 5900 9300
6200 7500 5500 9500
6100 8100 6100 9400 ;
c = 2500 2800 2400 3000 3000 2900 2400 2500 2200 2800 2900 2900 2600 2600 2100 2900 2500 2200 ;
s = 120 100 110 110 130 130 140 100 130 130 110 100 130 120 90 130 120 140 ;
r = 0.15 0.11 0.15 0.13 0.10 0.13 0.09 0.10 0.10 0.13 0.10 0.11 0.09 0.13 0.10 0.12 0.08 0.15 ;
enddata
!目标函数 ;
min = @sum(m(j):@sum(project(i):3*c(i)*(s(i)+x(i))*(1-r(i))^j));
!约束条件;
@FOR(project(i):
65*(s(i)+x(i)) >= d(i,1));
@for(project(i):
65*(s(i)+x(i))*(1-r(i))>=d(i,2));
@for(project(i):
65*(s(i)+x(i))*@pow((1-r(i)),2)>=d(i,3));
@for(project(i):
65*(s(i)+x(i))*@pow((1-r(i)),3)>=d(i,4));
@for(project(i):
x(i)>=0);
end
代码中涉及的lingo语法知识我就不解释了,大家可以自行下载我的资源进行学习。里面的数据集是已知的,具体的题目我也会后续上传。
运行后结果为:
Global optimal solution found.
Objective value: 0.6919287E+08
Infeasibilities: 0.000000
Total solver iterations: 0
Variable Value Reduced Cost
X( 1) 115.4820 0.000000
X( 2) 100.7726 0.000000
X( 3) 115.4615 0.000000
X( 4) 111.9486 0.000000
X( 5) 70.48539 0.000000
X( 6) 87.27604 0.000000
X( 7) 51.90678 0.000000
X( 8) 94.15427 0.000000
X( 9) 62.04390 0.000000
X( 10) 84.93974 0.000000
X( 11) 82.04390 0.000000
X( 12) 98.59029 0.000000
X( 13) 59.86522 0.000000
X( 14) 106.6212 0.000000
X( 15) 110.4854 0.000000
X( 16) 79.95275 0.000000
X( 17) 67.69243 0.000000
X( 18) 95.48200 0.000000
C( 1) 2500.000 0.000000
C( 2) 2800.000 0.000000
C( 3) 2400.000 0.000000
C( 4) 3000.000 0.000000
C( 5) 3000.000 0.000000
C( 6) 2900.000 0.000000
C( 7) 2400.000 0.000000
C( 8) 2500.000 0.000000
C( 9) 2200.000 0.000000
C( 10) 2800.000 0.000000
C( 11) 2900.000 0.000000
C( 12) 2900.000 0.000000
C( 13) 2600.000 0.000000
C( 14) 2600.000 0.000000
C( 15) 2100.000 0.000000
C( 16) 2900.000 0.000000
C( 17) 2500.000 0.000000
C( 18) 2200.000 0.000000
S( 1) 120.0000 0.000000
S( 2) 100.0000 0.000000
S( 3) 110.0000 0.000000
S( 4) 110.0000 0.000000
S( 5) 130.0000 0.000000
S( 6) 130.0000 0.000000
S( 7) 140.0000 0.000000
S( 8) 100.0000 0.000000
S( 9) 130.0000 0.000000
S( 10) 130.0000 0.000000
S( 11) 110.0000 0.000000
S( 12) 100.0000 0.000000
S( 13) 130.0000 0.000000
S( 14) 120.0000 0.000000
S( 15) 90.00000 0.000000
S( 16) 130.0000 0.000000
S( 17) 120.0000 0.000000
S( 18) 140.0000 0.000000
R( 1) 0.1500000 0.000000
R( 2) 0.1100000 0.000000
R( 3) 0.1500000 0.000000
R( 4) 0.1300000 0.000000
R( 5) 0.1000000 0.000000
R( 6) 0.1300000 0.000000
R( 7) 0.9000000E-01 0.000000
R( 8) 0.1000000 0.000000
R( 9) 0.1000000 0.000000
R( 10) 0.1300000 0.000000
R( 11) 0.1000000 0.000000
R( 12) 0.1100000 0.000000
R( 13) 0.9000000E-01 0.000000
R( 14) 0.1300000 0.000000
R( 15) 0.1000000 0.000000
R( 16) 0.1200000 0.000000
R( 17) 0.8000000E-01 0.000000
R( 18) 0.1500000 0.000000
D( 1, 1) 6300.000 0.000000
D( 1, 2) 7900.000 0.000000
D( 1, 3) 5600.000 0.000000
D( 1, 4) 9400.000 0.000000
D( 2, 1) 6100.000 0.000000
D( 2, 2) 7900.000 0.000000
D( 2, 3) 6100.000 0.000000
D( 2, 4) 9200.000 0.000000
D( 3, 1) 6600.000 0.000000
D( 3, 2) 7800.000 0.000000
D( 3, 3) 5900.000 0.000000
D( 3, 4) 9000.000 0.000000
D( 4, 1) 6400.000 0.000000
D( 4, 2) 7700.000 0.000000
D( 4, 3) 6300.000 0.000000
D( 4, 4) 9500.000 0.000000
D( 5, 1) 6600.000 0.000000
D( 5, 2) 7500.000 0.000000
D( 5, 3) 5400.000 0.000000
D( 5, 4) 9500.000 0.000000
D( 6, 1) 6200.000 0.000000
D( 6, 2) 7500.000 0.000000
D( 6, 3) 5700.000 0.000000
D( 6, 4) 9300.000 0.000000
D( 7, 1) 6100.000 0.000000
D( 7, 2) 8100.000 0.000000
D( 7, 3) 6100.000 0.000000
D( 7, 4) 9400.000 0.000000
D( 8, 1) 6000.000 0.000000
D( 8, 2) 7900.000 0.000000
D( 8, 3) 5900.000 0.000000
D( 8, 4) 9200.000 0.000000
D( 9, 1) 6500.000 0.000000
D( 9, 2) 7600.000 0.000000
D( 9, 3) 5500.000 0.000000
D( 9, 4) 9100.000 0.000000
D( 10, 1) 6000.000 0.000000
D( 10, 2) 7400.000 0.000000
D( 10, 3) 5600.000 0.000000
D( 10, 4) 9200.000 0.000000
D( 11, 1) 6500.000 0.000000
D( 11, 2) 7600.000 0.000000
D( 11, 3) 5500.000 0.000000
D( 11, 4) 9100.000 0.000000
D( 12, 1) 6500.000 0.000000
D( 12, 2) 8200.000 0.000000
D( 12, 3) 6200.000 0.000000
D( 12, 4) 9100.000 0.000000
D( 13, 1) 6000.000 0.000000
D( 13, 2) 8400.000 0.000000
D( 13, 3) 6000.000 0.000000
D( 13, 4) 9300.000 0.000000
D( 14, 1) 6400.000 0.000000
D( 14, 2) 7600.000 0.000000
D( 14, 3) 6200.000 0.000000
D( 14, 4) 9700.000 0.000000
D( 15, 1) 6600.000 0.000000
D( 15, 2) 7600.000 0.000000
D( 15, 3) 5400.000 0.000000
D( 15, 4) 9500.000 0.000000
D( 16, 1) 6400.000 0.000000
D( 16, 2) 7900.000 0.000000
D( 16, 3) 5900.000 0.000000
D( 16, 4) 9300.000 0.000000
D( 17, 1) 6200.000 0.000000
D( 17, 2) 7500.000 0.000000
D( 17, 3) 5500.000 0.000000
D( 17, 4) 9500.000 0.000000
D( 18, 1) 6100.000 0.000000
D( 18, 2) 8100.000 0.000000
D( 18, 3) 6100.000 0.000000
D( 18, 4) 9400.000 0.000000
Row Slack or Surplus Dual Price
1 0.6919287E+08 -1.000000
2 9006.330 0.000000
3 6950.219 0.000000
4 8054.997 0.000000
5 8026.662 0.000000
6 6431.550 0.000000
7 7922.942 0.000000
8 6373.941 0.000000
9 6620.027 0.000000
10 5982.853 0.000000
11 7971.083 0.000000
12 5982.853 0.000000
13 6408.369 0.000000
14 6341.239 0.000000
15 8330.381 0.000000
16 6431.550 0.000000
17 7246.929 0.000000
18 6000.008 0.000000
19 9206.330 0.000000
20 5110.381 0.000000
21 3714.695 0.000000
22 4656.747 0.000000
23 4851.196 0.000000
24 4228.395 0.000000
25 4786.960 0.000000
26 3251.286 0.000000
27 3458.025 0.000000
28 3634.568 0.000000
29 4754.842 0.000000
30 3634.568 0.000000
31 3288.448 0.000000
32 2830.528 0.000000
33 5215.431 0.000000
34 4128.395 0.000000
35 4109.298 0.000000
36 3724.008 0.000000
37 4910.381 0.000000
38 5458.824 0.000000
39 4237.079 0.000000
40 4688.235 0.000000
41 4619.540 0.000000
42 5155.556 0.000000
43 4989.655 0.000000
44 4229.670 0.000000
45 4322.222 0.000000
46 4611.111 0.000000
47 4974.713 0.000000
48 4611.111 0.000000
49 4024.719 0.000000
50 4219.780 0.000000
51 4949.425 0.000000
52 5155.556 0.000000
53 4668.182 0.000000
54 4826.087 0.000000
55 4958.824 0.000000
56 0.000000 -410.8331
57 0.000000 -437.5834
58 0.000000 -394.3998
59 0.000000 -480.5451
60 0.000000 -463.2479
61 0.000000 -464.5270
62 0.000000 -366.2568
63 0.000000 -386.0399
64 0.000000 -339.7151
65 0.000000 -448.5088
66 0.000000 -447.8063
67 0.000000 -453.2114
68 0.000000 -396.7782
69 0.000000 -416.4725
70 0.000000 -324.2735
71 0.000000 -458.7826
72 0.000000 -377.1267
73 0.000000 -361.5331
74 115.4820 0.000000
75 100.7726 0.000000
76 115.4615 0.000000
77 111.9486 0.000000
78 70.48539 0.000000
79 87.27604 0.000000
80 51.90678 0.000000
81 94.15427 0.000000
82 62.04390 0.000000
83 84.93974 0.000000
84 82.04390 0.000000
85 98.59029 0.000000
86 59.86522 0.000000
87 106.6212 0.000000
88 110.4854 0.000000
89 79.95275 0.000000
90 67.69243 0.000000
91 95.48200 0.000000
可以看到结果显的是全局最优解,并且最优解为:0.6919287E+08元
x(i) 为第i项服务项目下一年最优招聘人数人数为xi人/年,这样就知道18个项目下一年每年要招聘的人数了,灵敏度分析请看后续上传的资源。