vidualvar.gms : VI 제약 조건에 대해 이중 변수가 지정된 VI

설명

보통 empinfo 구문을 사용할 때

듀얼바 xe

e가 최적화 모델의 제약 조건인 경우입니다.
우리는 대수학에서 이중 승수 e.m(일명 x)을 사용하고 싶습니다.
e가 VI의 제약 조건인 경우에도 이 작업을 수행할 수 있습니다.
여기에 보여주세요.
슬롯 사이트 추천 배포 24.1.1 및 이전 버전에서는 작동하지 않았습니다.

기고자: Dirkse & Ferris, 2013년 6월

소형 모델 유형 :VI


카테고리 : 슬롯 사이트 추천 EMP 라이브러리


메인 파일 : vidualvar.gms

VI 제약 조건에 대해 이중 변수가 지정된 $title VI(VIDUALVAR,SEQ=96)

$onText

일반적으로 empinfo 구문을 사용할 때

듀얼바 xe

e가 최적화 모델의 제약 조건인 경우입니다.
우리는 대수학에서 이중 승수 e.m(일명 x)을 사용하고 싶습니다.
e가 VI의 제약 조건인 경우에도 이 작업을 수행할 수 있습니다.
여기에 보여주세요.
슬롯 사이트 추천 배포 24.1.1 및 이전 버전에서는 작동하지 않았습니다.

기고자: Dirkse & Ferris, 2013년 6월

$offText

$onText
간단한 두 에이전트 문제를 지정한 다음 이를 EMP로 모델링하겠습니다.
여러 가지 방법.

    최소 v + w =: z
    성  sqr(v) + 2*w >= 1 perp-to u >= 0
          v, w >= 0

    VI: F_y() := y - 4*u - 1 범인-y 무료

VI의 제약 조건과 관련된 DualVar가 있는 모델을 얻으려면,
최소 에이전트를 VI로 다시 작성하겠습니다.
$offText

긍정적인 변수
  v '최소 에이전트에 속함'
  w '최소 에이전트에 속함'
  u 'g.m과 동등하다'
  ;
자유 변수
  y 'VI 에이전트에 속함'
  z '목표 변수'
  ;
방정식
  defz '객관적 def'
  g '최소 에이전트에 대한 제약'
  Fy 'VI 함수'
  Dv '라그랑지안 파생 wrt v'
  Dw '라그랑지안 파생 wrt w'
  Fv 'Opt-as-VI의 VI 함수'
  Fw 'Opt-as-VI의 VI 기능'
  ;

defz..v+w =e= z;
g .. sqrt(v+1) + 2*w =g= 2;
Fy .. y =e= 4*u - 1;
Dv .. 1 - (1/(v+1))*u =N= 0;
Dw .. 1 - 2 *u =N= 0;
Fv..1 =N= 0;
Fw..1 =N= 0;

모델 opt '최소 에이전트 및 VI 에이전트' / defz, g, Fy /;
모델 vi 'VI 에이전트 및 VI 에이전트' / Fv, Fw, g, Fy /;
모델 m '명시적 MCP' / Dv.v, Dw.w, g.u, Fy.y /;

파일 jamsopt / 'jams.opt'/;
파일 empinfo / '%emp.info%' /;

putclose jamsopt
  '파일 이름 mcpOpt.gms' /
  '딕트 dictOpt.txt' /
* '디버그 2' /
  ;

putclose empinfo
'평형' /
' min z v w defz g' /
'vi Fy y' /
'dualvar u g' /
;

opt.optfile = 1;
opt.iterlim = 0;
defz.m = -1;
g.m = 0.5;
Fy.m = 1;
v.l = 0;
w.l = 0.5;
y.l = 1;
ul = 0.5;
emp를 사용하여 opt를 해결하십시오.
abort$[opt.modelStat <> %modelStat.locallyOptimal%] 'Opt는 0번 반복으로 OK를 해결해야 합니다.';
abort$[opt.solveStat <> %solveStat.normalCompletion%] 'Opt는 0번 반복으로 OK를 해결해야 합니다.';

m.iterlim = 0;
mcp를 사용하여 m을 해결합니다.
abort$[m.modelStat > %modelStat.locallyOptimal%] '반복 횟수 0으로 문제를 해결해야 합니다.';
abort$[m.solveStat <> %solveStat.normalCompletion%] 'm은 0번 반복으로 OK를 풀어야 합니다.';

putclose jamsopt
  '파일 이름 mcpVI.gms' /
  '딕트 dictVI.txt' /
* '디버그 2' /
  ;
putclose empinfo
'평형' /
'vi Fv v Fw w g' /
'vi Fy y' /
'dualvar u g' /
;
vi.optfile = 1;
vi.iterlim = 0;
emp를 사용하여 vi를 해결하십시오.
abort$[vi.modelStat <> %modelStat.locallyOptimal%] 'VI는 0번 반복으로 OK를 풀어야 합니다.';
abort$[vi.solveStat <> %solveStat.normalCompletion%] 'VI는 0번 반복으로 OK를 풀어야 합니다.';