설명
다음 형식의 2단계 확률론적 선형 프로그램을 해결합니다. min c'x + E[Q(x,s)] s.t. Ax = b, x >= 0, 여기서 Q(x,s) = 최소 q(s)'y(s) st. Wy(s) >= h(s) - T(s)x, y >= 0; 데이터는 취리히 대학의 Janos Mayer 박사가 제공한 것으로, 논문에 기록되어 있습니다: A 2단계 확률론적 프로그래밍에 대한 시뮬레이션 기반 접근 방식 알렉산더 샤피로(Alexander Sharpiro)와 티토 홈드멜로(Tito Homem-de-Mello), 1998년. 주어진 데이터에서 h는 평균 h_avg와 표준편차를 갖는 정규 벡터입니다. h_stddev. 모델은 LINDO 솔버에 의해 해결됩니다. 명령줄 매개변수 NSCEN은 다음과 같습니다. 솔버에서 생성할 샘플 수를 설정하는 데 사용됩니다. 기고자: Yanchao Liu, 2012년 1월. Lindo로만 해결 가능
소형 모델 유형 :SP
카테고리 : 슬롯 머신 EMP 라이브러리
메인 파일 : gen2s.gms
$title 일반 형식의 2단계 확률론적 프로그램(GEN2S,SEQ=91)
$onText
다음 형식의 2단계 확률적 선형 프로그램을 해결합니다.
min c'x + E[Q(x,s)] s.t. Ax = b, x >= 0, 여기서
Q(x,s) = 최소 q(s)'y(s) st. Wy(s) >= h(s) - T(s)x, y >= 0;
데이터는 취리히 대학의 Janos Mayer 박사가 제공한 것으로, 논문에 기록되어 있습니다: A
2단계 확률론적 프로그래밍에 대한 시뮬레이션 기반 접근 방식
알렉산더 샤피로(Alexander Sharpiro)와 티토 홈드멜로(Tito Homem-de-Mello), 1998년.
주어진 데이터에서 h는 평균 h_avg와 표준편차를 갖는 정규 벡터입니다.
h_stddev.
모델은 LINDO 솔버에 의해 해결됩니다. 명령줄 매개변수 NSCEN은 다음과 같습니다.
솔버에서 생성할 샘플 수를 설정하는 데 사용됩니다.
기고자: Yanchao Liu, 2012년 1월.
$offText
* 린도로만 해결 가능
$ifI가 %슬롯 머신emp%==lindo $exit가 아닌 경우
$설정되지 않은 경우 NSCEN $set NSCEN 100
첫 번째 단계의 행 N1R 인덱스 설정 / i1 * i5 /
N1C 첫 번째 단계의 열 인덱스 / j1 * j10 /
N2R 두 번째 단계의 행 인덱스 / ii1*ii10 /
N2C 두 번째 단계의 열 인덱스 / jj1*jj15 /;
테이블 FirstStageData(*,*)
j1 j2 j3 j4 j5 j6 j7 j8 j9 j10 b
c 0.73 -2.16 -0.31 9.00 -5.33 4.30 5.80 6.17 -0.09 2.65
i1 0 -4.19 0 0 0 4.12 0 0 -3.53 0 -1.24
i2 -0.34 -1.88 0 0 0 0 -1.32 0 0 -4.54 -2.79
i3 0 3.04 8.34 3.41 -7.90 0 0 6.45 0 9.80 -8.00
i4 0 0 -9.97 0 0 0 5.26 0 0 -0.89 -1.94
i5 0 -0.92 0 6.57 0 0 2.05 0 2.17 -2.31 2.61;
매개변수
A(N1R,N1C), c(N1C), b(N1R);
A(N1R,N1C) = FirstStageData(N1R,N1C);
c(N1C) = FirstStageData('c',N1C);
b(N1R) = FirstStageData(N1R,'b');
테이블 SecondStageData(*,*)
jj1 jj2 jj3 jj4 jj5 jj6 jj7 jj8 jj9 jj10 jj11 jj12 jj13 jj14 jj15 h_avg h_stddev
q 0 0 4.80 5.99 9.46 7.01 0 6.46 2.88 0 0 4.95 0 0 1.29
ii1 0 0 0 0 0 -2.3 0 0 0.18 -6.37 8.49 0 -18.45 0 0 -3.88 0.15
ii2 0 0 0 4.36 0 0 5.31 0 0 0 8.96 0 0 0 0 1.12 0.01
ii3 0 9.17 0 0 0 0 0 0 0 0 3.45 -6.02 0 0 -6.6 -4.63 0.21
ii4 -0.07 5.48 0 0 -1.6 5.38 0 -2.74 -5.49 -3.05 0 0.29 0 1.8 0 5.04 0.25
ii5 0 0 0 0 0 2.96 2.15 0 -7.52 0 2.41 0 0 0 0 2.05 0.04
ii6 0 0 7.93 9.69 0 0 1.65 0 -8.92 0 -10.36 0 0 0 0 5.19 0.27
ii7 0 0 -7.41 0 0 0 0 0 0 0 0 7.41 0 0 0 -5.53 0.31
ii8 0 -7.35 0 5.35 0 0 0 0 0 0 2.69 -0.69 0 0 0 3.80 0.14
ii9 0 0 0 0 0 0 -5.73 -2.58 0 0 0 5.27 3.05 0 0 1.81 0.03
ii10 0 0 0 0 7.43 3.74 2.09 0 8.96 -5.88 0 0 -16.36 0 0 -9.29 0.86;
매개변수
q(N2C), W(N2R,N2C), h_avg(N2R), h_stddev(N2R), h(N2R);
W(N2R,N2C) = SecondStageData(N2R,N2C);
q(N2C) = SecondStageData('q',N2C);
h_avg(N2R) = SecondStageData(N2R,'h_avg');
h_stddev(N2R) = SecondStageData(N2R,'h_stddev');
h(N2R) = h_avg(N2R);
테이블 T(N2R,N1C)
j1 j2 j3 j4 j5 j6 j7 j8 j9 j10
ii1 -8.42 0 0 0 0 0 6.91 0 -2.07 0
ii2 -5.23 0 0 0 0 0 0 0 0 0
ii3 -2.14 0 0 0 1.16 0 0 0 0 0
ii4 1.19 0 0 0 0 0 0 -6.05 0 -4.82
ii5 0 0 5.48 0 0 0 0 -4.75 0 0
ii6 2.38 0 2.90 0 0 -0.88 0 0 0 0
ii7 0 0 0 0 0 0 0 1.04 0 0
ii8 2.61 0 0 -0.91 0 0 0 0 -4.93 0
ii9 -5.79 0 0 0 0 0 0 0 9.60 0
ii10 -2.64 0 0 0 0 0 0 0 0 0;
양의 변수 x(N1C), y(N2C);
변수 z1, z2;
방정식
o1 1단계 목표
c1(N1R) 첫 번째 단계 제약
o2 2단계 대물렌즈
c2(N2R) 두 번째 단계 제약;
o1.. z1 =e= 합(N1C, c(N1C)*x(N1C)) + z2;
c1(N1R).. sum(N1C, A(N1R,N1C)*x(N1C)) =e= b(N1R);
o2..z2 =e= sum(N2C,q(N2C)*y(N2C));
c2(N2R).. 합계(N2C,W(N2R,N2C)*y(N2C)) =g= h(N2R) - 합계(N1C, T(N2R,N1C)*x(N1C));
모델 2세대 /all/;
*lp를 사용하여 gen2 min z1을 해결합니다.
파일 emp / '%emp.info%' /;
emp '2단계 z2 y h o2 c2'를 입력합니다.
loop(N2R, put / 'randvar ' h.tn(N2R) ' Normal ' h_avg(N2R) ' ' h_stddev(N2R));
닫다;
s 시나리오 설정 / s1*s%NSCEN% /
매개변수
s_h(s,N2R) 확률변수 구현
시나리오별 s_y(s,N2C) y 수준
s_z2(s) 시나리오별 z2;
dict / s를 설정하십시오. 시나리오.''
h. 랜드바르. 수줍은. 수준. s_y
z2. 수준. s_z2 /;
$ifI가 %슬롯 머신emp%==lindo $goTo contsolve가 아님
$echo STOC_NSAMPLE_STAGE=%NSCEN% > lindo.opt
gen2.optfile = 1;
$label 해결
emp 시나리오 dict를 사용하여 gen2 min z1을 해결합니다.
s_h, s_y, s_z2, x.l을 표시합니다.