scensol10.gms : MCP GUSS 테스트

설명

이 모델은 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('제로');