설명
보통 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를 풀어야 합니다.';