설명
내장된 상보성 시스템 ------------------ 해결해야 할 문제는 다음과 같습니다. min_x f(x,y) st g(x,y) \leq 0 게다가 제약 조건은 H(x,y,\lambda) = 0 여기서 \lambda는 g(x,y) \leq 0 제약 조건의 승수입니다. 슬롯를 사용하면 간단히 nlp를 지정하여 이 문제를 작성할 수 있습니다. 측면 제약조건 H. 매핑 사용 듀얼에쿠 하이 듀얼바 람다 g 슬롯는 y의 쌍대를 정의하는 측면 제약 조건 H를 고려합니다. g의 쌍대를 정의하는 측면 변수 람다. 참고자료: Ferris 외, 확장된 수학 프로그래밍 프레임워크, 컴퓨터 및 화학공학 33, p.1973-1982, 2009 기여자: Jan-H. Jagla, 2009년 1월
소형 모델 유형 :GAMS
카테고리 : GAMS 테스트 라이브러리
메인 파일 : empecs01.gms
슬롯 내장 상보성 시스템에 대한 $title 테스트(EMPECS01,SEQ=427)
$onText
임베디드 상보성 시스템
------------------
해결해야 할 문제는 다음과 같습니다.
min_x f(x,y) st g(x,y) \leq 0
게다가 제약 조건은
H(x,y,\lambda) = 0
여기서 \lambda는 g(x,y) \leq 0 제약 조건의 승수입니다.
슬롯를 사용하면 간단히 nlp를 지정하여 이 문제를 작성할 수 있습니다.
측면 제약조건 H. 매핑 사용
듀얼에쿠 하이
듀얼바 람다 g
슬롯는 y의 쌍대를 정의하는 측면 제약 조건 H를 고려합니다.
g의 쌍대를 정의하는 측면 변수 람다.
참고자료:
Ferris 외, 확장된 수학 프로그래밍 프레임워크,
컴퓨터 및 화학공학 33, p.1973-1982, 2009
기여자: Jan-H. 자글라, 2009년 1월
$offText
변수 obj, x, y;
양의 변수 람다;
방정식 defobj, g, H;
defobj..obj =e= sqr(x-y);
g..y =g= x + 1;
H..y + 람다 =e= 2;
*----------------------------
* 측면 제약 조건 및 변수를 고려하지 않은 순수 NLP2MCP
양수 변수 u2;
방정식 dLdx,dLdy;
dLdx.. ( - 2*(x - y))/(-1) + u2 =N= 0;
dLdy.. (2*(x - y))/(-1) - u2 =N= 0;
모델 mcp / g.u2,dLdx.x,dLdy.y /;
MCP를 사용하여 mcp를 해결합니다.
*----------------------------
* 이제 y의 쌍대를 정의하는 측면 제약조건 H를 고려하세요.
* 및 g의 쌍대를 정의하는 측면 변수 람다
방정식 dLdx_mod;
*dldx는 u2 대신 람다를 사용해야 합니다.
dLdx_mod.. ( - 2*(x - y))/(-1) + 람다 =N= 0;
모델 mcpd / defobj.obj,g.lambda,dLdx_mod.x,H.y /;
MCP를 사용하여 mcpd를 해결합니다.
스칼라 모델stat,solvestat;
*modelstat = mcpd.modelstat;
Solvestat = mcpd.solvestat;
Execute_unload '수동' x,y,obj,lambda,defobj,g,H,modelstat,solvestat;
*----------------------------
* 이제 슬롯가 재구성을 수행하도록 합니다.
$onEcho > "%슬롯info%"
듀얼에쿠 하이
듀얼바 람다 g
$offEcho
모델 nlpd /defobj, g, H/;
nlpd.iterlim=0;
obj를 최소화하는 슬롯를 사용하여 nlpd를 해결합니다.
*modelstat = nlpd.modelstat;
Solvestat = nlpd.solvestat;
Execute_unload '슬롯' x,y,obj,lambda,defobj,g,H,modelstat,solvestat;
*----------------------------
*솔루션 비교
'gdxdiff manual.gdx 슬롯gdx RelEps=1e-6 Eps=1e-9 > diff.log'를 실행합니다.
abort$errorlevel '솔루션이 다릅니다. difffile.gdx를 참조하세요.';