설명
반환된 수준 및 한계의 정확성 테스트.
목표에만 QP 조건이 있습니다. 모든 MIQCP 솔버는 이를 받아들입니다.
고려된 사례:
1) =L=, =G=, =E= 제약조건
나중에 추가하려면:
2) 최소 [볼록한 물체] 또는 최대 [오목한 물체]
4) obj의 형태에 특별한 주의를 기울였습니다. 제약, 즉
cz * z = xQx + cx + b 여기서 cz와 b는 서로 다른 값을 갖습니다.
소형 모델 유형 :MIQCP
카테고리 : 무료 슬롯 사이트 테스트 라이브러리
메인 파일 : miqcp01.gms
$title MIQCP 수준 및 한계에 대한 정확성 테스트 (MIQCP01,SEQ=540)
$onText
반환된 수준과 한계의 정확성을 테스트합니다.
목표에만 QP 조건이 있습니다. 모든 MIQCP 솔버는 이를 받아들입니다.
고려된 사례:
1) =L=, =G=, =E= 제약조건
나중에 추가하려면:
2) 최소 [볼록한 물체] 또는 최대 [오목한 물체]
4) obj의 형태에 특별한 주의를 기울였습니다. 제약, 즉
cz * z = xQx + cx + b 여기서 cz와 b는 서로 다른 값을 갖습니다.
$offText
$설정되지 않은 경우 MTYPE $set MTYPE miqcp
$설정되지 않은 경우 TESTTOL $set TESTTOL 5e-6
스칼라 mchecks / 0 /;
$%QPMCHECKS%가 아닌 경우 == 0 mchecks = 1;
스칼라
cz / 1 /
CB / 0 /
빅엠 / 2 /
델타 / .2 /
x0 / 1.9 /
y0 / 1.15 /
;
변수 x, y, z;
이진 변수 b0, b1;
방정식
객체
h0 '반평면 (x+y-3) <= -delta if b0=0'
h1 '반평면 (x+y-3) >= 델타 if b0=1'
xc
;
obj.. z =E= sqr(x-x0) + sqr(y-y0);
h0.. (x + y - 3) - b0 * bigM =L= -delta;
h1.. (x + y - 3) + (1-b0)* bigM =G= 델타;
xc.. x =e= 1 + b1;
모델 m / 모두 /;
스칼라 실패 / 0 /;
$탈출 =
$echo if%=1, '%=1 실패' 표시, '%=2'; 실패=1; > gtest.gms
$탈출 %
스칼라
최소 / 1 /
톨 / %TESTTOL% /,
목표 / .0125 /
obj_l / 0.0 /
obj_m / 1.0 /
b0_l / 1 /, b0_m / .2 /
b1_l / 1 /, b1_m / .1 /
s_l / 0.2 /, s_m / 0 /
x_l / 2 /, x_m / 0 /
y_l / 1.2 /, y_m / 0 /
h0_l / 1.2 /, h0_m / 0 /
h1_l / 1.2 /, h1_m / .1 /
xc_l / 1 /, xc_m / .1 /
;
* 이미 기본값이 아닌 값으로 설정된 경우 optcr을 재설정하지 마십시오.
if (.1 = %무료 슬롯 사이트optcr%), 옵션 optcr = 1e-6; ;
miqcp를 사용하여 m min z를 해결합니다.
Execute_unload 'miqpSol.gdx';
$ batInclude gtest "(m.solvestat <> %solveStat.normalCompletion%)" "잘못된 솔버 상태"
$ batInclude gtest "((m.modelstat <> %modelStat.optimal%) and (m.modelstat <> %modelStat.integerSolution%))" "잘못된 모델 상태"
$ batInclude gtest "(abs(cz*z.l-cb-objval) > tol)" "bad z.l"
$ batInclude gtest "(abs(b0.l-b0_l) > tol)" "bad b0.l"
$ batInclude gtest "(abs(b1.l-b1_l) > tol)" "bad b1.l"
$ batInclude gtest "(abs(x.l-x_l) > tol)" "bad x.l"
$ batInclude gtest "(abs(y.l-y_l) > tol)" "bad y.l"
$ batInclude gtest "(abs(obj.l-cb) > tol)" "bad obj.l"
$ batInclude gtest "(abs(h0.l-h0_l) > tol)" "bad h0.l"
$ batInclude gtest "(abs(h1.l-h1_l) > tol)" "bad h1.l"
$ batInclude gtest "(abs(xc.l-xc_l) > tol)" "bad xc.l"
만약 mchecks,
$ batInclude gtest "(abs(z.m) > tol)" "bad z.m"
$ batInclude gtest "(abs(b0.m-b0_m) > tol)" "bad b0.m"
$ batInclude gtest "(abs(b1.m-b1_m) > tol)" "bad b1.m"
$ batInclude gtest "(abs(x.m-x_m) > tol)" "bad x.m"
$ batInclude gtest "(abs(y.m-x_m) > tol)" "bad y.m"
$ batInclude gtest "(abs(cz*obj.m-obj_m) > tol)" "bad obj.m"
$ batInclude gtest "(abs(h0.m-h0_m) > tol)" "bad h0.m"
$ batInclude gtest "(abs(h1.m-h1_m) > tol)" "bad h1.m"
$ batInclude gtest "(abs(xc.m-xc_m) > tol)" "bad xc.m"
;
abort$failed '테스트 실패', cz, cb;