simplevi.gms : 단순변동부등식

설명

이 모델은 EMP를 사용하여 간단한 VI를 해결하는 방법을 보여줍니다.

VI는 X에서 x를 찾는 것입니다.
F(x) (y - x) >= 0, X의 모든 y에 대해
X는 닫힌 볼록 집합입니다. X =  x >= 0 | g(x) >= 0 

이어서 모델 '개혁'은 EMP가 내부적으로 해결하는 MCP를 예시한다.

기고자: Michael Ferris, 2010년 2월

소형 모델 유형 :VI


카테고리 : 슬롯 나라 EMP 라이브러리


메인 파일 : simplevi.gms

$title 단순변분부등식(SIMPLEVI,SEQ=46)

$onText
이 모델은 EMP를 사용하여 간단한 VI를 해결하는 방법을 보여줍니다.

VI는 X에서 x를 찾는 것입니다.
F(x) (y - x) >= 0, X의 모든 y에 대해
X는 닫힌 볼록 집합입니다. X =  x >= 0 | g(x) >= 0 

이어서 모델 '개혁'은 EMP가 내부적으로 해결하는 MCP를 예시한다.

기고자: Michael Ferris, 2010년 2월
$offText

세트
 나는 / i1, i2 /
 J / j1 * j3 /
 ;

테이블 A(I,J)
       j1 j2 j3
나는1 1 1
i2 1 1 ;

매개변수 b(I) /
i1 6
i2 9
/;

양의 변수
 x(J) '원시 변수, perp에서 f(J)'
 ;

방정식
 에프(J)
 지(나)
 ;

F(J).. 2 * x(J) =n= 0 ;
g(I).. sum j, A(I,J)*x(J) =g= b(I) ;

모델 simpleVI / F, g/;

파일 fx /"%emp.info%"/;
putclose fx 'vi F x g';

emp를 사용하여 simpleVI를 해결합니다.

$onText
이는 MCP로 다시 공식화될 수 있습니다.

0 <= F(x) - \grad g(x) u \perp x >= 0
0 <= g(x) \perp u >= 0
$offText

양의 변수
 u(I) '보조 변수, perp to g(I)'
 ;

방정식
 F_aux(J)
 ;

F_aux(J).. 2 * x(J) + 합계I, -A(I,J)*u(I) =n= 0 ;
u.l(I) = g.m(I);
모델 개혁 / F_aux.x, g.u/;

*simpleVI에서 얻은 솔루션을 벤치마킹합니다.
개혁.iterlim = 0;
mcp를 사용하여 개혁을 해결합니다.
abort$(reform.objval > 1e-9) '솔루션이 다릅니다'