scenempty.gms : 빈 시나리오 GUSS 테스트

설명

24.2.3 이전 GUSS에서는 일부 업데이트 데이터가 있는 시나리오만 해결했습니다.
이제 GUSS는 최대 개수를 결정하는 SolveEmpty 매개변수를 허용합니다.
업데이트 데이터 없이 해결됩니다. "빈" 솔버의 경우 다음 사항에 따라 달라집니다.
어떤 시나리오를 해결하는지 업데이트 유형을 지정하세요.

기고자: Michael Bussieck, 2014년 3월

소형 모델 유형 :슬롯 머신


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


메인 파일 : scenempty.gms

$title 빈 시나리오 GUSS 테스트 (SCENEMPTY,SEQ=648)

$onText
24.2.3 이전에는 GUSS가 일부 업데이트 데이터가 있는 시나리오만 해결했습니다.
이제 GUSS는 최대 개수를 결정하는 SolveEmpty 매개변수를 허용합니다.
업데이트 데이터 없이 해결됩니다. "빈" 솔버의 경우 다음 사항에 따라 달라집니다.
어떤 시나리오를 해결하는지 업데이트 유형을 지정하세요.

기고자: Michael Bussieck, 2014년 3월
$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.8 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), c(i,j)*x(i,j)) ;

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

  스칼라 bmod /0.1/;
  수요(j) .. sum(i, x(i,j)) =g= (1-bmod)*b(j) ;

  모델 전송 /all/ ;

  ss / s0*s100 /, s(ss) /s4,s6*s9/ 설정;
$eval CardS 카드
  매개변수
      sbmod(ss) / s4 0, s6 0.2, s7 0, s8 -0.01, s9 0 /
      srep(ss,*) / #s.modelstat 0, #s.solvestat 0 /
      sopt0(*) / UpdateType 0, SolveEmpty %CardS% /
      sopt1(*) / UpdateType 1, SolveEmpty %CardS% /
      sopt2(*) / UpdateType 2, SolveEmpty %CardS% /
      sz(ss);

  dict0 / s .scenario를 설정하십시오. ''
               sopt0 .opt .srep
               bmod .param .sbmod
               z .레벨 .sz /
  dict1 / s .scenario를 설정하십시오. ''
               sopt1 .opt .srep
               bmod .param .sbmod
               z .레벨 .sz /
  dict2 / s .scenario를 설정하십시오. ''
               sopt2 .opt .srep
               bmod .param .sbmod
               z .레벨 .sz /

* UpdateType Zero + 시나리오 데이터
  z 시나리오 dict0을 최소화하는 lp를 사용하여 전송을 해결합니다.

  abort$(card(srep)<>card(s)*2) '잘못된 srep', srep;
  abort$(smin(s,srep(s,'solvestat'))<>1 또는
         smax(s,srep(s,'solvestat'))<>1) '잘못된 해석', srep;
  abort$(abs(153.675-sz('s4'))>1e-6) '잘못된 s4', sz;
  중단$(abs(153.675-sz('s7'))>1e-6) '잘못된 s7', sz;
  abort$(abs(153.675-sz('s9'))>1e-6) '잘못된 s9', sz;

* UpdateType BaseCase + 시나리오 데이터
  z 시나리오 dict1을 최소화하는 lp를 사용하여 전송을 해결합니다.

  abort$(card(srep)<>card(s)*2) '잘못된 srep', srep;
  abort$(smin(s,srep(s,'solvestat'))<>1 또는
         smax(s,srep(s,'solvestat'))<>1) '잘못된 해석', srep;
  중단$(abs(138.3075-sz('s4'))>1e-6) '잘못된 s4', sz;
  abort$(abs(138.3075-sz('s7'))>1e-6) '잘못된 s7', sz;
  중단$(abs(138.3075-sz('s9'))>1e-6) '잘못된 s9', sz;

* UpdateType 이전 시나리오 + 시나리오 데이터
  z 시나리오 dict2를 최소화하는 lp를 사용하여 전송을 해결합니다.

  abort$(card(srep)<>card(s)*2) '잘못된 srep', srep;
  abort$(smin(s,srep(s,'solvestat'))<>1 또는
         smax(s,srep(s,'solvestat'))<>1) '잘못된 해석', srep;
  abort$(abs(138.3075 -sz('s4'))>1e-6) '잘못된 s4', sz;
  abort$(abs(122.94 -sz('s7'))>1e-6) '잘못된 s7', sz;
  중단$(abs(155.21175-sz('s9'))>1e-6) '잘못된 s9', sz;