설명
최적화 후 민감도(또는 슬롯 사이트 지정) 정보의 GMS/GDX 내보내기 테스트 이 기능을 지원하는 솔버의 수입니다. 기고자: Renke Kuhlmann, 2020년 10월
소형 모델 유형 :슬롯 사이트
카테고리 : 슬롯 사이트 테스트 라이브러리
메인 파일 : 슬롯 사이트.gms
$title '민감도 / 범위 테스트' (SENS01,SEQ=833)
$if not '%슬롯 사이트lp%' == '' $set 솔버 %슬롯 사이트lp%
$설정되지 않은 경우 솔버 $set 솔버 cplex
$onText
최적화 이후 민감도(또는 범위 지정) 정보의 GMS/GDX 내보내기를 테스트합니다.
이 기능을 지원하는 솔버의 수입니다.
기고자: Renke Kuhlmann, 2020년 10월
$offText
$call gamslib -q 1
$include trnsport.gms
$ifThenI %solver% == 구로비
$에코 감도 1 > %solver%.opt
$elseIfI %solver% == 구로비올드
$에코 감도 1 > %solver%.opt
$elseIfI %solver% == 복잡함
$echo rhsrng 모두 > %solver%.opt
$echo objrng all >> %solver%.opt
$echo bdrng 모두 >> %solver%.opt
$elseIfI %solver% == 최고
$echo 감도 = 1 > %solver%.opt
$else
$abort '민감도 분석을 지원하는 솔버 선택';
$endIf
$call =슬롯 사이트 trnsport lo=%슬롯 사이트lo% 솔버=%solver% optfile=1
$call =grep -q "LOWER.*CURRENT.*UPPER" "trnsport.lst"
$if errorlevel 1 $abort 'lst 파일의 obj/rhsrng 옵션에 문제가 있습니다.';
$ifThenI %solver% == 최고
$call =grep -q "공급(시애틀) *300 *350 *350" "trnsport.lst"
$if errorlevel 1 $abort 'lst 파일의 방정식 rhs 범위에 문제가 있습니다.';
$call =grep -q "x(시애틀,뉴욕) *0 *0 *50" "trnsport.lst"
$if errorlevel 1 $abort 'lst 파일의 하한 범위 문제';
$else
$call =grep -q "cost.*-INF.*NA.*INF" "trnsport.lst"
$if errorlevel 1 $abort 'lst 파일의 obj/rhsrng 옵션에 문제가 있습니다.';
$call =grep -q "z.*-INF.*NA.*INF" "trnsport.lst"
$if errorlevel 1 $abort 'lst 파일의 obj/rhsrng 옵션에 문제가 있습니다.';
$endIf
$ifThenI %solver% == 구로비
$에코 감도 1 > %solver%.opt
$echo rngrestart rng.gms >> %solver%.opt
$elseIfI %solver% == 구로비올드
$에코 감도 1 > %solver%.opt
$echo rngrestart rng.gms >> %solver%.opt
$elseIfI %solver% == 복잡함
$echo rhsrng 모두 > %solver%.opt
$echo objrng all >> %solver%.opt
$echo bdrng 모두 >> %solver%.opt
$echo rngrestart rng.gms >> %solver%.opt
$elseIfI %solver% == 최고
$abort.noError '게임/하이에 대해 rngrestart가 구현되지 않았습니다.'
$else
$abort '민감도 분석을 지원하는 솔버 선택';
$endIf
$call =슬롯 사이트 trnsport lo=%슬롯 사이트lo% 솔버=%solver% optfile=1
$ifThenI %solver% == 구로비
$에코 감도 1 > %solver%.opt
$echo rngrestart rng.gdx >> %solver%.opt
$elseIfI %solver% == 구로비올드
$에코 감도 1 > %solver%.opt
$echo rngrestart rng.gdx >> %solver%.opt
$elseIfI %solver% == 복잡함
$echo rhsrng 모두 > %solver%.opt
$echo objrng all >> %solver%.opt
$echo bdrng 모두 >> %solver%.opt
$echo rngrestart rng.gdx >> %solver%.opt
$else
$abort '민감도 분석을 지원하는 솔버 선택';
$endIf
$call =슬롯 사이트 trnsport lo=%슬롯 사이트lo% 솔버=%solver% optfile=1
RNGLIM / LO, CUR, UP / 설정;
$include rng.gms
abort$(cost_RHSRNG('LO') <> -INF 또는 cost_RHSRNG('UP') <> INF) '잘못된 범위 값(cost_RHSRNG)';
abort$(sum(i, 공급_RHSRNG(i,'LO') > 공급_RHSRNG(i,'CUR') 또는 공급_RHSRNG(i,'CUR') > 공급_RHSRNG(i,'UP'))) '잘못된 범위 지정 값(공급_RHSRNG)';
abort$(sum(j,demand_RHSRNG(j,'LO') >demand_RHSRNG(j,'CUR') 또는demand_RHSRNG(j,'CUR')>demand_RHSRNG(j,'UP'))) '잘못된 범위 지정 값(demand_RHSRNG)';
abort$(sum((i,j), x_OBJRNG(i,j,'LO') > x_OBJRNG(i,j,'CUR') 또는 x_OBJRNG(i,j,'CUR') > x_OBJRNG(i,j,'UP'))) '거짓 범위 지정 값(x_OBJRNG)';
abort$(z_OBJRNG('LO') <> -INF 또는 z_OBJRNG('UP') <> INF) '잘못된 범위 값(z_OBJRNG)';
abort$(sum((i,j), x_LBRNG(i,j,'LO') > x_LBRNG(i,j,'CUR') 또는 x_LBRNG(i,j,'CUR') > x_LBRNG(i,j,'UP'))) '잘못된 범위 지정 값(x_LBRNG)';
abort$(z_LBRNG('LO') <> -INF 또는 z_LBRNG('UP') <> INF) '잘못된 범위 값(z_LBRNG)';
abort$(sum((i,j), x_UBRNG(i,j,'LO') > x_UBRNG(i,j,'CUR') 또는 x_UBRNG(i,j,'CUR') > x_UBRNG(i,j,'UP'))) '잘못된 범위 값(x_UBRNG)';
abort$(z_UBRNG('LO') <> -INF 또는 z_UBRNG('UP') <> INF) '잘못된 범위 값(z_UBRNG)';
매개변수 비용_RHSRNG2(RNGLIM), 공급_RHSRNG2(i,RNGLIM), 수요_RHSRNG2(j,RNGLIM),
x_OBJRNG2(i,j,RNGLIM), z_OBJRNG2(RNGLIM), x_LBRNG2(i,j,RNGLIM), z_LBRNG2(RNGLIM),
x_UBRNG2(i,j,RNGLIM), z_UBRNG2(RNGLIM);
비용_RHSRNG2(RNGLIM) = 비용_RHSRNG(RNGLIM);
공급_RHSRNG2(i,RNGLIM) = 공급_RHSRNG(i,RNGLIM);
수요_RHSRNG2(j,RNGLIM) = 수요_RHSRNG(j,RNGLIM);
x_OBJRNG2(i,j,RNGLIM) = x_OBJRNG(i,j,RNGLIM);
z_OBJRNG2(RNGLIM) = z_OBJRNG(RNGLIM);
x_LBRNG2(i,j,RNGLIM) = x_LBRNG(i,j,RNGLIM);
z_LBRNG2(RNGLIM) = z_LBRNG(RNGLIM);
x_UBRNG2(i,j,RNGLIM) = x_UBRNG(i,j,RNGLIM);
z_UBRNG2(RNGLIM) = z_UBRNG(RNGLIM);
비용_RHSRNG(RNGLIM) = NA;
공급_RHSRNG(i,RNGLIM) = NA;
수요_RHSRNG(j,RNGLIM) = NA;
x_OBJRNG(i,j,RNGLIM) = NA;
z_OBJRNG(RNGLIM) = NA;
x_LBRNG(i,j,RNGLIM) = NA;
z_LBRNG(RNGLIM) = NA;
x_UBRNG(i,j,RNGLIM) = NA;
z_UBRNG(RNGLIM) = NA;
실행_로드 'rng.gdx', 비용_RHSRNG, 공급_RHSRNG, 수요_RHSRNG, x_OBJRNG, z_OBJRNG, x_LBRNG, z_LBRNG, x_UBRNG, z_UBRNG;
abort$(cost_RHSRNG('LO') <> -INF 또는 cost_RHSRNG('UP') <> INF) '잘못된 범위 값(cost_RHSRNG)';
abort$(sum(i, 공급_RHSRNG(i,'LO') > 공급_RHSRNG(i,'CUR') 또는 공급_RHSRNG(i,'CUR') > 공급_RHSRNG(i,'UP'))) '잘못된 범위 지정 값(공급_RHSRNG)';
abort$(sum(j,demand_RHSRNG(j,'LO') >demand_RHSRNG(j,'CUR') 또는demand_RHSRNG(j,'CUR')>demand_RHSRNG(j,'UP'))) '잘못된 범위 지정 값(demand_RHSRNG)';
abort$(sum((i,j), x_OBJRNG(i,j,'LO') > x_OBJRNG(i,j,'CUR') 또는 x_OBJRNG(i,j,'CUR') > x_OBJRNG(i,j,'UP'))) '거짓 범위 지정 값(x_OBJRNG)';
abort$(z_OBJRNG('LO') <> -INF 또는 z_OBJRNG('UP') <> INF) '잘못된 범위 값(z_OBJRNG)';
abort$(sum((i,j), x_LBRNG(i,j,'LO') > x_LBRNG(i,j,'CUR') 또는 x_LBRNG(i,j,'CUR') > x_LBRNG(i,j,'UP'))) '잘못된 범위 지정 값(x_LBRNG)';
abort$(z_LBRNG('LO') <> -INF 또는 z_LBRNG('UP') <> INF) '잘못된 범위 값(z_LBRNG)';
abort$(sum((i,j), x_UBRNG(i,j,'LO') > x_UBRNG(i,j,'CUR') 또는 x_UBRNG(i,j,'CUR') > x_UBRNG(i,j,'UP'))) '잘못된 범위 값(x_UBRNG)';
abort$(z_UBRNG('LO') <> -INF 또는 z_UBRNG('UP') <> INF) '잘못된 범위 값(z_UBRNG)';
abort$(cost_RHSRNG('LO') <> cost_RHSRNG2('LO') 또는 cost_RHSRNG('CUR') <> cost_RHSRNG2('CUR') 또는 cost_RHSRNG('UP') <> cost_RHSRNG2('UP')) '잘못된 범위 지정 값(cost_RHSRNG)';
abort$(sum(i, 공급_RHSRNG(i,'LO') <> 공급_RHSRNG2(i,'LO') 또는 공급_RHSRNG(i,'CUR') <> 공급_RHSRNG2(i,'CUR') 또는 공급_RHSRNG(i,'UP') <> 공급_RHSRNG2(i,'UP'))) '잘못된 범위 지정 값(공급_RHSRNG)';
abort$(sum(j,demand_RHSRNG(j,'LO') <>demand_RHSRNG2(j,'LO') 또는demand_RHSRNG(j,'CUR')<>demand_RHSRNG2(j,'CUR')또는demand_RHSRNG(j,'UP')<>demand_RHSRNG2(j,'UP'))) '잘못된 범위 지정 값(demand_RHSRNG)';
abort$(sum((i,j), x_OBJRNG(i,j,'LO') <> x_OBJRNG2(i,j,'LO') 또는 x_OBJRNG(i,j,'CUR') <> x_OBJRNG2(i,j,'CUR') 또는 x_OBJRNG(i,j,'UP') <> x_OBJRNG2(i,j,'UP'))) '잘못된 범위 지정 값(x_OBJRNG)';
abort$(z_OBJRNG('LO') <> z_OBJRNG2('LO') 또는 z_OBJRNG('CUR') <> z_OBJRNG2('CUR') 또는 z_OBJRNG('UP') <> z_OBJRNG2('UP')) '잘못된 범위 지정 값(z_OBJRNG)';
abort$(sum((i,j), x_LBRNG(i,j,'LO') <> x_LBRNG2(i,j,'LO') 또는 x_LBRNG(i,j,'CUR') <> x_LBRNG2(i,j,'CUR') 또는 x_LBRNG(i,j,'UP') <> x_LBRNG2(i,j,'UP'))) '거짓 범위 지정 값 (x_LBRNG)';
abort$(z_LBRNG('LO') <> z_LBRNG2('LO') 또는 z_LBRNG('CUR') <> z_LBRNG2('CUR') 또는 z_LBRNG('UP') <> z_LBRNG2('UP')) '잘못된 범위 지정 값(z_LBRNG)';
abort$(sum((i,j), x_UBRNG(i,j,'LO') <> x_UBRNG2(i,j,'LO') 또는 x_UBRNG(i,j,'CUR') <> x_UBRNG2(i,j,'CUR') 또는 x_UBRNG(i,j,'UP') <> x_UBRNG2(i,j,'UP'))) '잘못된 범위 지정 값 (x_UBRNG)';
abort$(z_UBRNG('LO') <> z_UBRNG2('LO') 또는 z_UBRNG('CUR') <> z_UBRNG2('CUR') 또는 z_UBRNG('UP') <> z_UBRNG2('UP')) '잘못된 범위 지정 값(z_UBRNG)';