vi_mcp.gms : MCP 및 슬롯 구문을 사용하여 지정된 동일한 모델

설명

RVI(직사각형 슬롯)가 MCP와 동일함을 보여줍니다.

기고자: Steven Dirkse, 2013년 8월

소형 모델 유형 :슬롯


카테고리 : GAMS EMP 라이브러리


메인 파일 : vi_mcp.gms 포함: qpdata.inc[html]

$title MCP 및 슬롯 구문을 사용하여 지정된 동일한 모델(VI_MCP,SEQ=98)

$onText

RVI(직사각형 슬롯)가 MCP와 동일함을 입증합니다.

기고자: Steven Dirkse, 2013년 8월

$offText

$include qpdata.inc

* ----------- 0단계: QP를 QP로 풀기
* 해결하다
* 최소 1/2 xQx + cx
* 성.  도끼 >= b
* x >=0

옵션 nlp = conopt;
nlp min z를 사용하여 mqp를 해결합니다.
abort$[mqp.solvestat <> %solveStat.normalCompletion%] 'mqp가 해결되지 않음', mqp.solvestat;
abort$[mqp.modelstat > %modelStat.locallyOptimal%] 'mqp가 해결되지 않음', mqp.modelstat;

* ----------- STEP 1: MCP를 이용하여 QP의 KKT 조건 공식화 -----------
양의 변수 u(i);
방정식 dLdx(j);
dLdx(j) .. sumjj, Q(j,jj)*x(jj) + c(j) - sumi, u(i)*A(i,j) =N= 0;

모델 kkt / dLdx.x, g.u /;

파일 pathopt / 'path.opt' /;
putclose pathopt '전처리 번호'
               / 'crash_iteration_limit 0'
               / 'major_iteration_limit 0'
               /;
kkt.optfile = 1;
u.l(i) = g.m(i);
mcp를 사용하여 kkt를 해결합니다.
abort$[kkt.solvestat <> %solveStat.normalCompletion%] 'kkt가 해결되지 않음', kkt.solvestat;
abort$[kkt.modelstat <> %modelStat.optimal%] 'kkt가 해결되지 않음', kkt.modelstat;
abort$[kkt.iterusd <> 0] '해결책에서 시작할 것으로 예상됩니다.', kkt.iterusd;

파일 콥트 / 'convert.opt' /;
putclose copt 'gams mcpScalar.gms'
            / 'dict mcpDict.txt'
            /;
옵션 mcp=변환;
mcp를 사용하여 kkt를 해결합니다.
옵션 mcp=기본값;

* ----------- 2단계: 슬롯를 사용하여 1단계의 MCP 공식화 -----------
* MCP(F,B)(B는 상자 [L,U]임)는 슬롯(F,B)와 동일합니다.

모델 슬롯 / dLdx, g /;

파일 jopt / 'jams.opt' /;
putclose jopt 'fileName viScalar.gms'
            / 'dict viDict.txt'
            /;

파일 empinfo / '%emp.info%' /;
putclose empinfo '슬롯 dLdx x g u' / ;

슬롯optfile = 1;
emp를 사용하여 슬롯를 해결하십시오.
abort$[슬롯solvestat <> %solveStat.normalCompletion%] '슬롯가 해결되지 않음', 슬롯solvestat;
abort$[슬롯iterusd <> 0] '해결책에서 시작할 것으로 예상됩니다.', 슬롯iterusd;

'rm -f path.opt 변환.opt mcpScalar.???를 실행합니다. mcpDict.txt'
'rm -f jams.opt viScalar.???를 실행합니다. 슬롯?calarpf.pf viDict.txt empinfo.txt'