scensol7.gms : GUSS 옵션 테스트 ReportLastScen

설명

GUSS 실행 시 슬롯 커뮤니티에 무엇을 보고할지 선택할 수 있습니다.
1) 없음(skipBaseCase=1, reportLastScen=0),
2) 기본 사례(skipBaseCase=0, reportLastScen=0),
3) 해결된 마지막 시나리오(reportLastScen=1)
이 모델은 다양한 대안을 테스트합니다.

기고자: Michael Bussieck, 2017년 9월

소형 모델 유형 :슬롯 커뮤니티


카테고리 : 슬롯 커뮤니티 테스트 라이브러리


메인 파일 : scensol7.gms

$title 테스트 GUSS 옵션 ReportLastScen (SCNESOL7,SEQ=737)
$onText
GUSS 실행 시 슬롯 커뮤니티에 무엇을 보고할지 선택할 수 있습니다.
1) 없음(skipBaseCase=1, reportLastScen=0),
2) 기본 사례(skipBaseCase=0, reportLastScen=0),
3) 해결된 마지막 시나리오(reportLastScen=1)
이 모델은 다양한 대안을 테스트합니다.

기고자: Michael Bussieck, 2017년 9월
$offText

세트
     i 통조림 공장 / 시애틀, 샌디에이고 /
     j 마켓 / 뉴욕, 시카고, 토피카 / ;

매개변수

     a(i) 경우에 따라 공장 i의 생산 능력
       /시애틀 350
            샌디에이고 600 /

     b(j) 다음과 같은 경우 시장 j의 수요
       / 뉴욕 325
            시카고 300
            토피카 275 / ;

테이블 d(i,j) 거리(천 마일)
                  뉴욕 시카고 토피카
    시애틀 2.5 1.7 1.8
    샌디에고 2.5 1.4 ;

스칼라 f 운임(1,000마일당 케이스당 달러) /90/ ;

매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;

         c(i,j) = f * d(i,j) / 1000 ;

변수
     x(i,j) 케이스의 배송 수량
     z 총 운송 비용(단위: 수천 달러);

양수 변수 x ;

방정식
     비용 정의 목적 함수
     공급(i) 공장 i의 공급 제한을 준수합니다.
     수요(j)는 시장 j의 수요를 충족시킵니다.

비용 .. z =e= sum((i,j), f * d(i,j) / 1000 *x(i,j)) ;

공급(i) .. sum(j, x(i,j)) =l= a(i) ;

수요(j) .. sum(i, x(i,j)) =g= b(j) ;

모델 전송 /all/ ;

세트
     ScenariosToRun 시나리오 / 기본, run1, run2 /

테이블 newsupply(ScenariosToRun,i) 업데이트 프로그램
             시애틀 샌디에고
       베이스 350 600
       실행1 300 650
       실행2 400 550 ;

b에 대한 테이블 newdemand(ScenariosToRun,j) 업데이트 프로그램
            뉴욕 시카고 토피카
       베이스 325 300 275
       실행1 325 300 275
       실행2 350 300 250 ;

mattrib / system.GUSSModelAttributes / 설정;
매개변수
    x 수준에 대한 resultantx(ScenariosToRun,i,j) 수집기
    srep(ScenariosToRun, mattrib) modelstat 등과 같은 모델 속성
    o(*) GUSS 옵션 / SkipBaseCase 1 /

dict / ScenariosToRun.scenario를 설정하세요.''
             오.             .srep 선택
             가.             매개변수 .newsupply
             b.             매개변수 .newdemand
             x.             레벨 .resultantx /

z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.

오류 설정(scenariostorun) 빈 솔루션;
오류(시나리오스토룬) = sum((i,j),resultantx(시나리오스토룬,i,j)) = 0;
Abort$card(error) '일부 시나리오에 대한 솔루션이 누락되었습니다', 오류;

* '정상 완료' 및 '해결 방법 없음'이 표시되는지 확인하세요(skipBaseCase는 1).
중단$(transport.modelstat <> %modelStat.noSolutionReturned% 또는
       Transport.solvestat <> %solveStat.normalCompletion%)
       '잘못된 상태(14/1)', Transport.modelstat, Transport.solvestat;

* 기본 케이스 포함:
o('skipBaseCase') = 0;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.

* '정상 완료' 및 '최적'(skipBaseCase는 0)인지 확인하세요.
중단$(transport.modelstat <> %modelStat.optimal% 또는
       Transport.solvestat <> %solveStat.normalCompletion%)
       '잘못된 상태(1/1)', Transport.modelstat, Transport.solvestat;

중단$(abs(107.775-transport.objval)>1e-6)
      '잘못된 objval(107.775)', Transport.objval;

* 기본 사례를 사용하지만 마지막으로 해결된 시나리오를 보고합니다.
o('skipBaseCase') = 0;
o('reportLastScen') = 1;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.

* '정상 완료' 및 '최적'(skipBaseCase는 0)인지 확인하세요.
중단$(transport.modelstat <> %modelStat.optimal% 또는
       Transport.solvestat <> %solveStat.normalCompletion%)
       '잘못된 상태(1/1)', Transport.modelstat, Transport.solvestat;

중단$(abs(110.25-transport.objval)>1e-6)
      '잘못된 objval(110.25)', Transport.objval;

* 기본 사례는 없지만 마지막으로 해결된 시나리오를 보고합니다.
o('skipBaseCase') = 1;
o('reportLastScen') = 1;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.

* '정상 완료' 및 '최적'(skipBaseCase는 0)인지 확인하세요.
중단$(transport.modelstat <> %modelStat.optimal% 또는
       Transport.solvestat <> %solveStat.normalCompletion%)
       '잘못된 상태(1/1)', Transport.modelstat, Transport.solvestat;

중단$(abs(110.25-transport.objval)>1e-6)
      '잘못된 objval(110.25)', Transport.objval;