scensol3.gms : NoMatchLimit GUSS 테스트

설명

기고자: Michael Bussieck

소형 모델 유형 :슬롯 머신


카테고리 : 슬롯 머신 테스트 라이브러리


메인 파일 : scensol3.gms

$title NoMatchLimit GUSS 테스트(SCENSOL3,SEQ=535)

$onText
기여자: Michael Bussieck
$offText

세트
     ii 슈퍼 세트 i / 시애틀, 샌디에이고, 피닉스 /
     i(ii) 통조림 공장 / 시애틀, 샌디에고 /
     j 마켓 / 뉴욕, 시카고, 토피카 / ;

매개변수

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

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

표 d(ii,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) ;

방정식 e 더미 n 행;  즉.. sum((i,j), x(i,j)) =n= 3;

모델 전송 /all/ ;

* DICT 세트는 3차원으로 구성됩니다.
* 1 모델 기호
* 2 액션 유형
* 3 업데이트 매개변수
* DICT는 데이터 문으로 지정되어야 합니다.

dict / s.scenario 를 설정하세요. ''
             오.   .srep 선택
             디.   매개변수 .ds
             가.   매개변수 .as
             x.   상위 .xup
             에프.   매개변수 .fs
             비용.한계.x비용
             x.   레벨 .xx /

* 문제:
* 1 QCP는 작동하지 않으며 MCP, MPECS도 작동하지 않습니다.

sX /s1*s10/ 설정;
$어두움을 설정하지 않은 경우 $set 희미함 1
$ifE (%dim%>3)or(%dim%<1) $abort 희미함은 1~3이어야 합니다.

$if %dim%==1 $set s "sX" 세트 sx #SX
$if %dim%==2 $set s "sX,sX" 세트 sx #SX:#SX
$if %dim%==3 $set s "sX,sX,sX" 세트 sx #SX:#SX:#SX

s(%s%) /%sx%/ 설정;

매개변수
    d용 ds(%s%,ii,j) 업데이트 프로그램
    에 대한(%s%,i) 업데이트 프로그램으로
    x.up용 xup(%s%,i,j) 업데이트 프로그램
    f에 대한 fs(%s%) 업데이트 프로그램
    한계 비용에 대한 xcost(%s%) 수집기
    xx(%s%,i,j) x 레벨에 대한 수집기

$eolCom //
ma GUSS 모델 속성 설정 / system.GUSSModelAttributes /;
매개변수
    o(*) GUSS 옵션
       / OptfileInit 0 // 초기 해석을 위한 해석기 옵션 읽기
         Optfile 0 // 연속적인 해결을 위한 솔버 옵션 읽기
         LogOption 1 // 0 - 보통 로그(기본값)
                          // 1 - 최소 로그
                          // 2 - 상세 로그\
         SkipBaseCase 0 // 기본 사례를 해결하기 위한 스위치
         UpdateType 0 // 시나리오 업데이트 메커니즘:
                          // 0 - 모든 것을 0으로 설정하고 변경 사항을 적용합니다.
                          // 1 - 기본 사례를 재설정하고 변경 사항을 적용합니다.
                          // 2 - 마지막 시나리오를 기반으로 빌드하고 변경 사항을 적용합니다.
       /
    srep(%s%,ma) 솔루션 속성 / #s.(ModelStat na, SolveStat na, ObjVal na) /;

* ii='phoenix'로 레코드에 들어갑니다.
ds(s,ii,j) = max(0,uniform(-5,2)) + eps;
as(s,i) = a(i)*(1+normal(0.05,0.1));
xup(s,i,j) = 균일(120,300);
fs(s) = 균일(80,100);

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

* 라이센스 오류(글로벌 솔버)가 발생하면 그냥 종료하세요.
if(transport.modelstat=%modelStat.licensingProblem%,
    abort.noerror '전역 솔버에 비해 너무 큼');

abort$(transport.solvestat<>%solveStat.terminatingBySolver%) '해결 상태가 "TERMINATED BY SOLVER"일 것으로 예상됩니다.';

o('NoMatchLimit') = 6;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(transport.solvestat<>%solveStat.terminatingBySolver%) '해결 상태가 "TERMINATED BY SOLVER"일 것으로 예상됩니다.';
abort$(sum(s$(srep(s,'ModelStat')=NA),1)<>card(s)-2) '성공적인 시나리오는 두 개만 예상됩니다.';

o('NoMatchLimit') = 3*카드-1;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(transport.solvestat<>%solveStat.terminatingBySolver%) '해결 상태가 "TERMINATED BY SOLVER"일 것으로 예상됩니다.';
abort$(sum(s$(srep(s,'ModelStat')=NA),1)<>1) '실패한 시나리오는 하나만 예상됩니다.';

o('NoMatchLimit') = 3*카드;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(transport.solvestat<>%solveStat.normalCompletion%) '해결 상태 "정상 완료"가 예상됩니다.';
abort$(sum(s$(srep(s,'ModelStat')=NA),1)<>0) '실패한 시나리오는 없을 것으로 예상됩니다.';