gussskip.gms : 건너뛴 시나리오가 포함된 간단한 GUSS 예시

설명

기고자: Michael R. Bussieck, 2014년 4월

소형 모델 유형 :슬롯 무료체험


카테고리 : 슬롯 무료체험 테스트 라이브러리


메인 파일 : gussskip.gms

$title 건너뛴 시나리오가 있는 간단한 GUSS 예(GUSSSKIP,SEQ=651)
$onText
기고자: Michael R. Bussieck, 2014년 4월
$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/ ;

시나리오를 실행하려면 시나리오 설정 / s1*s10 /

별칭(ScenariosToRun, s)

매개변수
    newsupply(s,*) 업데이트 프로그램
    b에 대한 newdemand(s,*) 업데이트 프로그램
    x 레벨에 대한 resultantx(s,i,j) 수집기;

새로운 수요(s,j) = 정상(b(j),0.1);
newsupply(s,i) = Normal(a(i),0.1);

* 우리가 실행 불가능하게 되지 않도록 하세요
newdemand(s,'total') = sum(j,newdemand(s,j));
newsupply(s,'total') = sum(i,newsupply(s,i));
newsupply(s,i)$(newdemand(s,'total')>newsupply(s,'total')) =
                newsupply(s,i)*(newdemand(s,'total')+1)/newsupply(s,'total');

* 총계를 지우세요. 그렇지 않으면 GUSS에서 일치하지 않는 기록을 얻습니다.
새로운 수요(들,'총') = 0;
newsupply(s,'total') = 0;

매개변수 o(*) / SolveEmpty eps /
          sr(s,*) / #s.ModelStat na /;
GUSS 실행당 gs(s) 시나리오 설정
    dict / s.  시나리오.''
             오.  선택 .sr
             가.  매개변수 .newsupply
             b.  매개변수 .newdemand
             x.  레벨 .resultantx /;

se(들) / s1 / 설정;

sr(se,'modelstat') = na;
새로운 수요(se,j) = 0; 뉴스공급(se,i) = 0;

o('SolveEmpty') = EPS;
옵션solvopt=병합;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>na) 's1을 건너뛸 것으로 예상됩니다.', sr;

옵션solvopt=교체;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>0) 's1을 건너뛸 것으로 예상됩니다.', sr;

o('SolveEmpty') = 1;
옵션solvopt=병합;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;

****

se('s5') = 예;
sr(se,'modelstat') = na;
새로운 수요(se,j) = 0; 뉴스공급(se,i) = 0;

o('SolveEmpty') = 1;
옵션solvopt=병합;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;
abort$(sr('s5','modelstat')<>na) 's5를 건너뛸 것으로 예상됩니다.', sr;

옵션solvopt=교체;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;
abort$(sr('s5','modelstat')<>0) 's5를 건너뛸 것으로 예상됩니다.', sr;

o('SolveEmpty') = 2;
옵션solvopt=병합;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;
abort$(sr('s5','modelstat')<>1) 's5 해결 기대', sr;

****

se('s10') = 예;
sr(se,'modelstat') = na;
새로운 수요(se,j) = 0; 뉴스공급(se,i) = 0;

o('SolveEmpty') = 2;
옵션solvopt=병합;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;
abort$(sr('s5','modelstat')<>1) 's5 해결 기대', sr;
abort$(sr('s10','modelstat')<>na) 's10을 건너뛸 것으로 예상됩니다.', sr;

옵션solvopt=교체;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;
abort$(sr('s5','modelstat')<>1) 's5 해결 기대', sr;
abort$(sr('s10','modelstat')<>0) 's10을 건너뛸 것으로 예상됩니다.', sr;

o('SolveEmpty') = 3;
옵션solvopt=병합;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(sr('s1','modelstat')<>1) 's1 해결 기대', sr;
abort$(sr('s5','modelstat')<>1) 's5 해결 기대', sr;
abort$(sr('s10','modelstat')<>1) 's10 해결 기대', sr;