설명
기고자: 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) '실패한 시나리오는 없을 것으로 예상됩니다.';