airsp.gms : 항공기 할당

설명

이 모델의 목적은 항공기를 경로에 할당하여 최대화하는 것입니다.
교통수요가 불확실할 때 예상되는 이익. 세 가지 다른
공식이 제시됩니다:

    원래의 람다 공식
    샘플링을 사용한 확률론적 등가물
    모든 시나리오에 대한 확률론적 동등성

대형 모델 유형 :LP


카테고리 : 슬롯 머신 모델 라이브러리


메인 파일 : airsp.gms

$title 항공기 할당 - 확률적 최적화(AIRSP,SEQ=189)

$onText
이 모델의 목적은 항공기를 경로에 할당하여 최대화하는 것입니다.
교통수요가 불확실할 때 예상되는 이익. 세 가지 다른
공식이 제시됩니다:

  * 원래의 람다 공식
  * 샘플링과 확률론적 등가물
  * 모든 시나리오에 대한 확률론적 등가물

Dantzig, GB, 28장. 선형 프로그래밍 및 확장.
프린스턴 대학 출판부, 뉴저지주 프린스턴, 1963년.

키워드: 선형 계획법, 확률론적 계획법, 항공기 할당, 경로 지정
$offText

세트
   i '항공기 유형 및 미지정 승객' / a, b, c, d /
   j '할당된 경로와 할당되지 않은 경로' / Route-1*route-5 /
   h '수요 상태' / 1*5 /
   ss '노드' / s1*s1000 /
   s(ss) '실제 ord 임시 노드'
   ij(i,j) '가능한 할당'
   jh(j,h) '가능한 수요 상태';

별칭(h,hp,h1,h2,h3,h4,h5);

테이블 dd(j,h) '경로 j의 수요 분포'
               1 2 3 4 5
   노선-1 200 220 250 270 300
   루트-2 50 150
   루트-3 140 160 180 200 220
   경로-4 10 50 80 100 340
   경로-5 580 600 620 ;

테이블 람다(j,h) '경로 j의 수요 상태 h 확률'
              1 2 3 4 5
   루트-1 .2 .05 .35 .2 .2
   루트-2 .3 .7
   루트-3 .1 .2 .4 .2 .1
   루트-4 .2 .2 .3 .2 .1
   경로-5 .1 .8 .1 ;

표 c(i,j) '항공기당 비용(1000대)'
       경로-1 경로-2 경로-3 경로-4 경로-5
   18 21 18 16 10
   ㄴ 15 16 14 9
   c 10 9 6
   d 17 16 17 15 10;

테이블 p(i,j) '경로 j에 있는 항공기 i의 승객 수용력'
       경로-1 경로-2 경로-3 경로-4 경로-5
   16 15 28 23 81
   b 10 14 15 57
   c 5 7 29
   d 9 11 22 17 55;

매개변수
   aa(i) '항공기 가용성' / a 10, b 19, c 25, d 15 /
   k(j) '수익 손실(충돌 100당 1000)' / (route-1,route-2) 13, (route-3,route-4) 7, Route-5 1 /
   ed(j) '예상 수요'
   deltb(j,h) '증분 수요'
   gamma(j,h) '수요 세그먼트 확률'
   drand(j,ss) '샘플링된 수요'
   Sample(j) '표본 평균'
   숫자 '임시 값'
   prob(ss) '시나리오 확률'
   probxx '임시 확률 값';

ij(i,j) = p(i,j);
jh(j,h) = 람다(j,h);

ed(j) = sum(h, 람다(j,h)*dd(j,h));
deltb(jh(j,h)) = dd(j,h) - dd(j,h-1);
감마(j,h) = sum(hp$(ord(hp) >= ord(h)), 람다(j,hp));

deltb, 감마, ed를 표시합니다.

양수 변수
   x(i,j) '경로 j에 할당된 항공기 유형 i의 수'
   z(j) '할당된 용량'
   bh(j,h) '승객들이 부딪혔습니다'
   bs(j,ss) '승객 충돌';

변수
   파이 '총 예상 비용'
   oc '운영 비용';

방정식
   ab(i) '항공기 균형'
   cb(j) '용량 균형'
   dbh(j,h) '수요 잔고'
   dbs(j,ss) '수요 잔액'
   ocd '운영 비용 정의'
   objh '목적 함수'
   objs '목적 함수';

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), 람다(j,h)*bh(j,h)));

objs..phi =e= oc + sum(j, k(j)*sum(s, prob(s)*bs(j,s)));

모델
   alloch '항공기 할당' / ab, cb, dbh, ocd, objh /
   allocs '항공기 할당' / ab, cb, dbs, ocd, objs /;

옵션 limCol = 0, limRow = 0, solPrint = off;

매개변수 담당자 '빠른 보고서';

lp를 사용하여 phi를 최소화하는 alloch를 해결합니다.
rep(i,j,'alloch') = x.l(i,j);
담당자('ev',' ','alloch') = phi.l;

* 일정 크기의 샘플 설정
s(ss) = (ord(ss) <= 100);

루프((j,s),
   숫자 = 균일(0,1);
   drand(j,s) = sum(jh(j,h)$(num < gamma(jh)), deltb(j,h));
);
확률 = 1/카드;
샘플(j) = 합계(s, drand(j,s))/카드(들);

디스플레이 샘플;

lp를 사용하여 phi를 최소화하는 할당을 해결합니다.
담당자(i,j,'allocs') = x.l(i,j);
담당자('ev',' ','allocs') = phi.l;

* 모든 시나리오를 열거
확률 = 0;
s(ss) = 아니오;
s('s1') = 예;
루프((h1,h2,h3,h4,h5),
   probxx = 람다('route-1',h1)
          * 람다('경로-2',h2)
          * 람다('경로-3',h3)
          * 람다('경로-4',h4)
          * 람다('경로-5',h5);
   만약(probxx,
      drand('경로-1',s) = dd('경로-1',h1);
      drand('경로-2',s) = dd('경로-2',h2);
      drand('경로-3',s) = dd('경로-3',h3);
      drand('route-4',s) = dd('route-4',h4);
      drand('route-5',s) = dd('route-5',h5);
      prob(들) = probxx;
* s(ss) = s(ss-1) 보기에는 좋지만 매우 느립니다.
      s(ss+1)$s(ss) = 예;
      s(ss-1)$s(ss) = 아니요;
   );
);
s(ss) = 확률(ss);

lp를 사용하여 phi를 최소화하는 할당을 해결합니다.
rep(i,j,'allocss') = x.l(i,j);
담당자('ev',' ','allocss') = phi.l;

디스플레이 담당자;