empecs01.gms : 슬롯 내장 상보성 시스템 테스트

설명

내장된 상보성 시스템
------------------

해결해야 할 문제는 다음과 같습니다.
  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를 참조하세요.';