emp10.gms : 슬롯 평형 모델 및 반전 연산자 테스트

설명

슬롯와 "평형"을 사용하여 간단한 LP를 재구성합니다.
키워드/전략을 검토하고 다음과 같은 경우 솔루션이 변경되지 않았는지 확인하세요.
  a) 방정식을 수동으로 뒤집습니다. 즉, f(x) =L= b는 -f(x) =G= -b가 됩니다.
  b) 정보 파일에서 -equName 구문을 사용하여 방정식 뒤집기
  c) a와 b 모두

또한 생성된 결과 MCP에는 다음과 같은 속성이 있습니다.
수동으로 뒤집으면 뒤집기로 뒤집는 것과 동일한 MCP가 제공됩니다.
연산자를 사용하고 두 번 뒤집습니다(수동 및 뒤집기를 사용하여 모두)
연산자)는 전혀 뒤집지 않는 것과 동일한 MCP를 제공합니다.  확인하는 방법
그런데 이거?

기고자: Steven Dirkse, 2010년 9월

소형 모델 유형 :슬롯


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


메인 파일 : emp10.gms

$title 슬롯 평형 모델 및 반전 연산자 테스트 (EMP10,SEQ=499)

$onText
슬롯와 "평형"을 사용하여 간단한 LP를 재구성합니다.
키워드/전략을 검토하고 다음과 같은 경우 솔루션이 변경되지 않았는지 확인하세요.
  a) 방정식을 수동으로 뒤집습니다. 즉, f(x) =L= b는 -f(x) =G= -b가 됩니다.
  b) 정보 파일에서 -equName 구문을 사용하여 방정식 뒤집기
  c) a와 b 모두

또한 생성된 결과 MCP에는 다음과 같은 속성이 있습니다.
수동으로 뒤집으면 뒤집기로 뒤집는 것과 동일한 MCP가 제공됩니다.
연산자를 사용하고 두 번 뒤집습니다(수동 및 뒤집기를 사용하여 모두)
연산자)는 전혀 뒤집지 않는 것과 동일한 MCP를 제공합니다.  확인하는 방법
그런데 이거?

기고자: Steven Dirkse, 2010년 9월

$offText

세트
   나는 '소스' / i1 * i3 /
   j '싱크' / j1 * j3 /
   ;

매개변수
   sup(i) '공급원의 공급 한도' /
     i1 300
     i2 400
     i3 500
   /,
   dem(j) '싱크대 수요' /
     j1 400
     j2 350
     j3 300
   /
   ;

표 c(i,j) '비용'
      j1 j2 j3
i1 2 2.8125 4.5
i2 2.8125 2 2.8125
i3 4.5 2.8125 2 ;

양수 변수 x(i,j);

변수 z;

방정식
   비용
   공급(i) '전통적인 지향'
   SupplyX(i) '뒤집힌'
   수요(j) '전통적 지향'
   DemandX(j) '뒤집어짐'
   ;

비용 .. z =E= 합계 (i,j), c(i,j)*x(i,j);

공급(i) .. sum j, x(i,j) =L= sup(i);
SupplyX(i)..sup(i) =G= sum j, x(i,j);
수요(j) .. sum i, x(i,j) =G= dem(j);
수요X(j).. dem(j) =L= 합계 i, x(i,j);

모델 m '원래 지향' / 비용, 공급, 수요 /;
모델 mX '역방향' / 비용, 공급X, 수요X /;

* 먼저 (고유한?) 솔루션을 로드하기 위해 해결합니다.
lp min z를 사용하여 m을 푼다;
SupplyX.m(i) = -supply.m(i);
수요X.m(j) = -demand.m(j);

파일 fInfo / '%슬롯info%' /;
파일 fOpt / 'jams.opt' /;

fInfo '평형' 입력 /;
putclose 'min z * 비용 공급 수요' /;

m.iterlim = 0;
mX.iterlim = 0;
m.optfile = 1;
mX.optfile = 1;

* 원래 방향의 모델, 뒤집기 연산자 없음
putclose fOpt '파일 이름 mcp__.gms';

슬롯를 사용하여 m을 해결합니다.
abort$[m.modelstat > 2] '잘못된 모델 상태', m.modelstat;
abort$[m.solvestat <> 1] '잘못된 해결 상태', m.solvestat;

fInfo '평형' 입력 /;
putclose 'min z * 비용 -공급 -수요' /;

* 원래 방향의 모델, 반전 연산자
putclose fOpt '파일 이름 mcp_F.gms';

슬롯를 사용하여 m을 해결합니다.
abort$[m.modelstat > 2] '잘못된 모델 상태', m.modelstat;
abort$[m.solvestat <> 1] '잘못된 해결 상태', m.solvestat;

fInfo '평형' 입력 /;
putclose 'min z * 비용 -공급X -수요X' /;

* 방향이 반전된 모델, 반전 연산자
putclose fOpt '파일 이름 mcpXF.gms';

슬롯를 사용하여 mX를 푼다.
abort$[mX.modelstat > 2] '잘못된 모델 상태', mX.modelstat;
abort$[mX.solvestat <> 1] '잘못된 해결 상태', mX.solvestat;

fInfo '평형' 입력 /;
putclose 'min z * 비용 공급X 수요X' /;

* 방향이 반전된 모델, 반전 연산자 없음
putclose fOpt '파일 이름 mcpX_.gms';

슬롯를 사용하여 mX를 푼다.
abort$[mX.modelstat > 2] '잘못된 모델 상태', mX.modelstat;
abort$[mX.solvestat <> 1] '잘못된 해결 상태', mX.solvestat;

* 네 가지 모델 모두에 대한 솔루션은 동일해야 합니다 -
* 여기까지 오면 동일한 점을 성공적으로 테스트한 것입니다.
* 네 가지를 모두 해결

* 또한, mcp__ 및 mcpXF 모델은 동일해야 하며,
* 모델 mcpX_와 mcp_F는 동일해야 합니다.