emp35.gms : JAMS: VI를 사용한 제약 조건 뒤집기 테스트

설명

슬롯 사이트 키워드 VI를 사용하면 다음에 대한 제약 세트를 지정할 수 있습니다.
VI.  그러한 경우, 우리는 다음을 지정하는 방정식을 뒤집을 수 있습니다.
제약 세트.  이렇게 하면 생성된 MCP에서 3가지 항목이 반전됩니다.
  1. 제약 조건 자체(예: Ax >= b는 b <= Ax가 됨)
  2. 반전된 제약 조건에 대한 승수 perp(예: 양의 var에서 음의 var로)
  3. MCP의 NE 모서리에 있는 제약 조건의 비대칭 대칭 반사입니다.

방정식에 대해 보고된 값은 뒤집어도 변경되지 않습니다.
우리는 이것을 아래에서 테스트합니다.

기고자: Steve Dirkse, 2023년 12월

소형 모델 유형 :슬롯 사이트


카테고리 : 슬롯 사이트 테스트 라이브러리


메인 파일 : emp35.gms

$title 'JAMS: VI로 제약 조건 뒤집기 테스트' (EMP35, SEQ=948)

$onText
슬롯 사이트 키워드 VI를 사용하면 다음에 대한 제약 세트를 지정할 수 있습니다.
VI.  그러한 경우, 우리는 다음을 지정하는 방정식을 뒤집을 수 있습니다.
제약 세트.  이렇게 하면 생성된 MCP에서 3가지 항목이 반전됩니다.
  1. 제약 조건 자체(예: Ax >= b는 b <= Ax가 됨)
  2. 반전된 제약 조건에 대한 승수 perp(예: 양의 var에서 음의 var로)
  3. MCP의 NE 모서리에 있는 제약 조건의 비대칭 대칭 반사입니다.

방정식에 대해 보고된 값은 뒤집어도 변경되지 않습니다.
우리는 이것을 아래에서 테스트합니다.

기고자: Steve Dirkse, 2023년 12월
$offText

세트
  j / j1 * j3 /
  나는 / i1 * i2 /
  ;
매개변수
  d(j) /
    j1 1
    j2 1
    j3 1
  /
  b(i) /
    i1 6
    i2 6
  /
  ;
테이블 A(i,j)
    j1 j2 j3
나는1 2 1
i2 1 2 ;

변수
  z
  x(j)
  ;
방정식
  에프
  df(j)
  지(나)
  ;
f..sumj, sqr(x(j)-d(j)) =E= z;
df(j).. 2 * (x(j)-d(j)) =N= 0;
g(i).. sumj, A(i,j)*x(j) =G= b(i);

모델 mnlp / f, g /;
모델 mvi / df, g /;

nlp min z를 사용하여 mnlp를 해결합니다.

파일 myinfo / '%슬롯 사이트info%' /;

putclose myinfo 'vi df x g';
mvi.iterlim = 0;
슬롯 사이트를 사용하여 mvi를 해결합니다.
abort$[mvi.solvestat <> %solveStat.normalCompletion%] 'mvi가 잘 해결될 것으로 예상됩니다.';
abort$[smaxi, abs(g.lo(i) - 6) > 0] '나쁜 g.lo, 예상되는 6', g.lo;
abort$[smaxi, abs(g.L(i) - 6) > 1e-5] '잘못된 g.L, 예상되는 6', g.L;
abort$[smaxi, abs(g.m(i) - 1) > 1e-5] '잘못된 g.m, 예상되는 1', g.m;

putclose myinfo 'vi df x -g';
슬롯 사이트를 사용하여 mvi를 해결합니다.
abort$[mvi.solvestat <> %solveStat.normalCompletion%] '플립을 사용하면 mvi가 잘 풀릴 것으로 예상됩니다.';
* 우리는 보고된 솔루션에서 반전되지 않은 제약 조건 g와 동일한 g 값을 기대합니다.
abort$[smaxi, abs(g.lo(i) - 6) > 0] '나쁜 g.lo, 예상되는 6', g.lo;
abort$[smaxi, abs(g.L(i) - 6) > 1e-5] '잘못된 g.L, 예상되는 6', g.L;
abort$[smaxi, abs(g.m(i) - 1) > 1e-5] '잘못된 g.m, 예상되는 1', g.m;