설명
Mulvey와 Ruszczynski는 2단계 네트워크 문제를 제공합니다. 슬롯 무료체험 운송 예약. 비행 일정이 완전히 결정되었습니다. 1단계에서는 선적할 슬롯 무료체험의 양이 불확실합니다. 의지 조치는 어떤 항공편에 어떤 슬롯 무료체험을 배치할지 결정하는 것입니다. 환적(Transshipment), 노드 m에서 노드 n으로 슬롯 무료체험을 두 배 이상 운송하는 것 둘 이상의 노선으로의 비행이 허용됩니다. 다음 예에서는 노드 공항이 있는 4노드 네트워크를 사용합니다. A, B, C, E. 모든 항공편에는 두 개의 다리가 있습니다. 즉, 공항을 포함하여 출발지에는 각 항공편마다 3개의 공항이 있습니다. 직접 다리는 허용되지 않습니다. A와 E 사이이지만 다른 모든 가능성은 허용됩니다. J. M. 멀비(J. M. Mulvey)와 A. 루슈친스키(A. Ruszczynski). 새로운 시나리오 분해 대규모 확률론적 최적화 방법. 운영 연구, 43(3),477-490, 1995년 5월-6월. Ariyawansa, KA 및 Felt, AJ, 새로운 확률론적 컬렉션에 대해 선형 프로그래밍 테스트 문제, INFORMS Journal on Computing 16(3), 291-299, 2004.
대형 모델 유형 :SP
카테고리 : 슬롯 무료체험 EMP 라이브러리
메인 파일 : 슬롯 무료체험gms
$title 확률론적 운송 수요를 이용한 화물 네트워크 스케줄링(CARGONET,SEQ=90)
$onText
Mulvey와 Ruszczynski는 2단계 네트워크 문제를 제공합니다.
화물 운송 예약. 비행 일정이 완전히 결정되었습니다.
1단계에서는 선적할 화물의 양이 불확실합니다.
의지 조치는 어떤 항공편에 어떤 화물을 배치할지 결정하는 것입니다.
환적(Transshipment), 노드 m에서 노드 n으로 화물을 두 배 이상 운송하는 것
둘 이상의 노선으로의 비행이 허용됩니다.
다음 예에서는 노드 공항이 있는 4노드 네트워크를 사용합니다.
A, B, C, E. 모든 항공편에는 두 개의 다리가 있습니다. 즉, 공항을 포함하여
출발지에는 각 항공편마다 3개의 공항이 있습니다. 직접 다리는 허용되지 않습니다.
A와 E 사이이지만 다른 모든 가능성은 허용됩니다.
J. M. 멀비(J. M. Mulvey)와 A. 루슈친스키(A. Ruszczynski). 새로운 시나리오 분해
대규모 확률론적 최적화 방법. 운영 연구,
43(3),477-490, 1995년 5월-6월.
Ariyawansa, KA 및 Felt, AJ, 새로운 확률론적 컬렉션에 대해
선형 프로그래밍 테스트 문제, INFORMS Journal on Computing 16(3),
291-299, 2004.
$offText
세트
n 노드 / A, B, C, E /
r 경로 / r1*r26 /
나는 위치 / i1*i3 /
항공기 / type0*type1 /;
별칭(n,n0,n1,n2,n3,k), (i,j);
데이터 경로 설정(n,n,n) /
A.B.A, A.B.E, A.B.C, A.C.A, A.C.E, A.C.B
B.A.B, B.A.C, B.C.A, B.C.B, B.C.E, B.E.B, B.E.C
C.A.C, C.A.B, C.B.C, C.B.A, C.B.E, C.E.C, C.E.B
E.C.E, E.C.B, E.C.A, E.B.E, E.B.C, E.B.A /
세트
Route(r,i,n) 노드 n이 경로 r의 i 위치에 있으면 예
vFirst(n,r)는 초기 노드 n으로 경로를 지정합니다.
vLast(n,r)는 마지막 노드 n으로 경로를 지정합니다.
착륙 공항 n이 있는 vLand(n,r) 경로
노드 n을 포함하는 W(n,r) 경로
n1 다음에 n2가 포함된 U(n1,n2,r) 경로
Udom(n1,n2) 임의의 경로에서 n1 뒤에 n2가 오면 예
OD(n1,n2) 운송 수요가 있는 노드의 출발지-목적지 쌍;
스칼라 nr /1/;
루프(데이터 경로(n1,n2,n3),
loop(r$(ord(r)=nr), 경로(r,'i1',n1) = 예; 경로(r,'i2',n2) = 예; 경로(r,'i3',n3) = 예);
nr = nr+1;
);
vFirst(n,r) = 경로(r,'i1',n);
vLast(n,r) = 경로(r,'i3',n);
vLand(n,r) = (경로(r,'i2',n) 또는 경로(r,'i3',n));
옵션 W<경로;
루프(r,
루프(나,
loop(j$(ord(j)>ord(i)), U(n1,n2,r)$(route(r,i,n1) 및 Route(r,j,n2)) = yes)
)
);
옵션 Udom<U;
OD(n1,n2) = 동일하지 않음(n1,n2);
경로 표시, vFirst, vLast, vLand, W, U, Udom, OD;
매개변수
b(n1,n2) 노드 간 배송 수요
c(a) 유형 a의 비행 시간 비용
q 항공기 탑승 및 하역을 위한 단위 화물 비용 / 1 /
미배송 화물에 대한 p 단위 벌금 / 1300 /
sigma(n) n / #n 25 /에서 허용되는 최대 착륙 횟수
d(a) 항공기 유형 a의 최대 탑재량
hmax(a) 유형 a의 최대 비행 시간
hmin(a) 유형 a의 최소 비행 시간
f(n1,n2) 노드 간 최소 직항편 수 / #n1.#n2 0 /
h(r,a) 유형 a의 경로 r에서의 비행 시간;
테이블 b(n1,n2) 출발지-목적지 수요
알파벳 C E
5 8 4
B 4.5 6.7 4.2
C 10.1 8.3 12.2
E 3.2 5.3 7.2 ;
테이블 aData(a,*)
페이로드 비용 최대 시간 분 시간
유형0 8 5 480 0
유형1 6 4 240 0 ;
c(a) = aData(a,'비용');
d(a) = aData(a,'페이로드');
hmax(a) = aData(a,'maxhours');
hmin(a) = aData(a,'분시간');
테이블 비행시간(a,n,n)
알파벳 C E
유형0.A 5 7
유형0.B 4 8
type0.C 5
1.A형 6 8.4
1.B형 4.8 9.6
유형1.C 6 ;
h(r,a)=sum((경로(r,i,n1),n2)$(경로(r,i+1,n2)), flightTime(a,n1,n2)+flightTime(a,n2,n1));
b,c,d,hmax,hmin,h를 표시합니다.
변수
X(r,a) 경로 r에 있는 a 유형의 항공기 수
DIRECT(r,n1,n2) 경로 r의 노드 간에 직접 배송된 화물의 양
T(r,n1,k,n2) 경로 r의 환적 노드 k를 통해 n1에서 n2로 이동하는 화물의 양(n1과 k는 경로 r의 일부임)
S(r,k,n2) 경로 r을 통해 환적 노드 k에서 n2로 이동한 환적 화물의 양
Y(n1,n2) n1과 n2 사이의 미배송 화물
Z(r,i) i에서 i+1로 가는 노선 r의 미사용 용량
OBJ 목적 함수 값;
양수 변수 DIRECT,T,S,Y,Z;
정수변수 X;
방정식
objFct 목적 함수
minFlightReq(n1,n2) 최소 비행 요구 사항
landLim(n) 최대 착륙 제한
순환(a,n) 시작과 동일한 상태로 라운드 종료
timeLimLow(a) 하한 시간 제한
timeLimUp(a) 시간 상한
수요(n1,n2) 운송수요
transBal(k,n2) 환적 잔액은 환적 노드 k를 통해 n2에 도달합니다.
matBal(n0,r) 경로 r의 초기 노드에서의 물질 균형
payloadBal(r,i,n1) 나머지 노드에 대한 페이로드 밸런스;
objFct.. OBJ =e= 합계((r,a), c(a)*h(r,a)*X(r,a))
+ 합계((r,U(n1,n2,r)), DIRECT(r,n1,n2) + S(r,n1,n2))*q
+ sum((r,U(n1,k,r),n2)$(W(n2,r) 아님), T(r,n1,k,n2))*q
+ 합계(OD(n1,n2), Y(n1,n2)*p);
minFlightReq(Udom(n1,n2)).. sum((a,U(Udom,r)), X(r,a)) =g= f(Udom);
landLim(n).. sum((a,vLand(n,r)), X(r,a)) =l= sigma(n);
순환(a,n).. sum(vFirst(n,r), X(r,a)) =e= sum(vLast(n,r), X(r,a));
timeLimLow(a).. sum(r, x(r,a)*h(r,a)) =g= hmin(a);
timeLimUp(a).. sum(r, x(r,a)*h(r,a)) =l= hmax(a);
수요(OD(n1,n2)).. 합계(U(n1,n2,r), DIRECT(r,n1,n2))
+ sum(U(n1,k,r)$(W(n2,r) 아님), T(r,n1,k,n2)) + Y(n1,n2) =g= b(n1,n2);
transBal(n1,k).. sum((r,U(n0,n1,r))$(W(k,r) 아님), T(r,n0,n1,k)) =e= sum(U(n1,k,r), S(r,n1,k));
matBal(vFirst(n0,r)).. sum(U(n0,n1,r), DIRECT(r,n0,n1) + S(r,n0,n1))
+ sum((U(n0,n1,r),k)$(W(k,r) 아님), T(r,n0,n1,k)) =e= sum(a, d(a)*X(r,a)) - Z(r,'i1');
payloadBal(route(r,i,n1))$(1<ord(i) 및 ord(i)<card(i))..
합계(U(n1,n2,r), DIRECT(r,n1,n2) + S(r,n1,n2))
+ sum((U(n1,n2,r),k)$(W(k,r) 아님), T(r,n1,n2,k))
- 합계(U(n0,n1,r), DIRECT(r,n0,n1) + S(r,n0,n1))
- sum((U(n0,n1,r),k)$(W(k,r) 아님), T(r,n0,n1,k)) =e= Z(r,i-1) - Z(r,i);
모델 화물 /all/;
OBJ를 최소화하는 mip를 사용하여 화물을 해결합니다.
파일 emp / '%emp.info%' /; put emp '* 문제 %슬롯 무료체험i%'/;
$인스턴스를 설정하지 않은 경우 $set 인스턴스 16
$goTo i%instance%
$라벨 i16
$onPut
randvar b('A','B') 이산 0.5 4.5 0.5 5.5
randvar b('A','C') 이산 0.25 6.8 0.25 7.6 0.25 8.4 0.25 9.2
randvar b('A','E') 이산 0.5 3.6 0.5 4.4
$offPut
$go계속하려면
$라벨 i512
$onPut
randvar b('A','B') 이산 0.5 4.5 0.5 5.5
randvar b('A','C') 이산 0.25 6.8 0.25 7.6 0.25 8.4 0.25 9.2
randvar b('A','E') 이산 0.5 3.6 0.5 4.4
randvar b('B','A') 이산 0.5 4.05 0.5 4.95
randvar b('B','C') 이산 0.25 5.695 0.25 6.365 0.25 7.035 0.25 7.705
randvar b('B','E') 이산 0.5 3.78 0.5 4.62
randvar b('C','A') 이산 0.5 9.09 0.5 11.11
$offPut
$go계속하려면
$라벨 i32768
$onPut
randvar b('B','A') 이산 0.5 4.05 0.5 4.95
randvar b('B','C') 이산 0.25 5.695 0.25 6.365 0.25 7.035 0.25 7.705
randvar b('B','E') 이산 0.5 3.78 0.5 4.62
randvar b('C','A') 이산 0.5 9.09 0.5 11.11
randvar b('C','B') 이산 0.5 7.47 0.5 9.13
randvar b('C','E') 이산 0.5 10.98 0.5 13.42
randvar b('E','A') 이산 0.5 2.88 0.5 3.52
randvar b('E','B') 이산 0.5 4.77 0.5 5.83
randvar b('E','C') 이산 0.25 6.12 0.25 6.84 0.25 7.56 0.25 8.28
$offPut
$label 계속
putclose emp '2단계 b Y T S Z DIRECT 페이로드발 matbal transBal 요구';
장면 시나리오 설정 / sc1*sc%instance% /;
매개변수
sc_b(scen,n1,n2) 시나리오별 수요
sc_OBJ(scen) 시나리오별 경로 r에 있는 a 유형의 항공기 수
SC_Y(scen,n1,n2) 시나리오에 따라 n1과 n2 사이의 미배송 화물;
dict/scen .scenario를 설정합니다. ''
b .randvar . sc_b
OBJ .레벨 . sc_OBJ
Y .레벨 . sc_Y /;
옵션 optcr=0.1;
화물 최소 OBJ를 해결하려면 emp 시나리오 dict를 사용하세요.
sc_b, sc_OBJ, sc_Y를 표시합니다.