mpstrans.gms : 교통 문제에 대한 MPS 파일

설명

PUT 문은 선형 프로그래밍을 생성하는 데 사용됩니다.
표준 산업의 문제 TRNSPORT(SEQ=1) 매트릭스
형식은 MPS 파일입니다. 이 파일의 첫 번째 부분은 다음에서 가져왔습니다.
모델 TRNSPORT. 이는 다음을 사용하여 MPS 파일을 작성하도록 제안하는 것이 아닙니다.
메가 슬롯이지만 PUT 문의 사용을 보여주는 방법입니다.

소형 모델 유형 :메가 슬롯


카테고리 : 메가 슬롯 모델 라이브러리


메인 파일 : mpstrans.gms

$title 운송 문제에 대한 MPS 파일(MPSTRANS,SEQ=104)

$onText
PUT 문은 선형 프로그래밍을 생성하는 데 사용됩니다.
표준 산업의 문제 TRNSPORT(SEQ=1) 매트릭스
형식은 MPS 파일입니다. 이 파일의 첫 번째 부분은 다음에서 가져왔습니다.
모델 TRNSPORT. 이는 다음을 사용하여 MPS 파일을 작성하도록 제안하는 것이 아닙니다.
메가 슬롯이지만 PUT 문의 사용을 보여주는 방법입니다.

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

키워드: 수학 프로그래밍 시스템, 선형 프로그래밍, 교통
          문제, 일정
$offText

$eolCom //

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

파일 mps 'mps 입력 파일';

mps.pc = 2;    // 페이지 제어를 스트림 형식으로 설정
mps.case = 1;    // 대문자 파일
mps.nd = 0;    // 기본 소수 자릿수는 0으로 설정됩니다.
mps.nw = 0;    // 기본 숫자 필드 너비는 0입니다 - 가변 길이

* mps 이름을 형성하는 두 가지 다른 방법이 다음을 사용하여 시연됩니다.
* 순서형 인덱스 값과 라벨 이름을 사용한 두 번째 인덱스 값

* mps 이름을 구성하려면 서수 값을 사용하세요.

mps '이름' @15 'trnsport' 입력
      / '행'
      / 'n' @5 '비용';
loop(i, put / ' l' @5 'sup' ord(i));
loop(j, put / ' g' @5 'dem' ord(j));

넣다 / '열';
루프((i,j),
   put / @5 'x' ord(i) ord(j) @15 '비용' @25 c(i,j):12:5
       / @5 'x' ord(i) ord(j) @15 'sup' ord(i) @25 1.0 :12:5
       / @5 'x' ord(i) ord(j) @15 'dem' ord(j) @25 1.0 :12:5;
);

넣다 / 'rhs';
loop(i, put / @5 'rhs' @15 'sup' ord(i) @25 a(i):12:5);
loop(j, put / @5 'rhs' @15 'dem' ord(j) @25 b(j):12:5);
넣다 / '엔데이타';

* 이름을 구성하려면 레이블의 처음 두 문자를 사용하십시오.
mps.nd = 5;   // 기본 소수점은 5입니다.
mps.nw = 12;   // 숫자 필드 너비는 12입니다.
mps.lw = 2;   // 라벨 필드 너비는 2입니다. 처음 두 문자만 사용합니다.

/ '이름' @15 'trnsx' 넣기
      / '행'
            / 'n' @5 'c' ;
loop(i, put / 'l' @5 's' i.tl;);
loop(j, put / ' g' @5 'd..' j.tl;);

넣다 / '열';
루프((i,j),
   넣다 / @5 'x' i.tl j.tl @15 'c' @25 c(i,j)
       / @5 'x' i.tl j.tl @15 's' i.tl @25 1.0
       / @5 'x' i.tl j.tl @15 'd..' j.tl @25 1.0 ;
);

넣다 / 'rhs';
loop(i, put / @5 'rhs' @15 's' i.tl @25 a(i););
loop(j, put / @5 'rhs' @15 'd..' j.tl @25 b(j););
넣다 / '엔데이터';