ccmg74.gms : 엔지니어링 예제 7.4의 이중 레벨 프로그램

설명

7장의 예, 예 7.4, 281페이지

Conejo A J, Castillo E, Minguez R 및 Garcia-Bertrand R, 분해
수학적 계획법의 기술, Springer, 베를린, 2006년.

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

소형 모델 유형 :BP


카테고리 : 크레이지 슬롯 EMP 라이브러리


메인 파일 : ccmg74.gms

$title 엔지니어링 예제 7.4의 이중 레벨 프로그램(CCMG74,11)

$onText
7장, 예 7.4, 281페이지의 예

Conejo A J, Castillo E, Minguez R 및 Garcia-Bertrand R, 분해
수학적 계획법의 기술, Springer, 베를린, 2006년.

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

$offText

*보고된 솔루션은 다음과 같습니다.
스칼라 x_l / 1/
       y_l / 6/
       톨 /1e-6/;

*------------------------------------------------------------------
* 다양한 솔루션에 대한 보고 및 비교 준비

매개변수 대표 비교;
세트
   이름 / defobj,e1,f2*f5 /
   v이름 / obj,x,y /
   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
*------------------------------------------------------------------
* 모델

변수 obj,x,y; 양의 변수 m1,m2;
방정식 defobj,e1,f2,f3,f4,f5; 방정식 a1,a2,a3;

defobj..obj =e= 4*y - x;
e1..y + 2*x =l= 8;
f2..y =g= 0;
f3..y + x =g= 7;
f4..x =g= 0;
f5..x =l= 4;
a1.. -1 - m1 + m2 =e= 0;
a2.. -y*m1 =e= 0;
a3..(y+x-7)*m2 =e= 0;

모델북 / defobj,e1,f2,f3,f4,f5,a1,a2,a3/
      emp1 / defobj,e1,f2,f3,f4,f5 /
      emp2 / defobj,e1,f3 /;

*종이에 주어진 모델을 풀어보세요.
우리에게 책을 풀어주세요 nlp min obj;
$batInclude "%크레이지 슬롯scrdir%report.%크레이지 슬롯scrext%" 책

*EMP로 해결
파일 emp 확장 MP 정보 파일 핸들 / '%emp.info%' / ;
putclose emp '* 단순 경계 없음' / 'bilevel x max y f2 f3';
emp1 us emp min obj를 해결하세요.
abort$(emp1.solvestat <> %solveStat.normalCompletion%) 'EMP의 솔버 상태는 <> 1';
$batInclude "%크레이지 슬롯scrdir%report.%크레이지 슬롯scrext%" emp

*명시적 제약 대신 단순 경계를 사용하여 EMP로 해결
x.lo = 0; x.up = 4; y.lo = 0;
putclose emp '* 간단한 경계 포함' / 'bilevel x max y f3';
emp2 us emp min obj를 해결하세요.
abort$(emp2.solvestat <> %solveStat.normalCompletion%) '간단한 경계를 갖는 EMP의 솔버 상태는 <> 1입니다.';
$batInclude "%크레이지 슬롯scrdir%report.%크레이지 슬롯scrext%" simpleemp

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

담당자(evnames,suf,'book-emp') = abs(rep(evnames,suf,'book')
                                    - 담당자(evnames,suf,'emp'));
rep(evnames,suf,'book-emp')$(rep(evnames,suf,'book-emp') < 1e-5) = 0;

담당자(evnames,suf,'book-simpleemp') = abs(rep(evnames,suf,'book')
                                    - 담당자(evnames,suf,'simpleemp'));
rep(evnames,suf,'book-simpleemp')$(rep(evnames,suf,'book-simpleemp') < 1e-5) = 0;

디스플레이 담당자;

abort$sum((evnames,suf),rep(evnames,suf,'book-emp')) '북 모델과 EMP의 솔루션이 다릅니다.';
abort$sum((evnames,suf),rep(evnames,suf,'book-simpleemp')) '간단한 경계를 갖는 책 모델과 EMP의 솔루션이 다릅니다.';

중단$( (abs(x.l - x_l ) > tol)
      또는 (abs(y.l - y_l ) > tol) ) '보고된 솔루션을 찾을 수 없음';