설명
이것은 동등한 보완성 모델을 보여주기 위한 예로 시작되었습니다. 하나는 양수 변수를 사용하고 다른 하나는 "혼합 경계"를 사용합니다. 임의의 하한 및 상한. 달리 말하면 이렇다. NCP와 MCP를 비교/대조합니다. 그 속에서 잃어버린 것은 아무것도 없어야 한다. 명확성/유지관리성이 향상된 MCP 공식화. 이 예에서는 무한 경계를 사용할 때 문제가 발생했습니다. 상보성 문제에 대한 불평등. 이 예에서는 최적화 문제에 대한 KKT 시스템을 생각해 보세요. 최소 제곱(x-c) 성 L <= x <= U 기고자: Steve Dirkse, 2009년 3월
소형 모델 유형 :MCP
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : mcp09.gms
$title 무한 범위의 부등식 테스트(MCP09,SEQ=440)
$onText
이는 등가 상보성 모델을 보여주기 위한 예시로 시작되었으며,
하나는 양의 변수를 사용하고 다른 하나는 "혼합 경계"를 사용합니다.
임의의 하한 및 상한. 다르게 말하면 이
NCP와 MCP를 비교/대조합니다. 그 속에서 잃어버린 것은 아무것도 없어야 한다.
명확성/유지관리성이 향상된 MCP 공식화.
이 예에서는 무한 경계를 사용할 때 문제가 발생했습니다.
상보성 문제에 대한 불평등.
이 예에서는 최적화 문제에 대한 KKT 시스템을 생각해 보세요.
최소 제곱(x-c)
성 L <= x <= U
기고자: Steve Dirkse, 2009년 3월
$offText
스칼라
c / 3 /
엘, 유;
변수 z '임의의 경계';
양의 변수 x, loSlack, upSlack;
* L >= 0이면 x를 >= 0으로 둘 수 있습니다.
방정식
f 'MCP 기능'
g 'NCP 기능'
loBound, 업바운드;
;
f..2*(z-c) =N= 0;
g.. 2*(x-c) - loSlack + upSlack =G= 0;
loBound.. x =G= L;
업바운드.. U =G= x;
모델 ncp 'NCP 버전' / g.x, loBound.loSlack, upBound.upSlack /;
모델 m 'MCP 버전' / f.z /;
세트
사례 / c1 * c7 /
루프 / L, U /;
테이블 BND(케이스, 루프)
루
c1 4 5
c2 1 2
c3 2 4
c4 4 1e4
c5 -1e4 2
c6 4 inf
c7 -inf 2
;
매개변수
보고(건수,*,*)
diff(케이스,*);
별칭(v,*);
루프 케이스,
L = bnds(cases,'L');
U = bnds(cases,'U');
z.lo = L;
z.up = U;
mcp를 사용하여 m을 해결합니다.
abort$[m.modelstat <> %modelStat.optimal%] 'MCP를 해결하는 잘못된 modelstat';
abort$[m.solvestat <> %solveStat.normalCompletion%] '잘못된solvestat 해결 MCP';
보고서(케이스,'mcp','xLev') = z.l;
Report(cases,'mcp','loSlack') = max( z.m,0);
Report(cases,'mcp','upSlack') = max(-z.m,0);
mcp를 사용하여 ncp를 해결합니다.
abort$[ncp.modelstat <> %modelStat.optimal%] 'NCP를 해결하는 잘못된 modelstat';
abort$[ncp.solvestat <> %solveStat.normalCompletion%] '잘못된solvestat 해결 NCP';
보고서(케이스,'ncp','xLev') = x.l;
보고서(케이스,'ncp','loSlack') = loSlack.l;
보고서(케이스,'ncp','upSlack') = upSlack.l;
;
diff(cases,v) = abs(report(cases,'ncp',v) - 보고서(cases,'mcp',v));
디스플레이 bnds, 보고서, diff;
abort$[smax(cases,v), diff(cases,v) > 1e-6] '다른 결과';