《面试顺序问题.pdf》由会员分享,可在线阅读,更多相关《面试顺序问题.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面试顺序问题一、摘要本文立足现实生活中面试排序问题的特点,站在面试者的角度,要求整个面试过程中使用时间最短,即所有面试者能最早离开公司,分析问题。首先,本文的问题概述如下:有 4 名同学到一家公司参加三个阶段的面试:公司要求每个同学都必须首先找公司秘书初试,然后到部门主管处复试,最后到经理处参加面试,并且不允许插队即在任何一个阶段 4 名同学的顺序是一样的。已知每个同学在各个阶段面试所需时间详见附录三。各同学约定他们全部面试完以后一起离开公司。假定现在时间是早晨 8:00,问他们最早何时能离开公司。针对这一问题,由于面试人数较少,运算量不大,故可以运用枚举法将所有面试的情况列举出来。根据题目可
2、知,共有 4 名同学参加面试,不难得出,4 名同学面试顺序的所有情况共有 24 种,然后计算出所有情况下的面试结束时间,根据比较,可以得出题目要求下的最优结果,枚举法虽然解题效率相对要低,但是考虑的情况较为全面,得出的结果是可靠的。根据以上我们提到的枚举法解决该问题,可能做了很多的无用功,浪费了珍贵的时间,效率低下。为此我们可以进行优化,对于枚举法产生的弊端,我们可以运用 0-1 整数规划方法进行优化,根据题意建立较为优化的模型,建立相应的目标函数和约束条件,并且对目标函数进行进一步的改善,能够提高解题的效率,简化解决问题的过程,最后将我们的模型在 lingo 中求解,得出结果与枚举法相一致,
3、即 4 名同学面试完成的最短时间是 84 分钟,并且给出面试时间最短排序丁-甲-乙-丙,为公司面试安排提供具有一定指导意义的建议。关键词:关键词:面试问题枚举法 0-1 整数线性规划1二、问题重述题目给出有 4 名同学到一家公司参加三个阶段的面试,公司要求每位同学都必须首先找到公司秘书初试,然后到主管处复试,最后到经理处参加面试,并且不允许插队即在任何一阶段,4 名同学的顺序是一样的。由于 4 名同学的专业背景不同,所以每人在三个阶段的面试时间也不同。表 1同学甲同学乙同学丙同学丁秘书初试1310208主观面试15201610经理面试20181015根据题意这四名同学约定他们全部面试完成后一起
4、离开公司,现在时间是早晨8:00,此题需要我们给出一种最合理的排序方案,使得他们最早能够离开公司。三、问题分析与基本假设在社会工作和生活中,面试顺序问题十分常见。题目中的面试流程分为三个阶段,每一位面试官同时期只能面试一位同学,下一名同学面试之前需要等待上一位该阶段面试结束,由于 4 名同学在任何一阶段的顺序是一样的,公司在安排面试顺序的时候只需要考虑一次,使得总面试时间最短。由于数据较少运用枚举法可以得出真正正确的解。同时,这也是一个整数线性规划问题,针对此题,联系实际,可引入0-1变量,对目标函数进行优化求解。在进行数据分析时,不可能通过几个简单的假设就建立出一个完美的数学模型,这就需要对
5、现有数据进行一个筛选,并在此基础上建立出简易的数学模型。因此,我们假设如下:1假设早晨时间 8:00 为 0 时刻。2假设上一位同学面试结束后,下一位同学立刻开始该阶段面试,且时间间2隔为 0。3假设整个面试过程中任何一位面试官都连续工作。4假设面试过程中没有任何同学退出。5假设同学和面试官都在早晨八点准时到场。6各位同学和各位面试官没有事先约定好面试顺序,整个过程公平公正四、基本符号说明枚举法符号说明:tij表示第i个人在第 j 轮面试结束的时间xij表示第i个人在第 j 轮面试所经历的时间Tk表示每个面试顺序中每个面试者每轮面试结束时间矩阵Time表示各个同学完成各阶段面试的时刻Time1
6、.finaltime为每个面试顺序所对应的离开时间最优化方法符号说明:Xij表示第i个人面试第j阶段所用的时间;Tij表示第i个人面试第j阶段的开始时间;T表示 4 个人面试完成的总时间;Mik表示第k个人是否排在第i个人之前,Mik=1,表示第k个人排在第i个人之前,否则,Mik=0i=1,2,3,4;k=1,2,3,4;j=1,2,3五、模型建立与求解一枚举法一枚举法1.模型概述设第i个人在第 j 轮面试结束的时间为tij,所经历的时间为xij,每个面试顺序中每个面试者每轮面试结束时间设为矩阵Tk0 k 24,24 A4,则第4一个人在第一轮结束的时间为tij xij,tij xij ma
7、xti-1j,tij-1,则t43为最终结束时间。首先根据排列组合原理,可知所有面试顺序排列共有A44 24种。3确定每一种排序的面试结束时间为枚举对象,则每个矩阵中最后一行最后一列的时间即最早离开时间。根据题意编制模型如下:xijTimeij1 xijTimeijTimei1j xijx maxTimei1j,Timeij1iji 1,j 1i 1,2 j 4j 1,2 i 32 i 3,2 j 4利用 MATLAB 求解结果,得出每一种顺序下每位面试者结束时间矩阵去掉了第一行第一列的固定时间。流程图为了使过程更加显而易见,我们制作了简易的算法流程图,其想法是全排列出每一种面试排序方法,然后
8、建立计算公式分别计算每个面试者的结束时间。图 1根据此思路我们用 MATLAB 编写了相应程序得出48101581833最优解X5131520102018201610,此顺序的面试者结束时间矩阵为Time52136563156745172843.模型的优点1结合了企业面试时的要求和特点,一一列举所有可能,得到的结果肯定是正确的。2算法直观,容易理解,易于证明其正确性。3模型稳定,结果贴近实际。改良由于枚举法穷举了所有可能,运算量比较大,解题效率低下,如果枚举范围太大,在时间上就难以承受,所以我们可以在以下方面进行改良:1减少状态总数即减少枚举变量和枚举变量的值域,如采用隐枚举法可以设定条件减持
9、。2减少重复计算。3将原问题化为更小的问题,比方考虑等待时间最小即结束时间最少的算法实现。二优化模型二优化模型由于已知同学数量和阶段面试时间,只考虑固定一种顺序的情形,记Xij表示第i个同学面试第j阶段所用的时间,Tij表示第i个同学面试第j阶段的开始时间。引入 0-1 变量Mik,Mik表示第k个人是否排在第i个同学之前,Mik=1,表示第k个人排在第i个同学之前,否则,Mik=0。(i 1,2,3,4;j 1,2,3,4)1,第k个人排在第i个同学之前Mik0,第k个人排在第i个同学之后则Xi3为第i个同学面试第 3 阶段所用时间,Ti3为第i个同学面试第 3 阶段的开始时间,要求四人完成
10、面试后同时离开则可知Max(Xi3Ti3)表示四人完成面试后的结束时间,设为为目标函数T Max(Xi3Ti3)。5这样T越小则离开时间越早,于是对 0-1 整数线性规划模型进行改善,改写为MinT Max(Xi3Ti3)同时根据面试中的四人必须同时离开,可以建立约束X13T13 TXT T2323XT T3333X43T43 T此外,结合原题1每个人必须面试完上一轮才能开始下一轮面试XijTij Xij1(i 1,2,3,4;j 1,2)2 每个阶段j只能面试一个人:用 0-1 变量Mik表示第k个人是否排在第i个人之前,即第k个人排在第i个人之前,Mik=1;否则,Mik=0。假设Mik=
11、0,k排在i后面XijTij Xkj 0(i,k 1,2,3,4;j 1,2,3;i k)XkjTkj Xij T(i,k 1,2,3,4;j 1,2,3;i k)假设Mik=1,则k排在i前面XijTij Xkj T(i,k 1,2,3,4;j 1,2,3;i k)XkjTkj Xij 0(i,k 1,2,3,4;j 1,2,3;i k)综上所述,可得XijTij Xkj TMik(i,k 1,2,3,4;j 1,2,3;i k)XkjTkj Xij TMik(i,k 1,2,3,4;j 1,2,3;i k)加上之前的一个约束,综上,最终得出一个 0-1 整数线性规划模型MinT Max(X
12、i3Ti3)s.t.XijTij Xkj TMik,(i,k 1,2,3,4;j 1,2,3;i k)6XkjTkj Xij TMik,(i,k 1,2,3,4;j 1,2,3;i k)X13T13 TX23T23 TX33T33 TX43T43 T1,第k个人排在第i个同学之前Mik0,第k个人排在第i个同学之后该题是一个 0-1 整数线性规划问题,直接利用 lingo 编程求解。计算结果见图 2 和附录二。图 2根据结果,能使四人最早同时离开的面试排序用时 84 分钟,同时计算并汇总出各同学面试时间和开始时间如下表 2。表 2甲秘书初试甲主管初试甲经理面试乙秘书初试乙主管初试乙经理面试丙秘
13、书初试各阶段开始时间82136363656367各阶段使用时间13152010201820各阶段结束时间21363636567456丙主管初试丙经理面试丁秘书初试丁主管初试丁经理面试56740821161081015728481836各同学各阶段面试时间及排序9080706050403020100各阶段使用时间各阶段开始时间图 3图 4 显示了每位同学在各阶段面试时间长短的排序,可以看出甲的主管面试、乙的秘书面试、丁的经理面试,还有甲的经理面试、乙的主管面试、丙的秘书初试,都分别是同时结束的。表 3VariableM(S1,S2)M(S1,S3)M(S1,S4)M(S2,S3)M(S2,S4)
14、M(S3,S4)Value又根据表 5 的 0-1 变量运算结果可知最优面试排序为丁、甲、乙、丙,显然计算结果与枚举法模型结果相一致,确定正确。三结果分析通过枚举法和规划方法,最终可以确定,公司应该安排四位同学按照丁、甲、乙、丙这样的顺序进行面试可以到达用时最短时间的效果,即 84 分钟,早晨 9:24面试结束.枚举结果如下。8表 4完成面试所序号123456789101112面试顺序用时间丁丙乙甲丁丙甲乙丁乙丙甲丁乙甲丙丁甲乙丙丁甲丙乙丙丁乙甲丙丁甲乙丙乙丁甲丙乙甲丁丙甲乙丁丙甲丁乙102978986849510499109109104104131415161718192021222324乙
15、丙丁甲乙丙甲丁乙丁丙甲乙丁甲丙乙甲丁丙乙甲丙丁甲丙乙丁甲丙丁乙甲乙丙丁甲乙丁丙甲丁乙丙甲丁丙乙序号面试顺序完成面试所用时间9396939393931029791919195如此一来同学可以完成共同离开的心愿,且公司可以以最高效率工作。但是连续工作可能会导致面试官疲惫,公司可以适当在面试过程中添加休息时间,比方在 56 分钟时进行休息,此时刚好第一、二位同学丁和甲三轮面试结束,乙第二轮面试结束,丙第二轮面试尚未开始,所有人可以共同休息调整状态。图 4图 2 为所有排序方法的结束用时计算结果,可以看出各种顺序的用时差异相当大,当面试人数更多的时候,这一差距会更加显著,所以企业合理安排面试顺序的具有
16、重要现实意义。9六、模型评价与改良本文首先通过枚举法列举出 24 种排序方案,并计算出每一种排序方式的所用时间,虽然计算量较大,但程序较为容易实现,其正确性也较容易证明。但是可以运用隐枚举法进行改良,提高解题效率。其次,构建了面试排队决策的优化模型,通过目标函数,从而建立成了一个线性规划模型,求地了所有同学排序情况下,被排在最后的一个同学面试完时所用总时间 T也即排序后,从第一个同学参加第一阶段面试时开始计时,到最后一个同学面试完最后一阶段的这段时间中最小的一个,然后,又建立了一个0-1 变量表示其约束条件,并使用LINGO 软件求解,所得结果具有一定的正确性和指导意义。但是,本文只讨论了四个
17、同学面试三个阶段的合理排序方法,而没有讨论更多同学面试更多的阶段的合理排序的解决方案,从而使得面试总时间最短。在实际应用中还存在许多更复杂但是类似相关的情形,此时,假设还用本文中的解决方案未必是合理的。因此,对更多同学面试更多的阶段的合理排序的解决方案是进一步应该研究和改良的方向。七、参考文献1 姜启源,谢金星,叶俊.数学模型3 版.北京:高等教育出版社,2003.2 徐玖平,胡知能.运筹学-数据决策.北京:科学出版社,2006.第二版.北京:高等教育出版社,20024 赵静,但琦,数学建模与数学实验.北京:高等教育出版社,2003.5 Frank R.Giordano,Maurice D.W
18、eir,William P.Fox(美).数学建模.叶其孝,姜启源等译.北京:机械工业出版社,20056 宋兆基等.MATLABA 在科学计算中的应用.北京:清华大学出版社。2005.八、附录10附录一:MATLAB程序:student(1).shijian=13 15 20;student(2).shijian=10 20 18;student(3).shijian=20 16 10;student(4).shijian=8 10 15;studentT=pailie(4,student)结构体 Tfor i=1:24for i=1:24string=sprintf(X%d,i)=T(i).
19、rearray;eval(string);endend%将所有面试顺序所对应的面试时间保存为矩阵%求到所有面试顺序所对应的面试时间存到%将各学生面试时间存到结构体附录 1pailie.m 的内容):function T=pailie(k,S)%k 为进行全排列的个数A=1:k;Q=perms(A);%对 A 进行全排列得到的数组%得到 Q 的大小m,n=size(Q);for i=1:m a=Q(i,1);b=Q(i,2);c=Q(i,3);d=Q(i,4);T(i).rearray=S(a).shijian;S(b).shijian;S(c).shijian;S(d).shijian;end
20、end11%将全排列得到的面试者面试时间存到 T 结构体for k=1:24string=sprintf(Time%d(1,1),k)sprintf(=X%d(1,1);,k);eval(string);结束时间string=sprintf(Time%d(1,2),k)sprintf(=X%d(1,1),k)sprintf(+X%d(1,2);,k);eval(string);结束时间string=sprintf(Time%d(1,3),k)sprintf(=X%d(1,1),k)sprintf(+X%d(1,2),k)sprintf(+X%d(1,3);,k);eval(string);结束
21、时间string=sprintf(Time%d(2,1),k)sprintf(=X%d(1,1),k)sprintf(+X%d(2,1);,k);eval(string);结束时间string=sprintf(Time%d(3,1),k)sprintf(=X%d(1,1),k)sprintf(+X%d(2,1),k)sprintf(+X%d(3,1);,k);eval(string);结束时间string=sprintf(Time%d(4,1),k)sprintf(=X%d(1,1),k)sprintf(+X%d(2,1),k)sprintf(+X%d(4,1);,k);eval(string
22、);结束时间endfor k=1:24for i=2:4for j=2:312%对每一个面试顺序中第一个面试者中秘书初始%对每一个面试顺序中第一个面试者中主管复试%对每一个面试顺序中第一个面试者中经理面试%对每一个面试顺序中第二个面试者中秘书初始%对每一个面试顺序中第二个面试者中秘书初始sprintf(+X%d(3,1),k)%对每一个面试顺序中第二个面试者中秘书初始formatSpec=Time%d(i,j)=X%d(i,j)+max(Time%d(i-1,j),Time%d(i,j-1);str=sprintf(formatSpec,k,k,k,k);eval(str);%个结束时间end
23、endend则每个矩阵中最后一行最后一列的时间即最早离开时间for i=1:24time(i).final=T(i).rearray(4,3);end for i=1:24format=Time(i).finaltime=Time%d(4,3);str1=sprintf(format,i);eval(str1);end体bar(Time.finaltime)运行结果:其余数值结果冗长,故不予表述。%把最终离开时刻做成一张柱状图%把 24 种面试顺序最终离开跌时刻输出为一个结构%把每个面试顺序中每个面试者每轮面试剩下 4131201008060402000510152025附录二:lingo程序
24、:model:sets:students;!学生集三阶段面试模型;phases;!阶段集;sp(students,phases):t,x;ss(students,students)|&1#LT#&2:m;end setsdata:students=s1.s4;phases=p1.p3;t=13 15 2010 20 1820 16 10148 10 15;end datans=size(students);!学生数;np=size(phases);!阶段数;!单个学生面试时间先后次序的约束;for(sp(i,j)|j#LT#np:x(i,j)+t(i,j)=x(i,j+1);!学生间的面试先后
25、次序保持不变的约束;for(ss(i,k):for(phases(j):x(i,j)+t(i,j)-x(k,j)=200*m(i,k);x(k,j)+t(k,j)-x(i,j)=200*(1-m(i,k););!目标函数;min=TMAX;for(students(i):x(i,3)+t(i,3)=TMAX);!把Y定义0-1变量;for(ss:bin(m);end运行结果:Global optimal solution found.Objective value:Objective bound:Infeasibilities:Extended solver steps:815 Total solver iterations:598Variable Value Reduced Cost NS 4.000000 NP 3.000000 TMAX 84.0000016Row Slack or Surplus Dual Price1718附录三:同学甲同学乙同学丙同学丁秘书初试1310208主观面试15201610经理面试2018101519