qcp09.gms : QCP 정확성에 대한 가장 간단한 테스트

설명

매우 간단한 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';
  ;
  '모든 테스트 통과'를 표시합니다.
;