설명
실행 가능한 집합이 나타나지 않는 변수의 관점에서 정의된 경우 VI 함수 F에서는 이러한 변수를 언급할 필요가 없습니다. 명시적으로 경기에서. 일치하지 않는 변수는 다음과 같이 처리됩니다. 제로 기능과 일치합니다. 최적화 비유는 변수입니다. 제약 조건에는 나타나지만 목표에는 나타나지 않습니다. 우리 이 모델의 적절한 동작을 테스트/정의합니다. 기고자: Steven Dirkse, 2009년 2월
소형 모델 유형 :VI
카테고리 : 크레이지 슬롯 EMP 라이브러리
메인 파일 : zerofunc.gms
$title VI에서 함수가 0인 일치하지 않는 변수 일치(ZEROFUNC,SEQ=18)
$onText
실현 가능 집합이 나타나지 않는 변수로 정의된 경우
VI 함수 F에서는 이러한 변수를 언급할 필요가 없습니다.
명시적으로 경기에서. 일치하지 않는 변수는 다음과 같이 처리됩니다.
제로 기능과 일치합니다. 최적화 비유는 변수입니다.
제약 조건에는 나타나지만 목표에는 나타나지 않습니다. 우리
이 모델의 적절한 동작을 테스트/정의합니다.
기고자: Steven Dirkse, 2009년 2월
$offText
$onText
먼저 두 개의 변수로 NLP를 정의한 다음 MCP 버전을 기록합니다.
그런 다음 VI 버전을 적어 두십시오.
일반적인 경우 특정 경우
NLP: 최소 f(x) 1/3 y^3
성 g(x) >= 0 y >= sqr(z)
L <= x <= U y, z 자유
MCP: 라그랑지안 함수 wrt x,u의 미분을 취합니다.
dfdx - u * dgdx perpto x y^2 - u*1 perpto y 무료
0 + u*2z perpto z 무료
g(x) perpto u >= 0 y - sqr(z) perpto u >= 0
VI: F(x) := dfdx, F_y := y^2
F_z := 0
X = x:g(x) >= 0, L <= x <= U y >= sqr(z), y, z 범위 내
이 모든 것은 쌍을 포함할 필요가 없음을 보여주거나 테스트하기 위한 것입니다.
모델 설명의 F_z.z, 그리고 z가 언급되지 않았기 때문에
명시적으로 일치하는 경우에는 zero 함수와 일치됩니다.
$offText
자유 변수 y, z;
자유 변수 obj;
방정식 objDef, gCons;
objDef.. obj =E= power(y,3) / 3;
gCons..y =G= sqr(z);
모델 mNLP / objDef, gCons /;
nlp를 사용하여 mNLP min obj를 해결합니다.
양수 변수 u 'MCP에 대한 명시적 승수';
ul = gCons.m;
방정식
dLdy, dLdz,
dLdu;
dLdy..sqr(y) - u =N= 0;
dLdz.. 0 - u*2*z =N= 0;
dLdu..y - sqr(z) =N= 0;
모델 mMCP/dLdy.y, dLdz.z, dLdu.u/;
mcp를 사용하여 mMCP를 해결합니다.
abort$[mMCP.iterusd > 0] 'MCP 솔루션에서 시작했어야 했어요!';
방정식
F_y 'dfdy'
F_z 'dfdz'
;
F_y..sqr(y) =N= 0;
F_z..0 =N= 0;
모델 mVI / F_y, gCons /;
모델 mVI0 / F_z, F_y, gCons /;
$onText
참고: 동일한 VI를 지정하기 위해 4가지 동등한 방법을 테스트합니다. VI 선언문
항상 일치하는 쌍 "F_y y" 및 "gCons"를 포함하며 방정식은 다음을 정의합니다.
제약 세트. 각 변형은 "z" 사이의 일치를 지정합니다.
변수와 0 매핑이 다릅니다.
1) z는 "vi" 키워드 바로 뒤에 나타납니다. 이는 VI에 있고 수직입니다.
0(null) 함수로 변경됩니다.
2) z는 F_z := 0과 일치합니다.
3) z는 "0"과 일치하며, 이는 0 함수를 나타냅니다.
4) "0 z"와 "F_y y" 쌍의 순서가 변경된 (3)의 변형입니다.
교환되었습니다.
사례 3과 4는 크레이지 슬롯 25.1에 도입된 EMP 정보 파일 구문을 사용합니다.
단일 VI의 사소한 경우에는 이러한 차이가 발생하지 않습니다.
중요하지만 VI 모델과 최대/최소 모델을 다음과 같이 결합할 때
평형 모델의 다른 행위자에서는 차이점이 중요합니다.
$offText
파일 myinfo / '%emp.info%' /;
* 사례 1)
putclose myinfo 'vi z F_y y gCons' /;
emp를 사용하여 mVI를 해결합니다.
abort$[mVI.modelStat <> %modelStat.locallyOptimal%] 'VI는 문제를 해결해야 합니다.';
abort$[mVI.solveStat <> %solveStat.normalCompletion%] 'VI는 해결되어야 합니다.';
abort$[mVI.iterusd > 0] 'VI 솔루션에서 시작했어야 했습니다!';
* 사례 2)
putclose myinfo 'vi F_z z F_y y gCons' /;
emp를 사용하여 mVI0을 해결합니다.
abort$[mVI0.modelStat <> %modelStat.locallyOptimal%] 'VI는 해결되어야 합니다.';
abort$[mVI0.solveStat <> %solveStat.normalCompletion%] 'VI는 해결되어야 합니다.';
abort$[mVI0.iterusd > 0] 'VI 솔루션에서 시작했어야 했습니다!';
* 사례 3)
putclose myinfo 'vi 0 z F_y y gCons' /;
emp를 사용하여 mVI를 해결합니다.
abort$[mVI.modelStat <> %modelStat.locallyOptimal%] 'VI는 문제를 해결해야 합니다.';
abort$[mVI.solveStat <> %solveStat.normalCompletion%] 'VI는 해결되어야 합니다.';
abort$[mVI.iterusd > 0] 'VI 솔루션에서 시작했어야 했습니다!';
* 사례 4)
putclose myinfo 'vi F_y y 0 z gCons' /;
emp를 사용하여 mVI를 해결합니다.
abort$[mVI.modelStat <> %modelStat.locallyOptimal%] 'VI는 문제를 해결해야 합니다.';
abort$[mVI.solveStat <> %solveStat.normalCompletion%] 'VI는 해결되어야 합니다.';
abort$[mVI.iterusd > 0] 'VI 솔루션에서 시작했어야 했어요!';