GAMS [ Home | Support | Sales | Solvers | Documentation | Model Library | Search | Contact Us ]

airsp.gms : Aircraft Allocation


The objective of this model is to allocate aircrafts to routes to maximize
the expected profit when traffic demand is uncertain. Three different
formulations are presented:

  * the original lambda formulation
  * a stochastic equivalent with sampling
  * a stochastic equivalent with all scenarios

Reference:
Large Model of Types: OSLSE lp
$Title Aircraft allocation - stochastic optimization (AIRSP,SEQ=189) $Ontext The objective of this model is to allocate aircrafts to routes to maximize the expected profit when traffic demand is uncertain. Three different formulations are presented: * the original lambda formulation * a stochastic equivalent with sampling * a stochastic equivalent with all scenarios Dantzig, G B, Chapter 28. In Linear Programming and Extensions. Princeton University Press, Princeton, New Jersey, 1963. $Offtext Set i aircraft types and unassigned passengers / a, b, c, d / j assigned and unassigned routes / route-1, route-2, route-3, route-4, route-5 / h demand states / 1*5 / ss nodes / s1*s1000 / s(ss) actual ord temp nodes ij(i,j) possible assignments jh(j,h) possible demand states Alias(h,hp,h1,h2,h3,h4,h5); Table dd(j,h) demand distribution on route j 1 2 3 4 5 route-1 200 220 250 270 300 route-2 50 150 route-3 140 160 180 200 220 route-4 10 50 80 100 340 route-5 580 600 620 Table lambda(j,h) probability of demand state h on route j 1 2 3 4 5 route-1 .2 .05 .35 .2 .2 route-2 .3 .7 route-3 .1 .2 .4 .2 .1 route-4 .2 .2 .3 .2 .1 route-5 .1 .8 .1 Table c(i,j) costs per aircraft (1000s) route-1 route-2 route-3 route-4 route-5 a 18 21 18 16 10 b 15 16 14 9 c 10 9 6 d 17 16 17 15 10 Table p(i,j) passenger capacity of aircraft i on route j route-1 route-2 route-3 route-4 route-5 a 16 15 28 23 81 b 10 14 15 57 c 5 7 29 d 9 11 22 17 55 Parameter aa(i) aircraft availability / a 10, b 19, c 25, d 15 / k(j) revenue lost (1000 per 100 bumped) / (route-1,route-2) 13, (route-3,route-4) 7, route-5 1 / ed(j) expected demand deltb(j,h) incremental demand gamma(j,h) probability of demand segment drand(j,ss) sampled demand sample(j) sampled mean num temp value prob(ss) scenario probability probxx temp probability value; ij(i,j) = p(i,j); jh(j,h) = lambda(j,h); ed(j) = sum(h, lambda(j,h)*dd(j,h)); deltb(jh(j,h)) = dd(j,h)-dd(j,h-1); gamma(j,h) = sum(hp$(ord(hp) >= ord(h)), lambda(j,hp)); display deltb,gamma,ed; Positive Variables x(i,j) number of aircraft type i assigned to route j z(j) allocated capacity bh(j,h) passengers bumped bs(j,ss) passengers bumped Variables phi total expected costs oc operating cost Equations ab(i) aircraft balance cb(j) capacity balance dbh(j,h) demand balance dbs(j,ss) demand balance ocd operating cost definition objh objective function objs objective function; ab(i).. sum(ij(i,j), x(ij)) =l= aa(i); cb(j).. z(j) =e= sum(ij(i,j), p(ij)*x(ij)); dbh(j,h).. dd(j,h) - bh(j,h) =l= z(j); dbs(j,s).. drand(j,s) - bs(j,s) =l= z(j); ocd.. oc =e= sum((i,j), c(i,j)*x(i,j)); objh .. phi =e= oc + sum(j, k(j)*sum(jh(j,h),lambda(j,h)*bh(j,h))); objs.. phi =e= oc + sum(j, k(j)*sum(s, prob(s)*bs(j,s))); Model alloch aircraft allocation / ab, cb, dbh, ocd, objh / allocs aircraft allocation / ab, cb, dbs, ocd, objs /; option limcol=0,limrow=0,solprint=off; parameter rep quick report; solve alloch minimizing phi using lp; rep(i,j,'alloch') = x.l(i,j); rep('ev',' ','alloch') = phi.l; * set up a sample of some size s(ss) = (ord(ss) <= 100); loop((j,s), num = uniform(0,1); drand(j,s) = sum(jh(j,h)$(num < gamma(jh)), deltb(j,h))); prob(s) = 1/card(s); sample(j) = sum(s, drand(j,s))/card(s); display sample; solve allocs minimizing phi using lp; rep(i,j,'allocs') = x.l(i,j); rep('ev',' ','allocs') = phi.l; * enumerate all scenarios prob(s) = 0; s(ss) = no; s('s1') = yes; loop((h1,h2,h3,h4,h5), probxx = lambda('route-1',h1) *lambda('route-2',h2) *lambda('route-3',h3) *lambda('route-4',h4) *lambda('route-5',h5); if(probxx, drand('route-1',s) = dd('route-1',h1); drand('route-2',s) = dd('route-2',h2); drand('route-3',s) = dd('route-3',h3); drand('route-4',s) = dd('route-4',h4); drand('route-5',s) = dd('route-5',h5); prob(s) = probxx; * s(ss) = s(ss-1) this looks nice but is very slow s(ss+1)$s(ss) = yes; s(ss-1)$s(ss) = no ) ); s(ss) = prob(ss); solve allocs minimizing phi using lp; rep(i,j,'allocss') = x.l(i,j); rep('ev',' ','allocss') = phi.l; display rep;