nlp01.gms : 무료 슬롯 사이트 수준 및 한계에 대한 정확성 테스트

설명

반환된 수준 및 한계의 정확성 테스트.
이 테스트는 모든 무료 슬롯 사이트 솔버에 작동하지만,
이는 MINOS 스타일 링크를 테스트하기 위해 특별히 설계되었습니다.
여기에는 다양한 종류의 변수가 대부분/모두 포함됩니다.
그러한 링크에서 발견되는 제약 조건.

기여자: Steve

소형 모델 유형 :무료 슬롯 사이트


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


메인 파일 : nlp01.gms

$title 무료 슬롯 사이트 수준 및 한계에 대한 정확성 테스트 (NLP01,SEQ=415)

$onText
반환된 수준과 한계의 정확성을 테스트합니다.
이 테스트는 모든 무료 슬롯 사이트 솔버에 작동하지만,
이는 MINOS 스타일 링크를 테스트하기 위해 특별히 설계되었습니다.
여기에는 다양한 종류의 변수가 대부분/모두 포함됩니다.
그러한 링크에서 발견되는 제약 조건.

기여자: 스티브
$offText

$설정되지 않은 경우 MTYPE $set MTYPE 무료 슬롯 사이트
$설정되지 않은 경우 TESTTOL $set TESTTOL 1e-6
스칼라 mchecks / 0 /;
$%MCHECKS%가 아닌 경우 == 0 mchecks = 1;

$탈출 =
$echo if%=1, '%=1 실패' 표시, '%=2'; 실패=1; > tmp.gms
$탈출 %

스칼라
  cz / 1 /
  CB / 0 /;

변수
  t 'obj에서는 선형, 제약 조건에서는 비선형'
  u 'obj 및 제약 조건이 비선형적'
  v 'obj에서는 비선형, 제약 조건에서는 선형'
  w 'obj에는 없고 제약 조건에서는 비선형적입니다.'
  x 'obj 및 제약 조건에서 선형'
  y 'obj에 없음, 제약 조건에서 선형'
  z '목표 변수'
  ;
방정식
  객체
  e '선형, 평등'
  f '비선형, 보다 작음'
  g '비선형, 보다 큼'
  h '비선형, 평등'
  L '선형, 보다 작음'
  ;

obj.. cz * z =E= cb + 2*t + sqr(u) + sin(v/10) + 5*x;
즉.. w =E= 2*t;
L.. x + y =L= 7;
f..u**1.5 + y =L= 3;
g.. 1 =G= log(t) + v;
h.. w**1.1 =E= y;

모델 m / e, L, obj, f, g, h /;

t.lo = .1;    t.up = 2;
u.lo = 1e-3;  u.up = 3;
v.lo = 1e-3;  v.up = 4;
w.lo = 1e-3;  w.up = 1;
x.lo = 0;     x.up = 10;
y.lo = 0;     y.up = 10;

* 무료 슬롯 사이트 max z를 사용하여 m을 해결합니다.
* $출구

스칼라
  실패 / 0 /
  isMax / 0 /
  톨 / %TESTTOL% /
  obj_l / 0.0 /
  obj_m / 1.0 /
  목표 / 38.67540837055 /
  e_l / 0 /
  e_m / -6.448473234922 /
  f_l / 3 /
  f_m / 1.8859080143051 /
  g_l / -1 /
  g_m / -0.094595854378246 /
  h_l / 0 /
  h_m / 6.8859080143051 /
  ㅋㅋㅋ / 7 /
  L_m / 5 /
  t_l / 0.1 /
  t_m / -11.842905013627 /
  u_l / 2.00061508410989 /
  u_m / 0 /
  v_l / 3.30258509299405 /
  v_m / 0 /
  w_l / 0.2 /
  w_m / 0 /
  x_l / 6.82973201549584 /
  x_m / 0 /
  y_l / 0.170267984504157 /
  y_m / 0 /
  ;

czvals 'obj 승수' 설정 /
'cz=1',
'cz=0.5'
'cz=3'
'cz=-1'
'cz=-0.5'
'cz=-3'
/;
매개변수 czv(czvals) /
'cz=1' 1
'cz=0.5' 0.5
'cz=3' 3
'cz=-1' -1
'cz=-0.5' -0.5
'cz=-3' -3
/;

cbvals 'obj 상수' 설정/
'cb=0'
'cb=2'
'cb=-2'
/;
매개변수 cbv(cbvals) /
'cb=0' 0
'cb=2' 2
'cb=-2' -2
/;

루프 czvals$[ord(czvals) <= INF],
 cz = czv(czvals);
 루프 cbvals$[ord(cbvals) <= INF],
  cb = cbv(cbvals);
  (cz > 0)인 경우,
    isMax = 1;
    %MTYPE% max z를 사용하여 m을 해결합니다.
  그렇지 않으면
    isMax = -1;
    %MTYPE% min z를 사용하여 m을 해결합니다.

  if (m.modelstat = %modelStat.noSolutionReturned%) 및 (m.solvestat = %solveStat.capabilityProblems%),
* sin() 또는 비볼록 모델로 인한 기능 문제
    abort.noerror '기능 문제: 추가 테스트 건너뛰기: 테스트 통과';
  ;
$ batInclude tmp "( m.solvestat <> %solveStat.normalCompletion% 또는 (m.modelstat > %modelStat.locallyOptimal% 및 m.modelstat <> %modelStat.feasibleSolution%))" "잘못된 상태 코드"

$ batInclude tmp "(abs(cz*z.l-cb-objval) > tol)" "bad z.l"

$ batInclude tmp "(abs(t.l-t_l) > tol)" "bad t.l"
$ batInclude tmp "(abs(u.l-u_l) > tol)" "bad u.l"
$ batInclude tmp "(abs(v.l-v_l) > tol)" "bad v.l"
$ batInclude tmp "(abs(w.l-w_l) > tol)" "bad w.l"
$ batInclude tmp "(abs(x.l-x_l) > tol)" "bad x.l"
$ batInclude tmp "(abs(y.l-y_l) > tol)" "bad y.l"

$ batInclude tmp "(abs(obj.l-cb) > tol)" "bad obj.l"
$ batInclude tmp "(abs(e.l-e_l) > tol)" "bad e.l"
$ batInclude tmp "(abs(f.l-f_l) > tol)" "bad f.l"
$ batInclude tmp "(abs(g.l-g_l) > tol)" "bad g.l"
$ batInclude tmp "(abs(h.l-h_l) > tol)" "bad h.l"
$ batInclude tmp "(abs(L.l-L_l) > tol)" "나쁜 L.l"

  만약 mchecks,
$ batInclude tmp "(abs(z.m) > tol)" "bad z.m"
$ batInclude tmp "(abs(cz*t.m -t_m) > tol)" "bad t.m"
$ batInclude tmp "(abs(cz*u.m -u_m) > tol)" "bad u.m"
$ batInclude tmp "(abs(cz*v.m -v_m) > tol)" "bad v.m"
$ batInclude tmp "(abs(cz*w.m -w_m) > tol)" "bad w.m"
$ batInclude tmp "(abs(cz*x.m -x_m) > tol)" "bad x.m"
$ batInclude tmp "(abs(cz*y.m -y_m) > tol)" "bad y.m"

$ batInclude tmp "(abs(cz*obj.m-obj_m) > tol)" "bad obj.m"
$ batInclude tmp "(abs(cz*e.m -e_m) > tol)" "bad e.m"
$ batInclude tmp "(abs(cz*f.m -f_m) > tol)" "bad f.m"
$ batInclude tmp "(abs(cz*g.m -g_m) > tol)" "bad g.m"
$ batInclude tmp "(abs(cz*h.m -h_m) > tol)" "bad h.m"
$ batInclude tmp "(abs(cz*L.m -L_m) > tol)" "bad L.m"
  ;

$ifThen 도스칼라 설정
  만약 실패,
    옵션 %MTYPE%=변환;
    (cz > 0)인 경우,
      %MTYPE% max z를 사용하여 m을 해결합니다.
    그렇지 않으면
      %MTYPE% min z를 사용하여 m을 해결합니다.
    ;
  ;
$endIf
  abort$failed '테스트 실패', cz, cb;
 ;
;