설명
매우 간단한 QCP: 2차 obj 및 1개의 2차 제약. Q를 통과하는 데 잘못된 규칙이 있어서는 안 됩니다. 행렬(예: 대칭 처리, "1/2 암시", 부호) 및 이것을 바로 잡아라. 기고자: Steven Dirkse, 2012년 1월
소형 모델 유형 :QCP
카테고리 : 메가 슬롯 테스트 라이브러리
메인 파일 : qcp09.gms
$title QCP 정확성에 대한 가장 간단한 테스트(QCP09,SEQ=555)
$onText
매우 간단한 QCP: 2차 obj 및 1개의 2차 제약.
Q를 통과하는 데 잘못된 규칙이 있어서는 안 됩니다.
행렬(예: 대칭 처리, "1/2 암시", 부호) 및
이것을 바로 잡아라.
기고자: Steven Dirkse, 2012년 1월
$offText
$설정되지 않은 경우 TESTTOL $set TESTTOL 1e-6
스칼라
m체크 / 0 /
톨 / %TESTTOL% /
엑스바 / 2 /
와이바 / 3 /
zbar / 44.25 /
;
$ifThen QCPMCHECKS를 설정
$ %QCPMCHECKS%가 아닌 경우 == 0 mchecks = 1;
$else
$ %QPMCHECKS%가 아닌 경우 == 0 mchecks = 1;
$endIf
변수 x, y, z;
방정식 f, g;
f .. z =E= -10.875 * x -1 * y + 3 * sqr(x-5) + x * y + 4 * sqr(y-6);
g .. 3 * sqr(x) + 2 * x * y + 2 * sqr(y) =L= 42;
모델 m / f, g /;
qcp min z를 사용하여 m을 해결합니다.
if (m.solvestat = %solveStat.capabilityProblems%),
abort$(m.modelstat <> %modelStat.noSolutionReturned%) '기능 오류에 대한 잘못된 modelstat';
'해석 기능 오류: 추가 테스트가 억제됨'을 표시합니다.
그렇지 않으면
abort$(m.solvestat <> %solveStat.normalCompletion% 또는 (m.modelstat > %modelStat.locallyOptimal% and m.modelstat <> %modelStat.feasibleSolution%)) '잘못된 상태 코드';
중단$[abs(x.l-xbar) > tol] '잘못된 x.l';
abort$[abs(y.l-ybar) > tol] '나쁜 y.l';
abort$[abs(z.l-zbar) > tol] '불량 z.l';
abort$[abs(f.l) > tol] '나쁜 f.l';
abort$[abs(g.l-g.up) > tol] '나쁜 g.l';
만약 mchecks,
중단$[abs(x.m) > tol] '잘못된 x.m';
abort$[abs(y.m) > tol] '나쁜 y.m';
abort$[abs(z.m) > tol] '나쁜 z.m';
abort$[abs(f.m-1) > tol] '나쁜 f.m';
중단$[abs(g.m+1.4375) > tol] '나쁜 g.m';
;
'모든 테스트 통과'를 표시합니다.
;