运筹学排班问题大作业

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运筹学排班问题的建模和程序设计报告

2011级工业工程一班

杨添淇

1120110892

********************** 0.前言

本报告共分为五个部分:

1.排班问题的提出

2.建模的心路历程

3.新的背景与设定

4.新的建模

5.建模后的思考

其中,第二部分与第五部分最为用力,集中体现了作者想要表达的观点。其实这两部分应该写在分析报告里吧?好像搞反了…

是为序。

1.排班问题的提出

某小区组建维修保洁服务,现需要招聘维修保洁人员若干轮班工作。其中包括电工,水管工,和保洁员。工作采用计时制,每人工作满8小时后可以下班,如张三在6点上班,可在下午2点下班。根据统计,小区需求人数如下表:

时间电工水管工保洁

0点-2点 1 0 0

2点-4点0 0 0

4点-6点0 0 0

6点-8点 6 3 0

8点-10点8 6 3

10点-12点9 5 7

12点-14点 4 4 3

14点-16点8 7 5

16点-18点 4 12 10

18点-20点12 16 6

20点-22点 5 8 2

22点-24点 3 2 0

维修保洁服务的收费标准是:电工25元/小时,水工20元/小时,保洁15元/小时。试制定招聘计划和工人的排班表(即:招聘工人的数量和每个工人的上班时间)。

2.建模的心路历程

余以为,老师要我们交报告,绝不是走个形式,也不仅仅是要看我们写出的冷冰冰的代码,求解问题的能力,更是要看我们思维的走向:从哪里来,到哪里去,最终形成一条清晰的路径。确实,看这个路径的形成过程是一件非常有趣的事,记录这个过程亦然。是故,我采用了完全写实的笔法,彻头彻尾地记录下了自己的真实想法,怎么想的怎么写的,想怎么写就怎么写。所以,报告的这个部分叫做:建模的心路历程(多么温润而厚重的小标题啊)。问题的最后提到了收费问题,旋即戛然而止,留给了解题人无限的遐想空间。我想老师的本意,是好的。但读完题后,我的第一个问题便出在这最后一句上:“收费标准”中的“收费”二字作何解。

从语法角度上来讲,这是一个没有主语的动词做了“标准”二字的定语。“收费”这个动作的主语对我们求解这个问题,起着至关重要的作用。

从一个久经考场的学生的角度来看,这个收费标准应该等同于工资来看:因为工资标准在这道问题中是除了用工需求外最应该出现的已知条件,而且与聘用资费优化息息相关。

而从一个居民,一个一般人的角度来看,收费应该指的是工作的时候向住户收取的费用。其唯如此,才可以真正称得上是收费。但是转念一想,我交了一年的物业费,中间再有什么问题的话你来维修是不该收取任何费用的。这就像买了保险之后得了病,不能说自己再把医药费全扛下来,那样保险就没用了。再退一步说,就算交了物业费再找电工维修需要再交钱的话,也不应该按照时长收费——保洁倒还罢了,水管工要是为了多赚点收入一个阀门拧了一上午,那就太不美好了。

所以,我更倾向于第一种观点。毕竟我也是一个久经考场的学生。是故,以下所有建模过程都基于这个假定:即25元每小时是我们付给电工的工钱,水管工保洁工依此类推。

有人就会说了,这个收费到底是怎么回事,问老师一下不就清楚了。这就是我一直想说的另一个问题:为什么学生不愿意和老师交流。但这与建模毫无关系,所以我会在我其他的杂文里探讨这个问题,于此不做过多阐述,还是说建模的事。

排除了这个歧义项的干扰,这个问题还是有很大的解释空间的。诚然,小小的收费二字没有影响问题本身,这依然是一个开放式的问题,允许我们设定各种各样的环境,来解出各种不同的答案。

那么首先最容易想到的情况,一定是三个工种各自招人,每个时段的工作人数都必须大于等于统计需求人数,也就是什么都不加。于是不难得出数学模型如下,以电工为例:

依据表格将全天24小时划分成十二个时段,每两小时一段。设每个偶数整点时刻开始工作的人数分别为X1,X2,X3…X12,目标值F= X1+X2+X3+…+X12,求其最小值。

则有线性方程组:

F= X1+X2+X3+…+X12

X1+X10+X11+X12>1

X1+X2+X11+X12>0

X1+X2+X3+X12>0

X1+X2+X3+X4>6

.

.

.

X9+X10+X11+X12>0

这是一个典型的线性规划问题(话说这方程组好大…)。幸好现代的计算机技术可以帮助我们方便快捷地求解此类问题,不然手动求解这个方程组的情形真的是不敢想象。似乎问题到这里已经被解决的差不多了。

可是有一个严重的问题是:我根本不会用matlab……后来,在花掉了n个积攒多年的百度文库财富值之后,终于学会了matlab中基本线性规划问题的求解方法:即应用matlab中的linprog函数。

由于linprog函数只能求解约束条件为balabala小于等于某定值的方程,所以将各个约束条件进行了变形处理,最终得到以下的指令:

Matlab中的指令如下:

F=[1;1;1;1;1;1;1;1;1;1;1;1];

a=[-1 0 0 0 0 0 0 0 0 -1 -1 -1;

-1 -1 0 0 0 0 0 0 0 0 -1 -1;

-1 -1 -1 0 0 0 0 0 0 0 0 -1;

-1 -1 -1 -1 0 0 0 0 0 0 0 0;

0 -1 -1 -1 -1 0 0 0 0 0 0 0;

0 0 -1 -1 -1 -1 0 0 0 0 0 0;

0 0 0 -1 -1 -1 -1 0 0 0 0 0;

0 0 0 0 -1 -1 -1 -1 0 0 0 0;

0 0 0 0 0 -1 -1 -1 -1 0 0 0;

0 0 0 0 0 0 -1 -1 -1 -1 0 0;

0 0 0 0 0 0 0 -1 -1 -1 -1 0;

0 0 0 0 0 0 0 0 -1 -1 -1 -1];

b=[-1;0;0;-6;-8;-9;-4;-8;-4;-12;-5;-3];

vbl=[0;0;0;0;0;0;0;0;0;0;0;0];

[x,fval]=linprog(F,a,b,[],[],vbl)

运行结果如下:

Optimization terminated.

x =

相关文档
最新文档