설명
기고자: Michael Bussieck
소형 모델 유형 :슬롯 무료체험
카테고리 : 슬롯 무료체험 테스트 라이브러리
메인 파일 : scensol1.gms
$title 기본 GUSS 테스트(SCENSOL1,SEQ=407)
$onText
기여자: Michael Bussieck
$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) ;
방정식 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%,i,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 0 // 0 - 보통 로그(기본값)
// 1 - 최소 로그
// 2 - 상세 로그
NoHotStart 0 // 솔버에서 핫 스타트 기능을 비활성화합니다.
// 핫스타트 지원
NoMatchLimit 0 // 일치하지 않는 시나리오 레코드의 제한(기본값 0)
RestartType 0 // 시나리오의 재시작 지점을 결정합니다.
// 0 - 마지막 솔루션에서 다시 시작(기본값)
// 1 - 기본 사례의 솔루션에서 다시 시작
// 2 - 입력 지점에서 다시 시작
SkipBaseCase 0 // 기본 사례를 해결하기 위한 스위치
SolveEmpty 0 // 해결된 빈 시나리오의 한계,
// 이후 시나리오는 건너뜁니다(기본값 0).
UpdateType 0 // 시나리오 업데이트 메커니즘:
// 0 - 모든 것을 0으로 설정하고 변경 사항을 적용합니다(기본값)
// 1 - 기본 사례를 재설정하고 변경 사항을 적용합니다.
// 2 - 마지막 시나리오를 기반으로 빌드하고 변경 사항을 적용합니다.
/
srep(%s%,ma) 솔루션 속성 / #s.(ModelStat na, SolveStat na, ObjVal na) /;
ds(s,i,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);
$if 설정: $goTo %goto%
* 거스 실행
$라벨 scensl1
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
* 라이센스 오류(글로벌 솔버)가 발생하면 그냥 종료하세요.
if(transport.modelstat=%modelStat.licensingProblem%,
abort.noerror '전역 솔버에 비해 너무 큼');
xx, xcost를 표시합니다.
$if 설정 시 $exit로 이동
매개변수 repsl1(%s%,ma); repsl1(s,ma)$srep(s,ma) = srep(s,ma);
repsl1(s,'objval')$(repsl1(s,'modelstat')<>1) = 0;
* 계산된 obj가 objval과 일치하는지 확인합니다.
매개변수 xdiff(%s%);
xdiff(s)$repsl1(s,'objval') = round(repsl1(s,'objval') - sum((i,j), fs(s) * ds(s,i,j) / 1000 *xx(s,i,j)),4);
중단$카드(xdiff) xdiff, repsl1, fs, ds, xx;
* 이제solvelink %solveLink.loadLibrary%를 사용하여 GUSS를 실행합니다.
$라벨 scenl5
옵션solvelink=%solveLink.loadLibrary%;
z 시나리오 dict를 최소화하는 lp를 사용하여 전송을 해결합니다.
$if 설정 시 $exit로 이동
매개변수 repsl5(%s%,ma); repsl5(s,ma)$srep(s,ma) = srep(s,ma);
repsl5(s,'objval')$(repsl5(s,'modelstat')<>1) = 0;
* 계산된 obj가 objval과 일치하는지 확인합니다.
xdiff(s)$repsl5(s,'objval') = round(repsl5(s,'objval') - sum((i,j), fs(s) * ds(s,i,j) / 1000 *xx(s,i,j)),4);
중단$카드(xdiff) xdiff, repsl5, fs, ds, xx;
* 전통적인 방식으로 이것을 실행하십시오:
$label 게임
옵션 limrow=0, limcol=0, solprint=silent;
매개변수 리피터;
루프(들,
d(i,j) = ds(s,i,j);
a(i) = as(s,i);
x.up(i,j) = xup(s,i,j);
f = fs(들);
z를 최소화하는 lp를 사용하여 전송을 해결합니다.
repiter(s,'modelstat') = Transport.modelstat;
repiter(s,'solvestat') = Transport.solvestat;
if(transport.modelstat = %modelStat.optimal%,
repiter(s,'objval') = Transport.objval));
$if 설정 시 $exit로 이동
매개변수 대표; 별칭(*,u);
ma1(ma) / modelstat,solvstat, objval / 설정;
repdiff(s,ma1) = round(repiter(s,ma1) - repsl1(s,ma1),5);
abort$card(repdiff) 'iter와 sl1이 다름', repdiff, repiter, repsl1;
repdiff(s,ma1) = round(repiter(s,ma1) - repsl5(s,ma1),5);
abort$card(repdiff) 'iter와 sl5가 다름', repdiff, repiter, repsl5;