설명
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););
넣다 / '엔데이터';