indic04.gms : 명시적 라벨을 사용한 표시기 제약 조건 테스트

설명

표시기가 색인화되어 지정되는 테스트 표시기 제약 조건
명시적 레이블을 사용하는 방정식 및 변수.

이것은 고정 전하 운송 문제의 두 번째 모델입니다.
/latest/docs/UG_LanguageFeatures.html#UG_LanguageFeatures_IndicatorConstraintsExample

제공: Stefan Vigerske, 2014년 8월

대형 모델 유형 :MIP


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


메인 파일 : indic04.gms

$title 명시적 레이블이 있는 표시기 제약 조건 테스트(INDIC04,SEQ=663)

$onText
지표가 인덱스로 지정되는 테스트 지표 제약 조건
명시적 레이블을 사용하는 방정식 및 변수.

이것은 고정 전하 운송 문제의 두 번째 모델입니다.
/latest/docs/UG_LanguageFeatures.html#UG_LanguageFeatures_IndicatorConstraintsExample

작성자: Stefan Vigerske, 2014년 8월
$offText

$title 표시 제약으로 인한 고정 요금 운송 문제

세트
    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 ;

매개변수 fixcost(i,j) 고정 비용(단위: 수천 달러) ;

         고정비용(i,j) = 10*d(i,j) / 1000 ;

스칼라 최소 배송 케이스/100/;

변수
    x(i,j) 케이스의 배송 수량
    use(i,j)는 arc가 솔루션에 사용되는 경우 1입니다.
    z 총 운송 비용(단위: 수천 달러);

양수 변수 x;
바이너리 변수 사용;

방정식
    비용 정의 목적 함수
    공급(i) 공장 i의 공급 제한을 준수합니다.
    수요(j)는 시장 j의 수요를 충족시킵니다.
    iminship(i,j) 최소 배송 보장
    imaxship(i,j)는 사용 변수가 0인 경우 배송이 0이 되도록 보장합니다.

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

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

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

iminship(i,j).. x(i,j) =g= minshipping;

imaxship(i,j).. x(i,j) =e= 0;

모델 표시모델 /all/ ;

* COPT에 대한 표시기 옵션 파일 작성
파일 fcopt COPT 옵션 파일 / copt.opt /;
루프((i,j),
  put fcopt 'indic' iminship.tn(i,j) '$' use.tn(i,j) 예
          / 'indic' imaxship.tn(i,j) '$' use.tn(i,j) no / );
putclose fcopt;

* CPLEX용 표시기 옵션 파일 쓰기
file fcpx Cplex 옵션 파일 / cplex.opt /;
루프((i,j),
  put fcpx 'indic' iminship.tn(i,j) '$' use.tn(i,j) 예
         / 'indic' imaxship.tn(i,j) '$' use.tn(i,j) no / );
putclose fcpx;

* GUROBI용 인디케이터 옵션 파일 작성
file fgrb 구로비 옵션 파일 / gurobi.opt /;
루프((i,j),
  put fgrb 'indic' iminship.tn(i,j) '$' use.tn(i,j) 예
         / 'indic' imaxship.tn(i,j) '$' use.tn(i,j) no / );
putclose fgrb;

* GUROBIOLD에 대한 표시기 옵션 파일 쓰기
file fgrbo 구로비 옵션 파일 / gurobiold.opt /;
루프((i,j),
  put fgrbo 'indic' iminship.tn(i,j) '$' use.tn(i,j) 예
         / 'indic' imaxship.tn(i,j) '$' use.tn(i,j) no / );
putclose fgrbo;

* XPRESS용 표시기 옵션 파일 쓰기
파일 fxpr Xpress 옵션 파일 / xpress.opt /;
루프((i,j),
  put fxpr 'indic' iminship.tn(i,j) '$' use.tn(i,j) 예
         / 'indic' imaxship.tn(i,j) '$' use.tn(i,j) no / );
putclose fxpr;

* XPRESSOLD용 표시기 옵션 파일 쓰기
파일 fxpro Xpress 옵션 파일 / xpressold.opt /;
루프((i,j),
  fxpro 'indic' iminship.tn(i,j) '$' use.tn(i,j) 예
         / 'indic' imaxship.tn(i,j) '$' use.tn(i,j) no / );
putclose fxpro;

* SCIP용 표시기 옵션 파일 쓰기
file fscip SCIP 옵션 파일 / scip.opt /;
fscip을 넣어 '무료 슬롯/indicatorfile = "cplex.opt"' /;
putclose fscip;

표시기모델.optfile = 1;
옵션 limrow=0, limcol=0, optcr=0;
z를 최소화하는 mip를 사용하여 IndicatorModel을 해결합니다.

abort$(indicatorModel.modelstat <> %modelStat.optimal%) '최적성으로 해결되지 않음'
abort$(abs(z.l - 153.7310) > 1e-6) '잘못된 최적 값'