gtm.gms : 국제 가스 무역 모델

설명

가스 무역 모델(GTM)은 상호 관련된 가스 시장을 모델링합니다.
공급과 균형을 맞추기 위해 가격은 자유롭게 움직일 수 있습니다.
수요. 불균형은 통제를 통해 도입될 수 있습니다.
가격 및/또는 거래 수량.

소형 모델 유형 :NLP


카테고리 : 무료 슬롯 게임 모델 라이브러리


메인 파일 : gtm.gms

$title 국제 가스 무역 모델(GTM,SEQ=53)

$onText
가스 무역 모델(GTM)은 상호 관련된 가스 시장을 모델링합니다.
공급과 균형을 맞추기 위해 가격은 자유롭게 움직일 수 있습니다.
수요. 불균형은 통제를 통해 도입될 수 있습니다.
가격 및/또는 거래량.

Manne, A S 및 Beltramo, M A, GTM: 국제 가스 무역 모델,
국제 에너지 프로그램 보고서. 1984년 스탠포드 대학교.

키워드: 비선형 프로그래밍, 가스 거래, 가격 탄력성, 에너지 경제학,
          국제 무역
$offText

세트
   i '공급 지역' / 멕시코, 앨버타-BC, 대서양, 애팔래시아
                              us-gulf, mid-cont, permian-b, 로키산맥
                              태평양, 알래스카 /
   j '수요 지역' / 멕시코, 서부 캔, 온트 퀘벡, 대서양
                              new-engl, ny-nj, mid-atl, south-atl
                              중서부, 남서부, 중앙, n-중앙
                              서쪽, n-서쪽 /
   jfx(j) '수요가 고정된 지역' / 멕시코, 서부 캔, 온트 퀘벡, 대서양 /
   ij(i,j) '실행 가능한 링크';

테이블 sdat(i,*) '공급 데이터'
                 ref-p1 ref-q1 ref-p2 ref-q2 제한
* ($/mcf) (tcf) ($/mcf) (tcf) (tcf)
   멕시코 2.0 .5 2.5
   앨버타-BC 3.0 1.6 3.75
   대서양 .25 .03 .3
   애팔래시아 3.5 .58 7.0 .65 .72
   미국 만 3.5 7.88 7.0 8.82 9.75
   중간 연속 3.5 2.07 7.0 2.31 2.55
   페름기-b 3.5 1.39 7.0 1.55 1.72
   로키산맥 3.5 1.16 7.0 1.30 1.44
   태평양 3.5 .42 7.0 .47 .52
   알래스카 2.0 .80 2.0 .1 inf;

테이블 ddat(j,*) '수요 데이터'
                 ref-p ref-q elas 세금 면제
* ($/mcf) (tcf) ($/mcf) (tcf)
   멕시코 1.0 2.2 -.5
   웨스트캔 3.0 1.47 -.5
   온트-퀘벡 3.5 1.38 -.5
   대서양 3.5 .20 -.5
   new-engl 9.37 .76 -.60
   ny-nj 8.33 1.18 -.66
   중간 atl 8.26 .89 -.65
   남쪽 atl 8.07 1.62 -.89
   중서부 8.01 2.96 -.65
   남서쪽 7.29 6.04 -.84
   중앙 7.79 1.17 -.67
   n-중앙 8.06 1.51 -.54
   서쪽 8.18 2.10 -.43
   n-서쪽 9.39 .36 -.57;

매개변수
   supa(i) '공급 상수 a'
   supb(i) '공급 상수 b'
   supc(i) '공급 용량'
   dema(j) '수요 상수 a'
   demb(j) '수요 상수 b';

supc(i) = sdat(i,"한계");
supb(i) = ((sdat(i,"ref-p1") - sdat(i,"ref-p2"))
         / (1/(supc(i) - sdat(i,"ref-q1"))-1/(supc(i) - sdat(i,"ref-q2"))))
         $(supc(i) <> inf);
supa(i) = sdat(i,"ref-p1") - supb(i)/(supc(i) - sdat(i,"ref-q1"));

* 어떤 경우에는 정확히 0으로 평가되는 supa(i)에 의존합니다.
supa(i) = round(supa(i),4);
supc(i)$(supc(i) = inf) = 100;
sdat(i,"sup-a") = supa(i);
sdat(i,"sup-b") = supb(i);
디스플레이 sdat;

demb(j) = 1/ddat(j,"elas") + 1;
dema(j) = ddat(j,"ref-p")/demb(j)/ddat(j,"ref-q")**(demb(j) - 1);
ddat(j,"dem-a") = dema(j);
ddat(j,"dem-b") = demb(j);
디스플레이 ddat;

테이블 utc(i,j) '단위 운송 비용(mcf당 $)'
                멕시코 서부-수 온트-퀘벡 대서양 new-engl ny-nj mid-atl south-atl 중서부 남서부
   멕시코 .25 2.29 2.22 2.03 1.96 1.25
   앨버타-bc .40 .90 1.15 1.10 1.10 1.55 .80 1.25
   대서양 1.50
   애팔래시아 .72 .46
   미국만 2.12 1.08 1.01 .82 .75 .04
   중간 연속 .86 .14
   페름기-b .83 .77 .05
   로키산맥 0.53
   알래스카 6.0

   + 중앙 n-중앙 서쪽 n-서쪽
   멕시코 2.13
   앨버타-bc .80 .65 .70 .65
   우리 걸프 .54
   중간 연속 .64
   페름기-b .55 .94
   로키산맥 .31 .58 .70 1.91
   태평양 .43 ;

테이블 pc(i,j) '파이프라인 용량(tcf)'
                멕시코 서부-수 온트-퀘벡 대서양 new-engl ny-nj mid-atl south-atl 중서부 남서부
   멕시코 INF .067 .067 .067 .067
   앨버타-bc inf inf .30 .150 .10 inf
   대서양 inf inf
   애팔래시아 .34 .35
   us-gulf inf 1.390 1.060 2.0 2.62 3.73
   중간 연속 .62 2.30
   페름기-b .12 1.45
   로키산맥 0.48
   알래스카 0.80

   + 중앙 n-중앙 서쪽 n-서쪽
   멕시코 .033
   앨버타-BC inf inf inf inf
   중간 연속 1.03
   페름기-b 1.46
   로키산맥 .14 inf .10 inf
   태평양 .48 ;

세트
   check1(i,j) '비용이 0이고 용량이 0이 아닌 공급 링크'
   check2(i,j) '비용은 0이 아니지만 용량은 0인 공급 링크';

check1(i,j) = yes$(utc(i,j) = 0 및 pc(i,j) <> 0);
check2(i,j) = yes$(utc(i,j) <> 0 및 pc(i,j) = 0);
ij(i,j) = 예$pc(i,j);
check1, check2를 표시합니다.

변수
   x(i,j) '천연가스 선적(tcf)'
   s(i) '지역 공급(tcf)'
   d(j) '지역 수요(tcf)'
   '소비자 혜택 - 비용' 혜택;

양수 변수 x, s, d;

방정식
   sb(i) '공급수지(tcf)'
   db(j) '수요잔고(tcf)'
   bdef '혜택 정의';

sb(i).. sum(j$ij(i,j), x(i,j)) =l= s(i);

db(j).. sum(i$ij(i,j), x(i,j)) =g= d(j);

bdef.. 혜택 =e= sum(j, dema(j)*d(j)**demb(j))
                   - sum(i, supa(i)*s(i) - supb(i)*log((supc(i) - s(i))/supc(i)))
                   - sum((i,j)$ij(i,j), utc(i,j)*x(i,j));

x.up(i,j) = pc(i,j);
d.lo(j) = .2;
d.fx(jfx) = ddat(jfx,"ref-q");
s.up(i) = 0.99*supc(i);

모델 gtm '가스 수송 모델' / 모두 /;

nlp를 사용하여 gtm의 이점을 극대화하는 문제를 해결합니다.

매개변수
   report1(i,*) '공급 요약 보고서'
   report2(j,*) '수요 요약 보고서';

Report1(i,"공급") = s.l(i);
Report1(i,"용량") = s.up(i);
report1(i,"가격") = sb.m(i);
Report2(j,"수요") = d.l(j);
Report2(j,"가격") = -db.m(j);

보고서1, 보고서2, xl을 표시합니다.