badmip.gms : MIP의 반올림 문제

설명

대부분의 혼합 정수 솔버는 선형 프로그래밍 엔진을 기반으로 합니다.
부동 소수점 연산을 사용합니다. 가끔 이로 인해
잘못된 해결책. 이 예에서는 많은 MIP 솔버가 실패했습니다.

Neumaier와 Shcherbina는 이를 극복하기 위한 절차를 제안했습니다.
이 문제. 아래 MIP에는 실행 가능한 공간이 있어야 합니다.
이는 하나의 단일 지점일 뿐이며 편안한 솔루션은 멀습니다.
정수 솔루션에서 벗어나십시오. 대부분의 MIP 코드는 다음과 같은 경우 실패합니다.
변수의 상한이 큽니다. 실제로는 이
정수 변수에 대해 엄격한 상한을 사용하여 극복할 수 있습니다.
좋은 휴식을 취하기 위해. 풀린 문제를 보면
더 많은 통찰력을 제공할 것입니다.

소형 모델 유형 :MIP


카테고리 : 슬롯 사이트 추천 모델 라이브러리


메인 파일 : badmip.gms

$title MIP 반올림 문제(BADMIP,SEQ=290)

$onText
대부분의 혼합 정수 솔버는 선형 계획법 엔진을 기반으로 합니다.
부동 소수점 연산을 사용합니다. 가끔 이로 인해
잘못된 해결책. 이 예에서는 많은 MIP 솔버가 실패했습니다.

Neumaier와 Shcherbina는 이를 극복하기 위한 절차를 제안했습니다.
이 문제. 아래 MIP에는 실행 가능한 공간이 있어야 합니다.
이는 하나의 단일 지점일 뿐이며 편안한 솔루션은 멀습니다.
정수 솔루션에서 벗어나십시오. 대부분의 MIP 코드는 다음과 같은 경우 실패합니다.
변수의 상한이 큽니다. 실제로는 이
정수 변수에 대해 엄격한 상한을 사용하여 극복할 수 있습니다.
좋은 휴식을 취하기 위해. 풀린 문제를 보면
더 많은 통찰력을 제공할 것입니다.

Neumaier, A 및 Shcherbina, O, 선형 및 안전 경계
혼합 정수 프로그래밍. 수학적 계획법 A 등장, (2003)

키워드: 혼합 정수 선형 계획법, 반올림 오류, 부동 소수점 연산,
          혼합 정수 반올림
$offText

세트
   나는 / 1*20 /
   ii(i) / 2*19 /;

스칼라 s / 6 /;

변수 obj, x(i);

정수 변수 x;

방정식 eq1, eq2(i), eq3, defobj;

eq1..(s+1)*x('1') - x('2') =g= s - 1;

eq2(ii(i)).. -s*x(i-1) + (s+1)*x(i) - x(i+1) =g= power(-1,ord(i))*(s+1);

eq3.. -s*x('18') - (3*s-1)*x('19') + 3*x('20') =g= -(5*s-7);

defobj..obj =e= - x('20');

모델 m / 모두 /;

x.up(i)$(ord(i) <= 13) = 10;
x.up(i)$(ord(i) >= 14) = 1e6;

m.limCol = 0;
m.limRow = 0;

mip min obj를 사용하여 m을 해결합니다.

매개변수
   sol(i) '단일 포인트 솔루션'
   diff(i) '알려진 솔루션과의 차이점';

sol(i) = round(2 - mod(ord(i),2));

if(m.modelStat = %modelStat.optimal% 또는
   m.modelStat = %modelStat.integerSolution%,
   diff(i) = round(x.l(i) - sol(i),6);
   if(카드(차이) = 0,
      '올바른 해결책을 찾았습니다. 축하합니다'를 표시합니다.
   그렇지 않으면
      '해법이 잘못되었습니다' 표시, sol;
      abort$1 'MIP에서 잘못된 솔루션을 찾았습니다.';
   );
그렇지 않으면
   rmip min obj를 사용하여 m을 해결합니다.
   abort$1 'MIP 실패';
);