面试顺序问题的Matlab和Lingo解法
本文lingo解法来源[1]。
1 面试顺序问题
有 4 名同学到一家公司参加三个阶段的面试:公司要求每个同学都必须首先 找公司秘书初试,然后到部门主管处复试,最后到经理处参加面试,并且不允许插队(即 在任何一个阶段 4 名同学的顺序是一样的)。由于 4 名同学的专业背景不同,所以每人 在三个阶段的面试时间也不同,如下表所示。这 4 名同学约定他们全部面试完以后一起离开公司。假定现在时间是早晨 8:00,请问他们最早何时能离开公司?
秘书初试 | 主管复试 | 经理面试 | |
---|---|---|---|
同学甲 | 13 | 15 | 20 |
同学乙 | 10 | 20 | 18 |
同学丙 | 20 | 16 | 10 |
同学丁 | 8 | 10 | 15 |
2 建立模型
实际上,这个问题就是要安排 4 名同学的面试顺序,使完成全部面试所花费的时间最少。
记 t i j {
{t}_{ij}} tij为第i名同学参加第 j 阶段面试需要的时间(已知),令 x i j {
{x}_{ij}} xij表示第i名同学参加第j阶段面试的开始时间(不妨记早上 8:00 面试开始为 0 时刻) (i=1,2,3,4 ; j =1,2,3),T 为完成全部面试所花费的最少时间。
优化目标:
min { T } = { [ max i ( x i 3 + t i 3 ) ] } \min \left\{ T \right\}=\left\{ \left[ \underset{i}{\mathop{\max }}\,\left( {
{x}_{i3}}+{
{t}_{i3}} \right) \right] \right\} min{
T}={
[imax(xi3+ti3)]} (1)
约束条件:
1) 时间先后次序约束(每人只有参加完前一个阶段的面试后才能进入下一个阶段):
x i j + t i j ≤ x i , j + 1 , i = 1 , 2 , 3 , 4 , j = 1 , 2 {
{x}_{ij}}+{
{t}_{ij}}\le {
{x}_{i,j+1}},i=1,2,3,4,j=1,2 xij+tij≤xi,j+1,i