运筹学课程设计报告(附代码)

《运筹学》课程设计报告

姓名:

班级:

学号:                                                               

一、问题描述

1、机型指派问题

   机型指派优化设计是航空公司制定航班计划的重要内容,它要求在满足航班频率和时刻安排以及各机型飞机总数约束的条件下,将各机型飞机指派给相应的航班,使运行成本最小化。本课程设计要求建立机型指派问题的数学模型,应用优化软件Lindo/Lingo进行建模求解,给出决策建议,包括各机型执行的航班子集和相应的运行成本。

2、问题描述

已知某航空公司航班频率和时刻安排如《运筹学课程设计指导书》中表1所示,航班需求数据和运输距离如表2所示,其中,OrignA/P表示起飞机场,Dep.T.表示起飞时间,Dest.A/P表示目标机场,Dist表示轮挡距离,Demand表示航班需求量,Std  Dev.表示需求的标准差。该航空公司的机队有两种机型:9架B737-800,座位数162;6架B757-200,座位数200。飞八个机场:A,B,I,J,L,M,O,S。

B737-800的CASM(座英里成本)是0.34元,B757-200是0.36元。 两种机型的 RASM(座英里收益)都是 1.2元。以成本最小为目标进行机型指派,在成本方面不仅考虑运行成本,还必须考虑旅客溢出成本,否则将偏向于选取小飞机,使航空公司损失许多旅客。

旅客溢出成本是指旅客需求大于航班可提供座位数时,旅客流失到其他航空公司造成的损失。旅客需求服从N(μ,σ)的正态分布。如果机票推销工作做得好,溢出旅客并不全部损失,有部分溢出旅客将该成本航空公司其他航班,这种现象叫做“再获得”(Recapture)。设有15%的溢出旅客被再获得。

将飞机指派到航班上去,并使飞机总成本最小。

二、分析建模

1.确定决策变量

经过对问题描述的分析得出,要解决飞机机型指派问题,我设定了两类变量:

  (1)针对各条航线的机型,令B737-800和B757-200分别为机型1和机型2,设变量Xi,j.其中101≤i≤142,j=1或2。且对于变量Xi,j=0或1,当Xi,j=1,表示第i条航线由第j种飞机运营。例如,X101,1=1,则第101号航班由第1种机型飞行,且X101,2=0

(2)针对机场时间节点飞机流的变量,设变量Gm,j.表示对于第m个节点上第j种机型的数量,例如,GA1,1表示A机场第1个节点上第1种机型的数量。

2.目标函数

以飞机总成本最小为指派目标,而单个航班的飞机总成本包括两个部分:1.运输成本;2. 旅

客溢出成本;其中运输成本的表达式为:B737-800的架数*162*0.34*该航班的轮挡距离+ B757-200的架数*200*0.36*该航班的轮挡距离;旅客溢出成本的表达式为:航班旅客溢出的期望值*1.2*该航班的轮挡距离*0.85。详细计算公式如下:

(1)营运成本

    B737-800 :C1=       101≤i≤142

B757-200 :C2=       101≤i≤142

  CASM表示飞机座英里成本,S表示飞机座位数,Dist(i)表示第i条航线的轮挡距离

(2)旅客溢出成本

B737-800 :C1’=旅客溢出数期望值*机票价格

               =     101≤i≤142

B757-200 : C2’=旅客溢出数期望值*机票价格

               =     101≤i≤142

    RASM表示飞机座英里收益

    其中,对于两种机型的旅客溢出期望值

        E(d)=

              =e-(x2/2)dx

        μ表示航班需求量的期望,σ表示需求的标准差, c表示飞机的座位数

(3)建立目标函数

         Min C=C1+C2+C1’+C2’

2.时空网络建模及其约束条件

(1)节点飞机平衡条件

对于每种机型,在时空网络中各节点的飞机流必须保持平衡。如某机型有一定数量航班到达,一定数量航班出发,因此该节点后该机型留下飞机数=原有飞机数+到达飞机数-离开飞机数。下面会对各个机场的具体节点飞机流量状况进行解释说明。(已设定B737-800为机型1, B757-200为机型2)

如分析A机场的各机型飞机流量状况。根据节点平衡条件,节点A1的约束条件:GA1,1=GA6,1-X110,1 (或者为GA1,2=GA6,2-X110,2)。其中GA1,1代表该机场节点现存飞机数目,其中A代表机场,A1,1中前一个1代表机场A的第一个节点,第二个1代表机型1。

X110,1中代表飞入或飞出飞机架数,只能为0或1,110代表航班代号,1代表第一种机型。以下约束条件具有相似的意义,将不作详细阐述。并且只详尽列出节点A的约束条件,其他节点的情况可以同理写出。

对于机型1而言有如下约束条件        

节点A2的约束条件:GA2,1=GA1,1+x131,1

节点A3的约束条件:GA3,1=GA2,1-x111,1

节点A4的约束条件:GA4,1=GA3,1+x132,1

节点A5的约束条件:GA5,1=GA4,1-x112,1

节点A6的约束条件:GA6,1=GA5,1+x133,1

对于机型2而言有如下约束条件

节点A2的约束条件:GA2,2=GA1,2+x131,2)

节点A3的约束条件:GA3,2=GA2,2+x111,2)

节点A4的约束条件:GA4,2=GA3,2+x132,2)

节点A5的约束条件:GA5,2=GA4,2+x112,2)

节点A6的约束条件:GA6,2=GA5,2+x133,2)

运筹学课程设计报告(附代码)

运筹学课程设计报告(附代码)

运筹学课程设计报告(附代码)

运筹学课程设计报告(附代码)

运筹学课程设计报告(附代码)

运筹学课程设计报告(附代码)

(2)飞机总数约束

每基地机场各机型过夜飞机数之和不超过该型飞机的总数

对于机型1,有如下的总数约束:

    GA6,1+GB6,1+GI6,1+GJ40,1+GL6,1+GM6,1+GO6,1+GS6,1≤9

对于机型2,有如下的总数约束:

    GA6,2+GB6,2+GI6,2+GJ40,2+GL6,2+GM6,2+GO6,2+GS6,2≤6

(3)对每条航线飞机数的限制

∑Xi,k=1    i代表航线,如101;k代表机型,只能是1和2。

具体表达如:X101,1+X101,2=1,并且X101,1和X101,2只能一个取0,一个取1

三.模型求解

 Model:

sets:

flight/@OLE('data.xls','Flight_No')/:Dist,Demand,std_dev,Orign_AP,Dist_AP;

Airport/1..8/;  !个机场;

airline/1..42/;  !共42条航线;

Timenode/1..6/;  !对于除基地J机场外的7个机场,每个均有6个节点;

Planetype/1,2/:seat,casm;           !两种机型,座位数和座英里成本;

flight_assign(flight,Planetype):x;   !由航线和机型组成的指派二维变量;

Airparking(Airport,airline,Planetype):G;  !由机场,节点和机型组成的三维变量;

link/1..84/:flightno,flag;   !以对各机场的时间线节点为序的集;

endsets

data:

Dist,Demand,std_dev,Orign_AP,Dist_AP=@OLE('D:\data1.xls');   !轮挡距离、航班需求量、需求标准差、起飞机场以及降落机场可从excel表格中直接读去数据;

flightno,flag=@ole('D:\data2.xls');

seat=162,200;

casm=0.34,0.36;

rasm=1.2;

Recapture=0.15;     

enddata

!objective  目标函数;

min=@sum(flight_assign(i,j):x(i,j)*casm(j)*seat(j)*Dist(i)+x(i,j)*rasm*Dist(i)*std_dev(i)*(1-Recapture)*@psl(((seat(j)-Demand(i))/std_dev(i))));

                         !目标为成本最小,运输成本和旅客溢出成本;

!constraint   约束条件;

@for(flight_assign:@bin(x));           !对每条航线的机型,指派后只能为0或1;

@for(flight(i):@sum(Planetype(j):x(i,j))=1); !对每条航线,两种机型只能任选其一,故和为1;

!各机场的节点飞机流平衡条件如下:

对于第一机场(即A机场);

G(1,1,1)=G(1,6,1)-x(10,1); 

G(1,1,2)=G(1,6,2)-x(10,2);  !对两种机型过夜节点与第一个节点联系;

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(1,j,k)=G(1,j-1,k)+x(flightno(j)-100,k)*flag(j)));    !按时间线上的节点顺序,建立平衡条件;

!对于第二机场(即B机场);

G(2,1,1)=G(2,6,1)-x(16,1);

G(2,1,2)=G(2,6,2)-x(16,2);

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(2,j,k)=G(2,j-1,k)+x(flightno(j+6)-100,k)*flag(j+6)));

!对于第三机场(即I机场);

G(3,1,1)=G(3,6,1)+x(40,1);

G(3,1,2)=G(3,6,2)+x(40,2);

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(3,j,k)=G(3,j-1,k)+x(flightno(j+12)-100,k)*flag(j+12)));

!对于第四机场(即J机场);

G(4,1,1)=G(4,42,1)-x(40,1);

G(4,1,2)=G(4,42,2)-x(40,2);

@for(planetype(k):@for(airline(j)|j#ge#2:G(4,j,k)=G(4,j-1,k)+x(flightno(j+18)-100,k)*flag(j+18)));

!对于第五机场(即L机场);

G(5,1,1)=G(5,6,1)-x(1,1);

G(5,1,2)=G(5,6,2)-x(1,2);

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(5,j,k)=G(5,j-1,k)+x(flightno(j+60)-100,k)*flag(j+60)));

!对于第六机场(即M机场);

G(6,1,1)=G(6,6,1)-x(13,1);

G(6,1,2)=G(6,6,2)-x(13,2);

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(6,j,k)=G(6,j-1,k)+x(flightno(j+66)-100,k)*flag(j+66)));

!对于第七机场(即O机场);

G(7,1,1)=G(7,6,1)-x(7,1);

G(7,1,2)=G(7,6,2)-x(7,2);

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(7,j,k)=G(7,j-1,k)+x(flightno(j+72)-100,k)*flag(j+72)));

!对于第八机场(即S机场);

G(8,1,1)=G(8,6,1)-x(4,1);

G(8,1,2)=G(8,6,2)-x(4,2);

@for(planetype(k):@for(Timenode(j)|j#ge#2:G(8,j,k)=G(8,j-1,k)+x(flightno(j+78)-100,k)*flag(j+78)));

!每种机型的飞机总数构成的过夜飞机约束条件如下:

第一种机型;

G(1,6,1)+G(2,6,1)+G(3,6,1)+G(4,42,1)+G(5,6,1)+G(6,6,1)+G(7,6,1)+G(8,6,1)<=9;

!第二种机型;

G(1,6,2)+G(2,6,2)+G(3,6,2)+G(4,42,2)+G(5,6,2)+G(6,6,2)+G(7,6,2)+G(8,6,2)<=6;

end

四.结果分析

  1.对各条航线的机型指派结果:

  Variable           Value              Variable           Value 

X( 101, 1)        1.000000              X( 101, 2)        0.000000

X( 102, 1)        1.000000         X( 102, 2)        0.000000                              X( 103, 1)        1.000000          X( 103, 2)        0.000000

X( 104, 1)        1.000000            X( 104, 2)        0.000000

X( 105, 1)        1.000000         X( 105, 2)        0.000000

X( 106, 1)        1.000000         X( 106, 2)        0.000000

X( 107, 1)        1.000000         X( 107, 2)        0.000000

X( 108, 1)        1.000000         X( 108, 2)        0.000000

X( 109, 1)        1.000000         X( 109, 2)        0.000000

X( 110, 1)        0.000000                X( 110, 2)        1.000000 

X( 111, 1)        0.000000         X( 111, 2)        1.000000

X( 112, 1)        1.000000              X( 112, 2)        0.000000           

X( 113, 1)        0.000000           X( 113, 2)        1.000000            

X( 114, 1)        0.000000             X( 114, 2)        1.000000           

X( 115, 1)        1.000000           X( 115, 2)        0.000000            

X( 116, 1)        1.000000              X( 116, 2)        0.000000           

X( 117, 1)        0.000000            X( 117, 2)        1.000000     

X( 118, 1)        1.000000             X( 118, 2)        0.000000           

X( 119, 1)        1.000000              X( 119, 2)        0.000000               

X( 120, 1)        1.000000            X( 120, 2)        0.000000          

X( 121, 1)        1.000000           X( 121, 2)        0.000000           

X( 122, 1)        1.000000              X( 122, 2)        0.000000           

X( 123, 1)        1.000000           X( 123, 2)        0.000000          

X( 124, 1)        1.000000              X( 124, 2)        0.000000           

X( 125, 1)        1.000000           X( 125, 2)        0.000000           

X( 126, 1)        1.000000           X( 126, 2)        0.000000           

X( 127, 1)        1.000000             X( 127, 2)        0.000000               

X( 128, 1)        1.000000           X( 128, 2)        0.000000        

X( 129, 1)        1.000000           X( 129, 2)        0.000000          

X( 130, 1)        1.000000             X( 130, 2)        0.000000           

X( 131, 1)        0.000000             X( 131, 2)        1.000000           

X( 132, 1)        1.000000          X( 132, 2)        0.000000          

X( 133, 1)        0.000000            X( 133, 2)        1.000000           

X( 134, 1)        1.000000             X( 134, 2)        0.000000           

X( 135, 1)        0.000000            X( 135, 2)        1.000000           

X( 136, 1)        0.000000            X( 136, 2)        1.000000           

X( 137, 1)        0.000000           X( 137, 2)        1.000000     

X( 138, 1)        1.000000           X( 138, 2)        0.000000           

X( 139, 1)        1.000000            X( 139, 2)        0.000000          

X( 140, 1)        1.000000            X( 140, 2)        0.000000            

X( 141, 1)        1.000000           X( 141, 2)        0.000000            

X( 142, 1)        1.000000           X( 142, 2)        0.000000           

2.对约束条件的检验;

(1)       对飞机总数的约束:

           对于机型1:      G( 1, 6, 1)        0.000000            0.000000

                            G( 2, 6, 1)        1.000000            0.000000

                            G( 3, 6, 1)        0.000000            0.000000

                            G( 4, 42, 1)       3.000000            0.000000

                            G( 5, 6, 1)        2.000000            0.000000

                            G( 6, 6, 1)        0.000000            0.000000

                            G( 7, 6, 1)        1.000000            0.000000

                            G( 8, 6, 1)        2.000000            0.000000

飞机总数为:1+3+2+1+2=9,满足条件

           对于机型2:       G( 1, 6, 2)        1.000000            0.000000

                            G( 2, 6, 2)        0.000000            0.000000

                            G( 3, 6, 2)        0.000000            0.000000

                            G( 4, 42, 2)       2.000000            0.000000

                            G( 5, 6, 2)        0.000000            0.000000

                            G( 6, 6, 2)        2.000000            0.000000

                            G( 7, 6, 2)        0.000000            0.000000

                            G( 8, 6, 2)        0.000000            0.000000

飞机总数为:1+2+2=5,小于6    满足约束条件

(2)       对飞机流平衡分析

      仅取机场A,第一种机型为例:

G( 1, 1, 1)        0.000000              X( 110, 1)        0.000000       

G( 1, 2, 1)        0.000000             X( 131, 1)        0.000000        

G( 1, 3, 1)        0.000000           X( 111, 1)        0.000000

G( 1, 4, 1)        1.000000           X( 132, 1)        1.000000     

G( 1, 5, 1)        0.000000             X( 112, 1)        1.000000 

G( 1, 6, 1)        0.000000              X( 133, 1)        0.000000      

      G(1,1,1)=G(1,6,1)-x(10,1);   0=0-0

   G(1,2,1)=G(1,1,1)+x(31,1)  0=0+0

      G(1,3,1)=G(1,2,1)-x(11,1)  0=0-0

G(1,4,1)=G(1,3,1)+x(32,1)    1=0+1

G(1,5,1)=G(1,4,1)-x(12,1)     0=1-1

G(1,6,1)=G(1,5,1)+x(33,1)     0=1-1

五.结论

1.飞机机型指派结果

 用B737-800机型执行的航线为:

101,102,103,104,105,106,107,108,109,112,115,116,118,119,120,121,122,123,124,

125,126,127,128,129,130,132,134,138,139,140,141,142

  用B757-200机型执行的航线为:

110,111,113,114,117,131,133,135,136,137

2.最小成本为: 3352823元

参考文献:

[1]    《运筹学》课程设计——指导书:南京航空航天东西,2010。

相关推荐