설명
이 모델은 EMP로 얻은 결과와 해당 손으로 만들어진 모델. 이중 레벨 모델은 외부로 구성됩니다. 목적 함수와 내부 함수로만 구성된 최소화 문제 최소화 문제 기여자: Jan-H. Jagla, 2009년 1월
소형 모델 유형 :메가 슬롯
카테고리 : 메가 슬롯 테스트 라이브러리
메인 파일 : empbp02.gms
$title 단순 이중 모델, 외부 문제는 객관적인 내용으로만 구성됩니다(EMPBP02,SEQ=421)
$onText
이 모델은 EMP로 얻은 결과와 EMP를 사용하여 얻은 결과를 비교합니다.
해당 손으로 만들어진 모델. 이중 레벨 모델은 외부로 구성됩니다.
목적 함수와 내부 함수로만 구성된 최소화 문제
최소화 문제
기여자: Jan-H. 자글라, 2009년 1월
$offText
$설정되지 않은 경우 nlpsolver $set nlpsolver conopt
*------------------------------------------------------------------
*보고 준비
매개변수 대표 비교;
세트
이름/outerobj,innerobj,innereq1/
v이름 / out,x,in,y1,y2 /
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;
변수
밖으로
안으로;
양수 변수
엑스
y1
y2;
외부 개체.. out =e= sqr(x) - 4*x + sqr(y1) + sqr(y2);
x.up = 2;
innerobj.. in =e= sqr(y1) + 0.5*sqr(y2) + y1*y2 + (1-3*x)*y1 + (1+x)*y2;
내부 q1.. 2*y1 + y2 - 2*x =l= 1;
모델 외부 / Outerobj /
내부 / innerobj, innereq1 /
이중 레벨 / 외부, 내부 /;
$echo bilevel x 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;
dLdy1.. ( - (2*y1 + y2 + 1 - 3*x))/(-1) - u2*2 =N= 0;
dLdy2.. ( - (y2 + y1 + 1 + x))/(-1) - u2 =N= 0;
모델 매뉴얼/외부, innereq1.u2, dLdy1.y1, dLdy2.y2 /;
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')) '솔루션이 다릅니다';