설명
이 모델은 MCP에서 변수 수정의 다양한 조합을 테스트합니다. GUSS 시나리오 실행을 포함합니다. 원래 모델(기본 사례이기도 함)에는 더 많은 변수가 있습니다. 방정식보다 MCP 솔버에 직접 제공되면 오류가 발생합니다. 발생합니다. 일부 변수를 수정(및 수정 해제)하면 해당 변수가 적절하게 됩니다. 시나리오의 MCP. 기고자: Michael Bussieck, 2022년 12월
소형 모델 유형 :슬롯
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : scensol10.gms
$title 'MCP GUSS 테스트' (SCENSOL10,SEQ=920)
$onText
이 모델은 MCP에서 변수를 고정하는 다양한 조합을 테스트합니다.
GUSS 시나리오 실행을 포함합니다.
원래 모델(기본 사례이기도 함)에는 더 많은 변수가 있습니다.
방정식보다 MCP 솔버에 직접 제공되면 오류가 발생합니다.
발생합니다. 일부 변수를 수정(및 수정 해제)하면 해당 변수가 적절하게 됩니다.
시나리오의 MCP.
기고자: Michael Bussieck, 2022년 12월
$offText
스칼라
x0 / 0 /
y0 / 0 /;
변수 x, y, xd, yd;
방정식 f, fx, fy;
f..exp(x + y) =E= exp(2);
fx.. x =E= x0 + xd;
fy..y =E= y0 + yd;
모델 m / f, fx.x, fy.y /;
maxExecError = 1;
mcp를 사용하여 m을 해결합니다.
exec오류 = 0;
abort$(m.solveStat<>%solveStat.solveProcessingSkipped%) '기본 사례 MCP가 실패할 것으로 예상됩니다.';
* 첫 번째 시나리오
xd.fx = 0;
mcp를 사용하여 m을 해결합니다.
abort$(m.modelStat<>1 또는 m.solveStat<>1 또는 abs(x.l-0)>1e-6 또는 abs(y.l-2)>1e-6) 'xd.fx 실패';
* 두 번째 시나리오
xd.lo = -inf; xd.up = inf;
yd.fx = 0;
mcp를 사용하여 m을 해결합니다.
abort$(m.modelStat<>1 또는 m.solveStat<>1 또는 abs(x.l-2)>1e-6 또는 abs(y.l-0)>1e-6) 'yd.fx 실패';
yd.lo = -inf; yd.up = inf;
$macro check(case) loop(s, abort$(srep(s,'modelStat')<>1 또는 srep(s,'solveStat')<>1 또는 \
abs(xval('s1')-0)>1e-6 또는 abs(xval('s2')-2)>1e-6 또는 \
abs(yval('s1')-2)>1e-6 또는 abs(yval('s2')-0)>1e-6) 케이스,srep,xval,yval)
세트
s '시나리오' / s1*s2 /
mattrib / system.GUSSModelAttributes /;
매개변수
xVal(들), yVal(들)
xFx(들) / s1 EPS /
yFx(들) / s2 EPS /
srep(s, mattrib) 'modelstat 등과 같은 모델 속성'
o(*) 'GUSS 옵션' / SkipBaseCase 1, updateType 1 /;
dictFX / s.scenario를 설정하세요.''
o.opt.srep
xd.fixed.xFx
yd.fixed.yFx
x.레벨.xVal
y.level.yVal /;
mcp 시나리오 dictFX를 사용하여 m을 해결합니다.
check('fx');
* 이제 한계가 있습니다
* 베이스케이스
매개변수
xdLo(들) / s1 EPS /
xdUp(들) / s1 EPS /
ydLo(들) / s2 EPS /
ydUp(s) / s2 EPS /;
dictLOUP / s.scenario를 설정하세요.''
o.opt.srep
xd.lower.xdLo
xd.upper.xdUp
yd.lower.ydLo
yd.upper.ydUp
x.레벨.xVal
y.level.yVal /;
mcp 시나리오 dictLOUP을 사용하여 m을 해결합니다.
check('baseCase');
* 축적
xdLo('s2') = -INF; xdUp('s2') = INF;
o('updateType') = 2;
mcp 시나리오 dictLOUP을 사용하여 m을 해결합니다.
check('누적');
* 제로
ydLo('s1') = -INF; ydUp('s1') = INF;
o('updateType') = 0;
mcp 시나리오 dictLOUP을 사용하여 m을 해결합니다.
check('제로');