senstran.gms : LOOPS를 이용한 민감도 분석

설명

이 문제는 TRNSPORT에 대한 민감도 분석을 수행합니다.
문제. 기본 모델은 무료 슬롯 사이트 모델에서 가져옵니다.
도서관. 각 변형에 대해 별도의 모델이 해결됩니다.
운송 비용 매트릭스. 각 링크의 운송 비용이 인상됩니다.
30% 감소했으며 배송 패턴은 다음 중 하나입니다.
무료 슬롯 사이트 데이터 테이블에 저장되거나 추가 분석을 위해 파일에 기록됩니다.
통계 시스템에 의해.

소형 모델 유형 :LP


카테고리 : 무료 슬롯 사이트 모델 라이브러리


메인 파일 : senstran.gms

$title LOOPS를 이용한 민감도 분석(SENSTRAN,SEQ=106)

$onText
이 문제는 TRNSPORT에 대한 민감도 분석을 수행합니다.
문제. 기본 모델은 무료 슬롯 사이트 모델에서 가져옵니다.
도서관. 각 변형에 대해 별도의 모델이 해결됩니다.
운송 비용 매트릭스. 각 링크의 운송 비용이 인상됩니다.
30% 감소했으며 배송 패턴은 다음 중 하나입니다.
무료 슬롯 사이트 데이터 테이블에 저장되거나 추가 분석을 위해 파일에 기록됩니다.
통계 시스템에 의해.

Dantzig, GB, 3.3장. 선형 프로그래밍 및 확장.
프린스턴 대학 출판부, 뉴저지주 프린스턴, 1963년.

키워드: 선형 계획법, 민감도 분석, 선형 계획법,
          교통 문제, 일정
$offText

세트
   i '통조림 식물' / 시애틀, 샌디에고 /
   j 'markets' / 뉴욕, 시카고, 토피카 /;

매개변수
   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;

방정식
   비용 '목적 함수 정의'
   Supply(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);

모델 운송 / 모두 /;

trnsport의 $sTitle 민감도 부분
$eolCom //

별칭 (i,ip), (j,jp);

스칼라
   sens '감도 값' / .3 /
   pors '옵션을 넣거나 저장함 save = 0 put = 1' / 0 /
   카운터 '최대 문제 수' / 2 /;

매개변수 보고서(*,ip,jp,i,j) '요약 결과';
File repdat '민감도 데이터 보고서 파일';

옵션 limCol = 0, limRow = 0, solPrint = off;

포르 = 1;    // '파일 쓰기'
카운터 = 2;    // '모든 문제를 실행하려면 inf로 설정하세요.'

if(포르스,
   repdat.nw = 5;
   담당자.nd = 0;
   담당자.lw = 11;
   put repdat "낮음/높음 i j x(i,j)" /;
);

카운터 = 10;
loop((ip,jp)$counter, counter = counter - 1;
   c(ip,jp) = c(ip,jp)*(1-sens);              // 셀 줄이기
   z를 최소화하는 lp를 사용하여 전송을 해결합니다.     // 모델 해결
   if(포르스,
      넣다 / "낮음",ip.tl,jp.tl;          // 쓰기
      loop((i,j), // 해결책
         x.l(i,j)를 넣으세요;                        // 한 줄에 하나씩 해결
      );
   그렇지 않으면
      보고서("낮음",ip,jp,i,j) = x.l(i,j);     // 결과 저장
   );
   c(ip,jp) = c(ip,jp)/(1 - 센스)*(1 + 센스); // 셀 증가
   z를 최소화하는 lp를 사용하여 전송을 해결합니다.     // 모델 해결
   c(ip,jp) = c(ip,jp)/(1 + 센스);            // 셀 재설정
   if(포르스,
      넣다 / "높음",ip.tl,jp.tl;          // 쓰기
      loop((i,j), // 해결책
         x.l(i,j))를 넣습니다.                       // 한 줄에 하나씩 해결
   그렇지 않으면
      report("high",ip,jp,i,j) = x.l(i,j) // 결과 저장
   );
   if(por이 아님,
      옵션 보고서:3:3:2;
      보고서 표시;
   );
);