qcp08.gms : power(*,2) 함수를 사용하여 QCP의 정확성 테스트

설명

power(*,2) 함수를 사용하여 QCP 모델을 처리하는지 테스트합니다.
이것은 실제로 솔버 테스트가 아닌 공식 테스트입니다.

기고자: Steven Dirkse, 2011년 2월

소형 모델 유형 :QCP


카테고리 : 무료 슬롯 테스트 라이브러리


메인 파일 : qcp08.gms

$title power(*,2) 기능을 사용하여 QCP에 대한 정확성 테스트(QCP08,SEQ=512)

$onText
power(*,2) 함수를 사용하여 QCP 모델을 처리하는지 테스트합니다.
이것은 실제로 솔버 테스트가 아닌 공식 테스트입니다.

기고자: Steven Dirkse, 2011년 2월

$offText

변수 x, y, z;
방정식 f, fp, g;

f.. z =E= sqr(x) - x + sqr(y) + y ;
fp.. z =E= 거듭제곱(x,2) - x + 거듭제곱(y,2) + y ;
g.. x + y =G= 4;

모델 m / f, g /;
모델 mp / fp, g /;
* 이러한 경계는 활성화되어서는 안 되지만 글로벌 솔버에 도움이 됩니다.
x.lo = 0;
x.up = 5;
y.lo = 0;
y.up = 5;

$설정되지 않은 경우 TESTTOL $set TESTTOL 1e-5
스칼라
  m체크 / 0 /
  톨 / %TESTTOL% /
  z_l / 7.5 /
  x_l / 2.5 /
  y_l / 1.5 /
  f_l / 0 /
  f_m / 1 /
  g_l / 4 /
  g_m / 4 /
  ;
$%QPMCHECKS%가 아닌 경우 == 0 mchecks = 1;

* 먼저 sqr을 사용하는 모델을 풀어보세요.
qcp min z를 사용하여 m을 해결합니다.

abort$[abs(z.l-z_l) > tol] '불량 z.l';
중단$[abs(x.l-x_l) > tol] '잘못된 x.l';
abort$[abs(y.l-y_l) > tol] '나쁜 y.l';
abort$[abs(f.l-f_l) > tol] '나쁜 f.l';
abort$[abs(g.l-g_l) > tol] '나쁜 g.l';

만약 mchecks,
  abort$[abs(z.m) > tol] '나쁜 z.m';
  중단$[abs(x.m) > tol] '잘못된 x.m';
  abort$[abs(y.m) > tol] '나쁜 y.m';
  중단$[abs(f.m-f_m) > tol] '나쁜 f.m';
  abort$[abs(g.m-g_m) > tol] '나쁜 g.m';
;

* 이제 폴리 함수를 사용하는 모델을 해결합니다.
qcp min z를 사용하여 mp를 해결합니다.

abort$[abs(z.l-z_l) > tol] '불량 z.l';
중단$[abs(x.l-x_l) > tol] '잘못된 x.l';
abort$[abs(y.l-y_l) > tol] '나쁜 y.l';
abort$[abs(f.l-f_l) > tol] '나쁜 f.l';
abort$[abs(g.l-g_l) > tol] '나쁜 g.l';

만약 mchecks,
  abort$[abs(z.m) > tol] '나쁜 z.m';
  중단$[abs(x.m) > tol] '잘못된 x.m';
  abort$[abs(y.m) > tol] '나쁜 y.m';
  중단$[abs(f.m-f_m) > tol] '나쁜 f.m';
  abort$[abs(g.m-g_m) > tol] '나쁜 g.m';
;