설명
장거리 산림 계획가의 임무는 숲의 어느 부분을 결정하는 것입니다. 언제 수확될 것인가. 그러한 결정을 내리는 중요한 기준은 나이입니다. 남아있는 나무가 파괴될 가능성 불. Gassmann은 동일한 길이의 K 연령 분류 세트를 만듭니다(예: 20년) 숲의 각 부분을 클래스 중 하나에 배치합니다. 안에 있는 나무의 나이에 따라. 그는 또한 미래 계획을 나눕니다. 지평선은 T 라운드로 나누어지며, 각 라운드의 시간 길이는 각 연령의 시간 길이와 동일합니다. 분류. 즉, 한 번에 파괴되지 않은 모든 나무는 또는 수확하면 다음 연령층으로 이동합니다.
대형 모델 유형 :SP
카테고리 : 무료 슬롯 EMP 라이브러리
메인 파일 : stocfor3.gms
$title 장거리 산림 계획(STOCFOR3,SEQ=87)
$onText
장거리 산림 계획가의 임무는 숲의 어느 부분을 결정하는 것입니다.
언제 수확될 것인가. 그러한 결정을 내리는 중요한 기준은 나이입니다.
남아있는 나무가 파괴될 가능성
불.
Gassmann은 동일한 길이의 K 연령 분류 세트를 만듭니다(예:
20년) 숲의 각 부분을 클래스 중 하나에 배치합니다.
안에 있는 나무의 나이에 따라. 그는 또한 미래 계획을 나눕니다.
지평선은 T 라운드로 나누어지며, 각 라운드의 시간 길이는 각 연령의 시간 길이와 동일합니다.
분류. 즉, 한 번에 파괴되지 않은 모든 나무는
또는 수확하면 다음 연령층으로 이동합니다.
Gassmann, H I, 불확실성이 존재하는 숲의 최적 수확.
캐나다 산림 연구 저널, 19, 1267-1274, 1989
Ariyawansa, KA 및 Felt, AJ, 새로운 확률론적 컬렉션에 대해
선형 프로그래밍 테스트 문제, INFORMS Journal on Computing 16(3),
291-299, 2004
$offText
t 시간 간격 설정 / t1*t7 /
k 연령층 / c1*c8 /
kn(k) 수확되지 않은 연령층 / c1,c2 /
별칭(k,kk)
매개변수
d(t) 할인율
마지막 기간 이후 최종 할인율
f(t) 화재 확률 / #t 0.06258 /
a /0.9/, b 기간 간 변경 한도 / 1.1 /
p 수율 변경 한도 위반에 대한 페널티 / 50 /
si(k) 첫 번째 기간의 산림면적
/c1 0.241, c2 0.125, c3 1.404, c4 2.004
c5 9.768, c6 16.385, c7 2.815, c8 61.995 /
y(k) 수율 / c1 0, c2 0, c3 16, c4 107
c5 217, c6 275, c7 298, c8 306 /
v(k) 값 / c1 320.342, c2 356.187, c3 398.437, c4 448.235
c5 506.929, c6 564.929, c7 587.929, c8 595.929 /;
* 20년 및 0.005 인플레이션
d(t) = (1-0.004975124)**(20*(ord(t)-1));
dlast = (1-0.004975124)**(20*카드(t));
변수
목표물
x(t,k) 수확된 숲
s(t,k) 숲의 면적
rf(t,k) 남은 숲
z(t) 수율
slack(t) defchglo 위반에 대한 slack
양수 변수 x, s, rf, slack;
방정식
defobj 목표
defbnd(t,k)는 지역별로 수확을 제한합니다.
defbal(t,k) 물질수지
defyield(t) 수율
defchglo(t) 수율 제한 변경
defchgup(t) 수율 제한 변경;
defobj.. obj =e= sum(t, d(t)*(z(t) - p*slack(t))) + dlast*sum(k, v(k)*rf('t7',k));
defbnd(t,k)..rf(t,k) =e= s(t,k) - x(t,k);
defbal(t-1,k).. s(t,k) =e= (1-f(t))*(rf(t-1,k-1) + rf(t-1,k)$sameas('c8',k))
+ sum(kk, x(t-1,kk) + f(t)*rf(t-1,kk))$sameas(k,'c1');
defyield(t).. z(t) =e= sum(k, y(k)*x(t,k));
defchglo(t-1).. a*z(t-1) =l= z(t) + slack(t-1);
defchgup(t-1).. b*z(t-1) =g= z(t);
모델 숲 /all/;
s.fx('t1',k) = si(k);
x.fx(t,kn) = 0;
파일 emp / '%emp.info%' /; put emp '* 문제 %무료 슬롯i%' /;
$onPut
randvar f('t2') 이산 .1736 .00000 .0299 .20268 .5128 .06258 .2837 .08612
randvar f('t3') 이산 .1736 .00000 .0299 .20268 .5128 .06258 .2837 .08612
randvar f('t4') 이산 .1736 .00000 .0299 .20268 .5128 .06258 .2837 .08612
randvar f('t5') 이산 .6912 .00000 .3088 .20268
randvar f('t6') 이산 .6912 .00000 .3088 .20268
randvar f('t7') 이산 .6912 .00000 .3088 .20268
$offPut
루프(t$(ord(t)>1),
/ '단계' 넣기 ord(t):2:0 z(t) slack(t-1) defyield(t) defchglo(t-1) defchgup(t-1);
루프(k, x(t,k) s(t,k) rf(t,k) defbnd(t,k) defbal(t-1,k)));
emp.pc=0; loop(t$(ord(t)>1), put / 'stage ' ord(t):2:0 ' f(' t.tl:0 ')');
닫다;
장면 시나리오 설정 / s1*s512 /;
매개변수
s_f(scen,t) 시나리오별 화재 확률;
dict/scen .scenario를 설정하세요.''
f.randvar. s_f /;
emp 시나리오 dict를 사용하여 포리스트 최대 obj를 해결합니다.