설명
이 예는 다음의 NLP 예인 ex2.gms를 기반으로 합니다. 제약이 없는 QP. 여기서는 동일한 모델로 시작하여 KKT 조건을 기록합니다. 그런 다음 외부 방정식을 사용하여 이러한 KKT 조건을 구현합니다.
소형 모델 유형 :슬롯 사이트 추천
카테고리 : 슬롯 사이트 추천 테스트 라이브러리
메인 파일 : exmcp1.gms
$title 외부 방정식 - MCP 1 예(EXMCP1,SEQ=573)
$onText
이 예는 NLP 예인 ex2.gms를 기반으로 합니다.
제약이 없는 QP.
여기서는 동일한 모델로 시작하여 KKT 조건을 기록합니다.
그런 다음 외부 방정식을 사용하여 이러한 KKT 조건을 구현합니다.
$offText
I /i1*i14/를 설정합니다.
별칭(I,J);
스칼라 보상;
매개변수 Q(I,I) '공분산 행렬',
X0(I) '목표';
Q(I,J) = power(0.5, abs(ord(I)-ord(J)) );
X0(I) = ord(I) / 카드(I);
Q, X0을 표시합니다.
변수
x(I), z;
방정식
zdef '슬롯 사이트 추천의 목적 함수',
dzdx(I) 'del z wrt x(I)',
dzdxX(I) 'del z wrt x(I), eXternal 버전';
zdef..sum (I,J),
(x(I)-x0(I)) * Q(I,J) * (x(J)-x0(J))
=e=z;
dzdx(I).. 2 * 합 J, Q(I,J) * (x(J) - x0(J)) =e= 0;
dzdxX(I).. sum J, ord(J) * x(J) =x= ord(I);
$ 미리 설정
$ifI %system.filesys%==unix $set pre 'lib'
$ 세트 '64'
$세트 N exmcp1
$set cN %pre%%N%c%suf%
$set fN %pre%%N%f%suf%
모델 exnlp1 / zdef /;
모델 %N% '슬롯 사이트 추천 구현' / dzdx /;
model %cN% 'C의 외부 방정식' / dzdxX /;
model %fN% 'F77의 외부 방정식' / dzdxX /;
파일 f / 'exmcp1.put' /; f.nw = 0; f.nd = 13;
f.nr = 0; f 카드 넣기(i):0:0 /; f.nr = 2;
루프 나,
x0(i)를 넣어 /;
루프 j,
q(i,j)를 넣어 /;
;
;
닫다 f;
매개변수 보고서(*, *, *) '솔루션 요약';
스칼라 totdist /0/;
$onEchoV > runme.gms
x.l(j) = 0;
x.m(j) = 0;
$if %2==nlp nlp min z를 사용하여 %1을 해결합니다.
$if not %2==nlp mcp를 사용하여 %1을(를) 해결합니다. z.l = 합계 (I,J), (x.l(I)-x0(I)) * Q(I,J) * (x.l(J)-x0(J));
Report('Solve','Stat', '%1') = %1.solvestat;
Report('모델','Stat', '%1') = %1.modelstat;
Report('OBJ', 'Z', '%1') = z.l;
Report(i,'대상', '%1') = x0(i);
보고서(i,'값', '%1') = x.l(i);
보고서(i,'거리','%1') = abs(x.l(i) - x0(i));
totdist = totdist + sum(i,abs(x.l(i) - x0(i)));
$offEcho
$ 확장 '.dll' 설정
$ifI %system.filesys%==unix $set ext '.so'
$ifI %system.platform%==dex $set ext '.dylib'
$ifI %system.platform%==dax $set ext '.dylib'
$ 세트 eq
$ifI %system.filesys%==unix $set eq "'"
$if set runall $set runC '1' set runF '1'
$ifThen nocomp를 설정하지 않음
$ ifI set runC $call 슬롯 사이트 추천 complink lo=%슬롯 사이트 추천lo% --lang=c --files=exmcp1c.c --libname=%cN%%ext%
$ 오류 수준 1인 경우 $abort C 라이브러리 컴파일 오류
$ ifI set runF $call 슬롯 사이트 추천 complink lo=%슬롯 사이트 추천lo% --lang=fortran90 --files=%eq%"gehelper.f90 exmcp1f.f90"%eq% --libname=%fN%%ext%
$ 오류 수준 1인 경우 $abort Fortran90 라이브러리 컴파일 오류
$endIf
$ batInclude runme exnlp1 nlp
$ batInclude runme %N% mcp
$if set runC $batInclude runme %cN% mcp
$if set runF $batInclude runme %fN% mcp
보고서 표시;
* 이 totdist 허용 오차는 꽤 넓습니다.
* NLP 솔버로는 완전한 정밀도에 대한 솔루션을 얻을 수 없습니다.
* NLP의 정밀도를 MCP 기법과 비교해보세요!
if ((totdist < 1.0E-4),
"@@@@ #테스트에 통과했습니다."를 표시합니다.
그렇지 않으면
abort totdist, "@@@@ #테스트가 통과되지 않았습니다. 자세한 내용은 exmcp1.lst를 검사하십시오.";
);