empbp03.gms : 간단한 이중 모델, 내부 문제와 외부 문제 모두 제약 조건이 있습니다.

설명

이 모델은 EMP로 얻은 결과와
해당 손으로 만들어진 모델. 외부 최소화 문제와
내부 최소화 문제에는 제약 조건이 포함되어 있습니다.

기여자: Jan-H. Jagla, 2009년 1월

소형 모델 유형 :슬롯 사이트


카테고리 : 슬롯 사이트 테스트 라이브러리


메인 파일 : empbp03.gms

$title 간단한 이중 모델, 내부 및 외부 문제 모두 제약 조건이 있음 (EMPBP03,SEQ=422)

$onText

이 모델은 EMP로 얻은 결과와 EMP를 사용하여 얻은 결과를 비교합니다.
해당 손으로 만들어진 모델. 외부 최소화 문제와
내부 최소화 문제에는 제약 조건이 포함되어 있습니다.

기여자: Jan-H. 자글라, 2009년 1월

$offText

$설정되지 않은 경우 nlpsolver $set nlpsolver conopt

*------------------------------------------------------------------
*보고 준비

매개변수 대표 비교;
세트
   이름/outerobj,outereq1,innerobj,innereq1/
   vnames / out,x1,x2,in,y1,y2,y3 /
   evnames / set.enames,set.vnames /
   suf / l /;

$gdxOut "%슬롯 사이트scrdir%repsets.%슬롯 사이트scrext%"
$unLoad evnames suf
$gdx아웃

$onEcho > "%슬롯 사이트scrdir%repmaker.%슬롯 사이트scrext%"
이름 설정, suf;
$gdxIn "%슬롯 사이트scrdir%repsets.%슬롯 사이트scrext%"
$load evnames suf

파일 fx /"%슬롯 사이트scrdir%report.%슬롯 사이트scrext%"/; fx를 넣어;
루프((evnames,suf),
$탈출 =
  put "rep('" evnames.te(evnames) "','" suf.te(suf) "','%=1')"
  " = " evnames.te(evnames) "를 입력하세요." suf.te(suf) ";" /;
$탈출 %
);
$offEcho

$call 슬롯 사이트 "%슬롯 사이트scrdir%repmaker.%슬롯 사이트scrext%" lo=0
*------------------------------------------------------------------

방정식
   외부로비
   외부 q1
   내부 개체
   내부q1;

변수
   밖으로
   안으로;

양수 변수
   x1
   x2
   y1
   y2
   y3;

외부 개체.. out =e= sqr(y1) + sqr(y3) - y1*y3 - 4*y2 - 7*x1 + 4*x2;

외부q1.. x1 + x2 =l= 1;

innerobj.. in =e= sqr(y1) + 0.5*sqr(y2) + 0.5*sqr(y3) + y1*y2 + (1-3*x1)*y1 + (1+x2)*y2;

내부 q1.. 2*y1 + y2 - y3 + x1 - 2*x2 + 2 =l= 0;

모델 외부 / Outerobj, Outereq1 /
      내부 / innerobj, innereq1 /
      이중 레벨 / 외부, 내부 /;

$echo bilevel x1 x2 min in * innerobj innereq1 > "%emp.info%"

옵션 dnlp=%nlpsolver%;

emp 최소화를 사용하여 2레벨 문제를 해결합니다.
abort$(bilevel.solvestat <> %solveStat.normalCompletion%) 'EMP 솔버 상태 <> 1';
$batInclude "%슬롯 사이트scrdir%report.%슬롯 사이트scrext%" emp

*솔루션 확인

*내부 최소화 문제에 대한 KKT 조건
음수 변수 u2;
방정식 dLdy1,dLdy2,dLdy3;
dLdy1.. ( - (2*y1 + y2 + 1 - 3*x1))/(-1) - u2*2 =N= 0;
dLdy2.. ( - (y2 + y1 + 1 + x2))/(-1) - u2 =N= 0;
dLdy3.. ( - y3)/(-1) + u2 =N= 0;

모델 매뉴얼/외부, innereq1.u2, dLdy1.y1, dLdy2.y2, dLdy3.y3 /;

mpec 최소화를 사용하여 수동 문제를 해결합니다.
abort$(manual.solvestat <> %solveStat.normalCompletion%) '수작업 모델 솔버 상태 <> 1';
$batInclude "%슬롯 사이트scrdir%report.%슬롯 사이트scrext%" 매뉴얼

*------------------------------------------------------------------
*차이점 보고

rep(evnames,suf,'diff') = abs(rep(evnames,suf,'emp') - rep(evnames,suf,'manual'));
rep(evnames,suf,'diff')$(rep(evnames,suf,'diff') < 1e-5) = 0;
디스플레이 담당자;
abort$sum((evnames,suf),rep(evnames,suf,'diff')) '솔루션이 다릅니다';