面试时间的优化问题

在建模课上老师布置了一道建模作业,想了蛮久的然后有了下面的这个思路,当时问了老师,他不予于评价,只说了要用到线性规划 ,然后我就抛弃了这个想法,然后较劲脑筋也想不出来,然后就到网上查找了,确实是使用线性规划的,当时学的是matlab,而网上使用的lingo软件(还没学)。虽然知道大概的意思,但是就是不知道怎么使用matlab怎么实现代码化,而且网上找的方法太过于麻烦(还不够简单),所以我又拿回原来就想出来的方法想了想,就有了下述方案。

原题:

 

秘书面试时间

主管面试时间

经理面试时间

13

15

20

10

20

18

20

16

10

8

10

15

 

有4名同学到一家公司参加三个阶段的面试:公司要求每个同学都首先找公司秘书初试,然后到部门主管处附试,最后到经理处参加面试,并且不允许插队(即在任何一个阶段4名同学的顺序是一样的).由于4名同学的专业背景不同,所以每个人在三个阶段的面试时间也不同,即上述表格。

这4名同学约定他们全部面试完后一起离开公司。假定现在时间是早晨8:00问他们最早何时能离开公司?

模型建立如下:

A=\begin{bmatrix} 13&15 &20 \\ 10 &20 &18 \\ 20 & 16&10 \\ 8&10 &15 \end{bmatrix}=\begin{bmatrix} a_{11} &a_{12} & a_{13}\\ a_{21}& a_{22} & a_{23}\\ a_{31}&a_{32} & a_{33}\\ a_{41}&a_{42} & a_{43} \end{bmatrix}

 

假定他们就按甲、乙、丙、丁的顺序进行逐个面试,假设当最后一个人面试完后总的时间记为T,则有

T= a_{11}+a_{12}+a_{13}+(a_{12}-a_{21})+(a_{13}-a_{22})+a_{23}+(a_{22}-a_{31})+(a_{23}-a_{32})+a_{33}+(a_{32}-a_{41})+(a_{33}-a_{42})+a_{43}

当上式中的a_{ij}-a_{i+1,j-1}>0时,取a_{ij}-a_{i+1,j-1}=0

当上式中的a_{ij}-a_{i+1,j-1}\leq 0时,取a_{ij}-a_{i+1,j-1}=|a_{ij}-a_{i+1,j-1}|

以下对进行解释:

把上述求解进行简单化,即假设只有甲、乙两个人在进行面试,且严格按照拟定顺序进行面试,则记两人面试时间完后的总时间为T,则甲的面试时间一定包含在T中,即先有

T\supset a_{11}+a_{12}+a_{13}

因为要按照事先排好的顺序进行面试,故而只有当前面一个人面试完了才轮到下一个人,即当甲参加主管面试时乙才能参加秘书的面试固有上面

(a_{12}-a_{21})>0时,表示当甲还在面试时乙已近面试完并且已经在等甲面试完,而且由于时间的连续性,乙的面试与等待时间已经算在甲的面试时间里了,故取(a_{12}-a_{21})=0

②当(a_{12}-a_{21})<0时,表示当甲面试完了乙还在面试,即当按照事先的顺序进行严格的面试时,在甲乙面试的过程中将会产生|a_{12}-a_{21}|的时间空隙,故有

T\supset a_{11}+a_{12}+a_{13}+|a_{12}-a_{21}|

把上述两个人的情况推广到四个人的情况就可以得到上述的T表达式。

题目要求的是min T,故使用穷举法把所有的排列所得到的时间进行求解,然后取最小值。

最后结果为:min T=84 分钟,最佳的排队顺序为丁、甲、乙、丙。

matlab代码如下(大概是c语言学疯了~):

A=[13,15,20
10,20,18
20,16,10
8,10,15]
a=zeros(1,24)
b=cell(1,24)
c=0
for i=1:4
    B=zeros(4,3)
    C=A
    B(1,:)=C(i,:)
    C(i,:)=[]
    for j=1:3
        D=C
        B(2,:)=D(j,:)
        D(j,:)=[]
        for k=1:2
            E=D
            B(3,:)=E(k,:)
            E(k,:)=[]
            for l=1
                B(4,:)=E(l,:)    %上面主要是求出所有的排序,即穷举
                T=B(1,1)+B(1,2)+B(1,3)+B(2,3)+B(3,3)+B(4,3)
                for n=1:3
                    for m=2:3
                        if B(n,m)>B(n+1,m-1)
                            continue
                        else
                            T=T-(B(n,m)-B(n+1,m-1))
                        end
                    end
                end
                c=c+1
                a(1,c)=T
                b{1,c}=B
            end
        end
    end
end
a
b
t=min(a)
%//a中数值对应的排列在b中对应的位置

 

  • 16
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值