最优化lingo编程招聘公务员问题

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

招聘公务员问题
电硕102班唐琦雯 2010210516 ●问题描述
我国公务员制度已实施多年,1993 年10 月1 日颁布施行的《国家公务员暂行条例》规定:“国家行政机关录用担任主任科员以下的非领导职务的国家公务员,采用公开考试、严格考核的办法,按照德才兼备的标准择优录用”。

目前,我国招聘公务员的程序一般分三步进行:公开考试(笔试)、面试考核、择优录取。

现有某市直属单位因工作需要,拟向社会公开招聘8 名公务员分配到7 个不同的用人部门。

经过笔试从高分到低分选择16 名应聘者进行面试考核,面试工作由7 个用人部门的相应专家组成,因为各用人部门工作性质不同,每个应聘者也都有不同特长,为此各个部门的面试专家对应聘者有不同的偏好,所以给出的面试分也不同,从而也有不同的排序。

考虑16 名应聘的笔试得分和各部门的面试专家所给出的面试得分按某种原则综合评分结果与排序如下表所示。

按照择优按需录用的原则,试帮助招聘领导小组设计一种录用及分配方案。

表各用人部门对应聘者的综合评分与排序结果
●具体分析
分析发现,本优化涉及到以下两个方面的问题,首先是如何从16名应聘者中择优选出8名公务员,其次是如何将挑选出的这8名公务员按照各部门的偏好和需求的不同合理地进行分配。

基于上述分析,我们大体可以归纳出以下两种录用及分配方案:
方案一:“按需”就是直接根据用人部门各自对16个应聘者的评价情况来决定哪位应聘者适合去哪个部门(可根据应聘人员的复试成绩确定用人部门对应聘人员的满意度评分),从而将16个人中的8个人分配到7个部门,每个部门各取所需,只需做一步规划即可;
方案二:根据分析将该问题分为两部分进行优化。

首先是“择优”就是综合考虑所有部门对16个应聘者的评价情况(即这16个人的总体情况)确定择优录用的8个人,然后再根据每个部门对所录用的8个人的评价情况将8个人分配到7个部门中。

“择优”录用分配方案就是要使综合分总分最高,“按需”就是要使部门满意度总和最大。

本文先分析方案一的建模以及求解过程,再分析方案二模型,详细介绍这两种方案的程序设计流程、程序以及运行结果。

建模及求解
建模前需考虑的另外几个问题:
将8名公务员分配到7个不同的用人部门,很自然的做法应该是将7名公务员分配到7个不同的部门,再将最后一名公务员分配到7个部门中的一个。

也就是说有个部门将被分到两个应聘者,至于哪个部门被分配到2名公务员,将根据优化结果来做出选择。

通过表中数据可以看出,部门2和3,部门4和5,部门6和7分别对于所有应聘者的评分和排序都是相同的,可以认为他们对应聘者的需求一样,故在优化过程中,可以不考虑部门2和3,部门4和5,部门6和7不同的工作性质及对应聘者的不同偏好,也即将这6个部门合并为3个部门。

第一种方案:按需分配
建模:
用ij x 表示决策变量,即当录用第j 个应聘者,并将其分配给第i 个部门时
1ij x =;其它情况0ij x = (1, 2,,7 ;1,2,,16)i j == 。

设第i 名应聘
者被部门1录用这个事件为1j x ,被部门2或3录用这个事件为2j x ,被部门4或5录用这个事件为3j x ,被部门6或7录用这个事件为4j x
根据按需录用的要求,原问题的优化目标是要使用人单位对应聘者的满意度总分最高。

于是有整数规划模型:
4
16
1
1
416
114
1161116
1
m ax 81(1,2,,16)
..1223
(2,3,4)
(1,2,,16,1,2,3,4)
1 or 0
ij
j
ij
x i j ij i j ij i j j ij j ij z C
x x x j s t x x i i j x ========
⎧=⎪⎪⎪≤=⎪⎪⎪⎨
≤≤⎪⎪

≤≤=⎪⎪==⎪=⎩∑∑∑∑∑∑∑
上式约束条件中:(1)式确保总的录用人数为8人,(2)式保证每个人最多只能被录用一次,(3)(4)两式则是确保每个部门至少录用一人,至多录用两人,(5)式则是0-1约束。

但事实上(1)式的限制录用人数8人,加上(3)(4)两式的下限(每个部门至少一人)就可以保证每个部门招的人数不可能多于两个人,故而(3)(4)两式的上限是多余的,可以省略。

求解:
用LINGO 求解上述问题的程序如图1所示。

图一
运行结果如下:
Global optimal solution found.
Objective value: 650.9900
Extended solver steps: 0
Total solver iterations: 23
Model Title: CIVIL SERVICE RECUITMENT PROBLEM
Variable Value Reduced Cost
A( D1, C1) 83.28000 0.000000
A( D1, C2) 72.84000 0.000000
A( D1, C3) 65.03000 0.000000
A( D1, C4) 79.56000 0.000000
A( D1, C5) 72.25000 0.000000
A( D1, C6) 60.85000 0.000000
A( D1, C7) 76.07000 0.000000
A( D1, C8) 73.06000 0.000000
A( D1, C10) 58.09000 0.000000 A( D1, C11) 60.99000 0.000000 A( D1, C12) 79.78000 0.000000 A( D1, C13) 65.03000 0.000000 A( D1, C14) 65.63000 0.000000 A( D1, C15) 76.07000 0.000000 A( D1, C16) 72.25000 0.000000 A( D2, C1) 87.00000 0.000000 A( D2, C2) 83.50000 0.000000 A( D2, C3) 68.53000 0.000000 A( D2, C4) 83.50000 0.000000 A( D2, C5) 79.78000 0.000000 A( D2, C6) 72.03000 0.000000 A( D2, C7) 79.78000 0.000000 A( D2, C8) 83.28000 0.000000 A( D2, C9) 83.28000 0.000000 A( D2, C10) 63.75000 0.000000 A( D2, C11) 60.85000 0.000000 A( D2, C12) 80.60000 0.000000 A( D2, C13) 65.63000 0.000000 A( D2, C14) 67.24000 0.000000 A( D2, C15) 79.78000 0.000000 A( D2, C16) 79.78000 0.000000 A( D3, C1) 81.20000 0.000000 A( D3, C2) 76.56000 0.000000 A( D3, C3) 56.81000 0.000000 A( D3, C4) 80.38000 0.000000 A( D3, C5) 72.84000 0.000000 A( D3, C6) 76.07000 0.000000 A( D3, C7) 72.84000 0.000000 A( D3, C8) 76.56000 0.000000 A( D3, C9) 83.28000 0.000000 A( D3, C10) 68.53000 0.000000 A( D3, C11) 72.57000 0.000000 A( D3, C12) 76.56000 0.000000 A( D3, C13) 63.75000 0.000000 A( D3, C14) 76.07000 0.000000 A( D3, C15) 72.84000 0.000000 A( D3, C16) 72.84000 0.000000 A( D4, C1) 84.10000 0.000000 A( D4, C2) 73.06000 0.000000 A( D4, C3) 64.49000 0.000000 A( D4, C4) 80.60000 0.000000 A( D4, C5) 75.74000 0.000000
A( D4, C7) 76.88000 0.000000 A( D4, C8) 79.24000 0.000000 A( D4, C9) 83.28000 0.000000 A( D4, C10) 68.53000 0.000000 A( D4, C11) 72.57000 0.000000 A( D4, C12) 80.60000 0.000000 A( D4, C13) 68.53000 0.000000 A( D4, C14) 76.07000 0.000000 A( D4, C15) 76.88000 0.000000 A( D4, C16) 75.74000 0.000000 X( D1, C1) 0.000000 -83.28000 X( D1, C2) 0.000000 -72.84000 X( D1, C3) 0.000000 -65.03000 X( D1, C4) 0.000000 -79.56000 X( D1, C5) 0.000000 -72.25000 X( D1, C6) 0.000000 -60.85000 X( D1, C7) 0.000000 -76.07000 X( D1, C8) 0.000000 -73.06000 X( D1, C9) 0.000000 -76.88000 X( D1, C10) 0.000000 -58.09000 X( D1, C11) 0.000000 -60.99000 X( D1, C12) 0.000000 -79.78000 X( D1, C13) 0.000000 -65.03000 X( D1, C14) 0.000000 -65.63000 X( D1, C15) 1.000000 -76.07000 X( D1, C16) 0.000000 -72.25000 X( D2, C1) 0.000000 -87.00000 X( D2, C2) 1.000000 -83.50000 X( D2, C3) 0.000000 -68.53000 X( D2, C4) 0.000000 -83.50000 X( D2, C5) 1.000000 -79.78000 X( D2, C6) 0.000000 -72.03000 X( D2, C7) 0.000000 -79.78000 X( D2, C8) 1.000000 -83.28000 X( D2, C9) 0.000000 -83.28000 X( D2, C10) 0.000000 -63.75000 X( D2, C11) 0.000000 -60.85000 X( D2, C12) 0.000000 -80.60000 X( D2, C13) 0.000000 -65.63000 X( D2, C14) 0.000000 -67.24000 X( D2, C15) 0.000000 -79.78000 X( D2, C16) 0.000000 -79.78000 X( D3, C1) 0.000000 -81.20000 X( D3, C2) 0.000000 -76.56000
X( D3, C4) 1.000000 -80.38000 X( D3, C5) 0.000000 -72.84000 X( D3, C6) 0.000000 -76.07000 X( D3, C7) 0.000000 -72.84000 X( D3, C8) 0.000000 -76.56000 X( D3, C9) 1.000000 -83.28000 X( D3, C10) 0.000000 -68.53000 X( D3, C11) 0.000000 -72.57000 X( D3, C12) 0.000000 -76.56000 X( D3, C13) 0.000000 -63.75000 X( D3, C14) 0.000000 -76.07000 X( D3, C15) 0.000000 -72.84000 X( D3, C16) 0.000000 -72.84000 X( D4, C1) 1.000000 -84.10000 X( D4, C2) 0.000000 -73.06000 X( D4, C3) 0.000000 -64.49000 X( D4, C4) 0.000000 -80.60000 X( D4, C5) 0.000000 -75.74000 X( D4, C6) 0.000000 -72.03000 X( D4, C7) 0.000000 -76.88000 X( D4, C8) 0.000000 -79.24000 X( D4, C9) 0.000000 -83.28000 X( D4, C10) 0.000000 -68.53000 X( D4, C11) 0.000000 -72.57000 X( D4, C12) 1.000000 -80.60000 X( D4, C13) 0.000000 -68.53000 X( D4, C14) 0.000000 -76.07000 X( D4, C15) 0.000000 -76.88000 X( D4, C16) 0.000000 -75.74000
Row Slack or Surplus Dual Price
1 650.9900 1.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 1.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 1.000000 0.000000
9 1.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 1.000000 0.000000
13 1.000000 0.000000
15 1.000000 0.000000 16 1.000000 0.000000 17 0.000000 0.000000 18 1.000000 0.000000 19 0.000000 0.000000 20 1.000000 0.000000 21 0.000000 0.000000 22 0.000000 0.000000
上述数据是所有运行的结果,其中A 的取值表示每个部门对相应应聘者的评分,是题目给定已知的。

而X 的取值则代表了是否录用该应聘者。

若X(Dm,Cn)的取值为1,则表示m 部门录用n 位应聘者;若X(Dm,Cn)取值为0,则表示不录用。

那么通过查看x 的取值可以看到,X( D1, C15),X( D2, C2) , X( D2, C5) ,X( D2, C8),X( D3, C4) , X( D3, C9),X( D4, C1),X( D4, C12),的取值为1,其他x 的分量取值为0,也即:
部门1录用了15号应聘者,
部门2和3录用了2号、5号和8号应聘者,
部门4和5录用了4号和9号应聘者,
部门6和7录用了1号和12号应聘者。

由结果还可以看出目标函数最优值为650.99,即所有部门对录用者的评分之和为650.99。

第二方案:择优分配
建模:
建模前的一些具体问题的分析同方案一,只是这里需要进行两次规划
第一步:先从16名应聘者中择优选出前8名
首先确定每个应聘者的综合分数,由于每个部门的评分给的跨度大小不同,将直接影响各个应聘者总分的高低,所以应该用极差规范化方法对应聘者的分数作规范化处理。

规范化公式:
116
116
116
m in (1,2,,16)
m ax m in j j
j j j j
j j A A A j A A ≤≤≤≤≤≤-'=
=-
得出规范化的评分后,再从高到低择优选出前八名应聘者。

程序:
以下是matlab程序以及相应的计算结果:
A=[83.28 72.84 65.03 79.56 72.25 60.85 76.07 73.06 76.88 58.09 60.99 79.78 65.03 65.63 76.07 72.25];
B=[87 83.5 68.53 83.5 79.78 72.03 79.78 83.28 83.28 63.75 60.85 80.6 65.63 67.24 79.78 79.78];
C=[81.2 76.56 56.81 80.38 72.84 76.07 72.84 76.56 83.28 68.53 72.57 76.56 63.75 76.07 72.84 72.84];
D=[84.1 73.06 64.49 80.6 75.74 72.03 76.88 79.24 83.28 68.53 72.57 80.6 68.53 76.07 76.88 75.74];
MAXA=max(A);MINA=min(A);
MAXB=max(B);MINB=min(B);
MAXC=max(C);MINC=min(C);
MAXD=max(D);MIND=min(D);
for i=1:16,
a(i)=(A(i)-MINA)/(MAXA-MINA);
b(i)=(B(i)-MINB)/(MAXB-MINB);
c(i)=(C(i)-MINC)/(MAXC-MINC); d(i)=(D(i)-MIND)/(MAXD-MIND); end; for j=1:16,
s(j)=a(j)+b(j)+c(j)+d(j); end;
最后结果显示: s =
Columns 1 through 8
3.9214 2.6349 0.5692 3.4304 2.4653 1.6492 2.6751 2.9503
Columns 9 through 16
3.5619 0.7597 1.1226 3.1840 0.9265 1.8618 2.6751 2.4653
根据s 的取值最终确定出规范化得分最高的前八名应聘者:1、2、4、7、8、9、12、15
第二步:再按照方案一的做法将这八名应聘者分配给七个部门
这一步同方案一的思路完全一样,只是将方案一中的16名应聘者改成8名。

建模:
用ij x 表示决策变量,即当录用第j 个应聘者,并将其分配给第i 个部门时
1ij x =;其它情况0ij x = (1, 2,,7 ;1,2,,16)i j == 。

设第i 名应聘
者被部门1录用这个事件为1j x ,被部门2或3录用这个事件为2j x ,被部门4或5录用这个事件为3j x ,被部门6或7录用这个事件为4j x
根据按需录用的要求,原问题的优化目标是要使用人单位对应聘者的满意度总分最高。

于是有整数规划模型:
48
1148
11
4
181181m ax 8
1
(1,2,,8)..1223
(2,3,4)(1,2,,8,1,2,3,4)
1 or 0
ij j ij
x i j ij i j ij i j j ij j ij z C x x x j s t x x i i j x ========⎧=⎪⎪⎪==⎪⎪⎪⎨≤≤⎪⎪⎪
≤≤=⎪⎪
==⎪=⎩∑∑∑∑∑∑∑ 上式约束条件中:(1)式确保总的录用人数为8人,(2)式保证每个人被录用一次,(3)(4)两式则是确保每个部门至少录用一人,至多录用两人,(5)式则是0-1约束。

但事实上(1)式的限制录用人数8人,加上(3)(4)两式的下限(每个部门至少
一人)就可以保证每个部门招的人数不可能多于两个人,故而(3)(4)两式的上限是多余的,可以省略。

程序:
用LINGO 求解上述问题的程序如图2所示。

图2
MODEL:
TITLE CIVIL SERVICE RECUITMENT PROBLEM;
SETS:
DEPARTMENT/D1..D4/;
CANDIDATE/C1..C8/;
LINKS(DEPARTMENT,CANDIDATE): A,X;
ENDSETS
MAX=@SUM(LINKS:A*X);
@SUM(DEPARTMENT(I):@SUM(CANDIDATE(J):X(I,J)))=8;
@FOR(CANDIDATE(J):@SUM(DEPARTMENT(I):X(I,J))=1);
@SUM(CANDIDATE(J):X(1,J))>=1;
@SUM(CANDIDATE(J):X(2,J))>=2;
@SUM(CANDIDATE(J):X(3,J))>=2;
@SUM(CANDIDATE(J):X(4,J))>=2;
@FOR( LINKS:@BIN(X));
DATA:
A=83.28 72.84 79.56 76.07 73.06 76.88 79.78 76.07
87 83.5 83.5 79.78 83.28 83.28 80.6 79.78
81.2 76.56 80.38 72.84 76.56 83.28 76.56 72.84
84.1 73.06 80.6 76.88 79.24 83.28 80.6 76.88 ;
ENDDATA
END
运行结果如下:
Global optimal solution found.
Objective value: 650.9900
Extended solver steps: 0
Total solver iterations: 0
Model Title: CIVIL SERVICE RECUITMENT PROBLEM
Variable Value Reduced Cost
A( D1, C1) 83.28000 0.000000
A( D1, C2) 72.84000 0.000000
A( D1, C3) 79.56000 0.000000
A( D1, C4) 76.07000 0.000000
A( D1, C5) 73.06000 0.000000
A( D1, C6) 76.88000 0.000000
A( D1, C7) 79.78000 0.000000
A( D1, C8) 76.07000 0.000000
A( D2, C1) 87.00000 0.000000
A( D2, C2) 83.50000 0.000000
A( D2, C3) 83.50000 0.000000
A( D2, C4) 79.78000 0.000000
A( D2, C5) 83.28000 0.000000
A( D2, C6) 83.28000 0.000000
A( D2, C7) 80.60000 0.000000
A( D2, C8) 79.78000 0.000000
A( D3, C1) 81.20000 0.000000
A( D3, C3) 80.38000 0.000000 A( D3, C4) 72.84000 0.000000 A( D3, C5) 76.56000 0.000000 A( D3, C6) 83.28000 0.000000 A( D3, C7) 76.56000 0.000000 A( D3, C8) 72.84000 0.000000 A( D4, C1) 84.10000 0.000000 A( D4, C2) 73.06000 0.000000 A( D4, C3) 80.60000 0.000000 A( D4, C4) 76.88000 0.000000 A( D4, C5) 79.24000 0.000000 A( D4, C6) 83.28000 0.000000 A( D4, C7) 80.60000 0.000000 A( D4, C8) 76.88000 0.000000 X( D1, C1) 0.000000 -83.28000 X( D1, C2) 0.000000 -72.84000 X( D1, C3) 0.000000 -79.56000 X( D1, C4) 0.000000 -76.07000 X( D1, C5) 0.000000 -73.06000 X( D1, C6) 0.000000 -76.88000 X( D1, C7) 0.000000 -79.78000 X( D1, C8) 1.000000 -76.07000 X( D2, C1) 0.000000 -87.00000 X( D2, C2) 1.000000 -83.50000 X( D2, C3) 0.000000 -83.50000 X( D2, C4) 1.000000 -79.78000 X( D2, C5) 1.000000 -83.28000 X( D2, C6) 0.000000 -83.28000 X( D2, C7) 0.000000 -80.60000 X( D2, C8) 0.000000 -79.78000 X( D3, C1) 0.000000 -81.20000 X( D3, C2) 0.000000 -76.56000 X( D3, C3) 1.000000 -80.38000 X( D3, C4) 0.000000 -72.84000 X( D3, C5) 0.000000 -76.56000 X( D3, C6) 1.000000 -83.28000 X( D3, C7) 0.000000 -76.56000 X( D3, C8) 0.000000 -72.84000 X( D4, C1) 1.000000 -84.10000 X( D4, C2) 0.000000 -73.06000 X( D4, C3) 0.000000 -80.60000 X( D4, C4) 0.000000 -76.88000 X( D4, C5) 0.000000 -79.24000 X( D4, C6) 0.000000 -83.28000
X( D4, C8) 0.000000 -76.88000
Row Slack or Surplus Dual Price
1 650.9900 1.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 0.000000 0.000000
9 0.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 1.000000 0.000000
13 0.000000 0.000000
14 0.000000 0.000000
结果X( D1, C8) X( D2, C2) X( D2, C4) X( D2, C5) X( D3, C3) X( D3, C6) X( D4, C1) X( D4, C7) 取值为1,其余取值均为0。

以上结果编号与原始应聘者编号不同,下面将每位应聘者对应原始应聘者编号:部门1录用了15号应聘者,
部门2和3录用了2号、7号和8号应聘者,
部门4和5录用了4号和9号应聘者,
部门6和7录用了1号和12号应聘者。

与方案一的差别在于:方案一部门2、3录用5号应聘者,而此方案录用7号。

但最优值两者均相同。

这是由于本题目的数据给出的比较特殊,无论选择5号或者7号应聘者,部门满意度都是一样的,而不同的方案将有可能得出不同的结果,关键在于设计方案时侧重于哪一部分。

相关文档
最新文档