설명
반환된 수준 및 한계의 정확성 테스트. 이 테스트는 모든 무료 슬롯 사이트 솔버에 작동하지만, 이는 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;
;
;