examin03.gms : EXAMINER 테스트 스위트 - returnInitPoint 옵션 테스트

설명

일반적으로 EXAMINER는 아무런 조치 없이 해결책을 조사하고 보고합니다.
모든 솔루션을 메가 슬롯에 다시 보고합니다.  이 동작은 변경될 수 있습니다.
returnXxxxPoint 옵션을 사용합니다.  모델은 다음을 확인합니다.
returnInitPoint 옵션은 올바른 값을 반환합니다.

기여자: Steve Dirkse

소형 모델 유형 :메가 슬롯


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


메인 파일 : examin03.gms

$title EXAMINER 테스트 스위트 - returnInitPoint 옵션 테스트 (EXAMIN03,SEQ=443)

$onText
일반적으로 EXAMINER는 아무런 조치 없이 솔루션을 검토하고 보고합니다.
모든 솔루션을 메가 슬롯에 다시 보고합니다.  이 동작은 변경될 수 있습니다.
returnXxxxPoint 옵션을 사용합니다.  모델은 다음을 확인합니다.
returnInitPoint 옵션은 올바른 값을 반환합니다.

기여자: Steve Dirkse
$offText

세트
     i 통조림 공장 / 시애틀, 샌디에고 /
     j 마켓 / 뉴욕, 시카고, 토피카 / ;

매개변수

     a(i) 경우에 따라 공장 i의 생산 능력
       /시애틀 350
            샌디에이고 600 /

     b(j) 다음과 같은 경우 시장 j의 수요
       / 뉴욕 325
            시카고 300
            토피카 275 / ;

테이블 d(i,j) 거리(천 마일)
                  뉴욕 시카고 토피카
    시애틀 2.5 1.7 1.8
    샌디에고 2.5 1.8 1.4 ;

스칼라 f 운임(1,000마일당 케이스당 달러) /90/ ;

매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;

          c(i,j) = f * d(i,j) / 1000 ;

변수
     x(i,j) 케이스의 배송 수량
     z 총 운송 비용(단위: 수천 달러);

양수 변수 x ;

방정식
     비용 정의 목적 함수
     공급(i) 공장 i의 공급 제한을 준수합니다.
     수요(j)는 시장 j의 수요를 충족시킵니다.

비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;

공급(i) .. sum(j, x(i,j)) =l= a(i) ;

수요(j) .. sum(i, x(i,j)) =g= b(j) ;

모델 전송 /all/ ;

* 첫 번째 설정 변수 수준 및 방정식 여백
x.l('샌디에고','뉴욕') = 325;
x.l('샌디에고','시카고') = 275;
x.l('시애틀' ,'토피카') = 275;
x.l('시애틀' ,'시카고') = 50;
z.l = 합계(i,j), c(i,j)*x.l(i,j);
비용.m = 1;
공급.m(i) = 0;
수요.m(j) = 0;

* 이제 질문 시 Examiner가 다시 계산할 수량을 설정합니다.
* 가변 한계(예: 비용 절감)
* 방정식 수준이 설정되지 않았습니다. 메가 슬롯는 생성 시 이를 계산합니다.
* 모델
* x.m이 최적으로 보이도록 설정할 수 있지만 일치하지 않는 경우
* x.l 어쨌든 그들은 가짜입니다.
x.m(i,j) = 0;
z.m = 0;

* 이 경우 *실제* x.m과 z.m을 쉽게 계산할 수 있습니다.
스칼라 zm, zmdiff;
매개변수 xm(i,j), xmdiff(i,j);
zm = 0;
xm(i,j) = c(i,j) - 공급.m(i) - 수요.m(j);

$onEcho > 검사관.opt
검사GamsPoint 예
ExamInitPoint 예
returnInitPoint 예
$offEcho

옵션 lp=검사자;
수송.optfile=1;
z 를 최소화하는 lp를 사용하여 전송을 해결합니다.

zmdiff = zm - z.m;
xmdiff(i,j) = xm(i,j) - x.m(i,j);
zm, zmdiff, xm, xmdiff를 표시합니다.
중단$[abs(zmdiff) > 1e-6] '잘못된 z.m';
abort$[smax(i,j), abs(xmdiff(i,j)) > 1e-6] 'bad x.m';