설명
간단한 원뿔형 프로그램(PSD 및 SOC 원뿔) 해결의 정확성 테스트 Mosek 매뉴얼의 준정사 프로그래밍 예제 sdo1을 사용하여.http://docs.mosek.com/7.0/capi/Semidetermin_optimization.html문제는 최소 2*(barX(0,0) + barX(1,0) + barX(1,1) + barX(2,1) + barX(2,2)) + x0 성 barX(0,0) + barX(1,1) + barX(2,2) + x0 = 1 barX(0,0) + barX(1,1) + barX(2,2) + 2*(barX(1,0) + barX(2,0) + barX(2,1)) + x1 + x2 = 0.5 x0 >= sqrt(x1^2 + x2^2) barX 대칭 및 양의 준정부호
소형 모델 유형 :QCP
카테고리 : 슬롯 사이트 테스트 라이브러리
메인 파일 : sdp01.gms
$title 간단한 원뿔형 프로그램(PSD 및 SOC 원뿔)을 올바르게 푸는 테스트입니다. (SDP01, SEQ=630)
$onText
간단한 원추형 프로그램(PSD 및 SOC 콘) 해결의 정확성 테스트
Mosek 매뉴얼의 준정의 프로그래밍 예제 sdo1을 사용하여.
http://docs.mosek.com/7.0/capi/Semidetermin_optimization.html
문제는
최소 2*(barX(0,0) + barX(1,0) + barX(1,1) + barX(2,1) + barX(2,2)) + x0
성 barX(0,0) + barX(1,1) + barX(2,2) + x0 = 1
barX(0,0) + barX(1,1) + barX(2,2) + 2*(barX(1,0) + barX(2,0) + barX(2,1)) + x1 + x2 = 0.5
x0 >= sqrt(x1^2 + x2^2)
barX 대칭 및 양의 준정부호
$offText
$설정되지 않은 경우 TESTTOL $set TESTTOL 1e-6
i / 0 * 2 / 설정;
별칭(i, ip);
변수 barX(i,i) PSDMATRIX
x(i) 스칼라 변수
z 목적변수
;
x.lo('0') = 0;
매개변수 barAobj(i,i) 객관적인 barX의 계수
barAe1(i,i) e1의 barX 계수
barAe2(i,i) e2의 barX 계수
;
테이블 barAobj(i,i)
0 1 2
0 2.0 1.0 0.0
1 1.0 2.0 1.0
2 0.0 1.0 2.0
;
* 단위 행렬
barAe1(i,i) = 1.0;
* 올원 매트릭스
barAe2(i,ip) = 1.0;
방정식 obj, e1, e2, e3;
obj.. z =e= sum((i,ip), barAobj(i,ip) * barX(i,ip)) + x('0');
e1.. 1 =e= sum((i,ip), barAe1(i,ip) * barX(i,ip)) + x('0');
e2.. 0.5 =e= sum((i,ip), barAe2(i,ip) * barX(i,ip)) + x('1') + x('2');
e3.. - sqr(x('0')) + sqr(x('1')) + sqr(x('2')) =l= 0;
모델 m / 모두 /;
옵션 qcp = 모세크;
m.dictfile = 1;
m.optfile = 1;
$echo SDPSOLUFILE sdpsol.gdx > mosek.opt
QCP를 사용하여 z를 최소화하는 m을 해결합니다.
barX.l을 표시;
매개변수 zobj 최적값 / 7.0571048621e-01 /;
abort$(m.modelstat <> %modelStat.optimal%) '최적화로 해결되지 않음';
abort$(abs(z.l - zobj) > %TESTTOL%) '최적 값이 잘못되었습니다.';
매개변수 A(i,i) '매개변수로서의 i x i 행렬'
ev(i) 'i x i 행렬의 고유값'
;
* 슬롯 사이트 솔루션의 barX.l이 psd인지 확인
* (모든 PSD 행렬 항목이 제약 조건에 나타나므로 이 예에서는 작동해야 함)
A(i,ip) = barX.l(i,ip);
ExecuteTool.checkErrorLevel 'linalg.eigenvalue i A ev'
* Symbol ev는 ExecutionTool.checkErrorLevel에 의해 암시적으로 로드되었습니다. 컴파일러 명령어
* 다음 줄에서는 아마도 할당되지 않은 기호에 대한 오류를 억제합니다.
$onImplicitAssign
디스플레이 ev;
abort$(smin(i, ev(i)) < -%TESTTOL%) 'barX.l PSD가 아님'
* GDX 솔루션 파일의 barX.l과 barX.m이 psd인지 확인
Execute_loadpoint 'sdpsol.gdx';
barX.l을 표시;
A(i,ip) = barX.l(i,ip);
ExecuteTool.checkErrorLevel 'linalg.eigenvalue i A ev'
디스플레이 ev;
abort$(smin(i, ev(i)) < -%TESTTOL%) 'PSD가 아닌 GDX 솔루션 파일의 barX.l'
barX.m을 표시;
A(i,ip) = barX.m(i,ip);
ExecuteTool.checkErrorLevel 'linalg.eigenvalue i A ev'
디스플레이 ev;
abort$(smin(i, ev(i)) < -%TESTTOL%) 'PSD가 아닌 GDX 솔루션 파일의 barX.m'