설명
이 테스트는 명령줄 매개변수 dumpOptGDX의 올바른 동작을 보장합니다. dumpOpt와 함께 사용됩니다. 기고자: Lutz Westermann, 2021년 11월
소형 모델 유형 :피망 슬롯
카테고리 : 피망 슬롯 테스트 라이브러리
메인 파일 : dumpopt2.gms
$title 'dumpOptGDX로 dumpOpt 테스트' (DUMPOPT2,SEQ=884)
$onText
이 테스트는 명령줄 매개변수 dumpOptGDX의 올바른 동작을 보장합니다.
dumpOpt와 함께 사용됩니다.
기고자: Lutz Westermann, 2021년 11월
$offText
$onCheckError레벨
옵션 CheckErrorLevel = 1;
duVals 설정 / 1*4, 11, 21 /
restartRecov(duVals) / 1*4 /
reWriteInput(duVals) / 11, 21 /;
$onEcho > tran1.gms
$title A 운송 문제(TRNSPORT,SEQ=1)
$onText
이 문제는 다음을 충족하는 최소 비용 배송 일정을 찾습니다.
시장의 요구사항과 공장의 공급품.
Dantzig, GB, 3.3장. 선형 프로그래밍 및 확장.
프린스턴 대학 출판부, 뉴저지주 프린스턴, 1963년.
이 공식은 다음에 자세히 설명되어 있습니다.
Rosenthal, RE, 2장: 피망 슬롯 튜토리얼. 피망 슬롯: 사용자 가이드.
Scientific Press, 캘리포니아주 레드우드 시티, 1988년.
이러한 이유로 행 번호는 책의 행 번호와 일치하지 않습니다.
댓글.
키워드: 선형 계획법, 운송 문제, 스케줄링
$offText
* 약간의 복잡성 추가
'안녕하세요'를 표시합니다.
$onEmbeddedCode 파이썬:
통과
$offEmbeddedCode
임베디드 코드 Python:
통과
endEmbeddedCode
파일 FX;
fx를 넣어;
$onPut
xxx
$offPut
세트
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);
모델 운송 / 모두 /;
$offEcho
* 기본 사례 생성: 이는 다른 실행과 비교하고 사용할 재시작 및 GDX 파일을 생성합니다.
$call 피망 슬롯 tran1.gms lo=%피망 슬롯lo% s=base GDX=trans1base
* dumpOptGDX 없음
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 tran1.gms lo=%피망 슬롯lo% dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 tran1.dmp lo=%피망 슬롯lo% GDX=trans1' duVals.tl:0;
put_utility 'shell' / 'gdxdiff trans1base.gdx trans1' duVals.tl:0 '.gdx > %system.nullfile%';
);
* dumpOptGDX 포함
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 tran1.gms lo=%피망 슬롯lo% dumpOptGDX=trans1 dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 tran1.dmp lo=%피망 슬롯lo% GDX=trans1' duVals.tl:0;
put_utility 'shell' / 'gdxdiff trans1base.gdx trans1' duVals.tl:0 '.gdx > %system.nullfile%';
);
$onEcho > tran2.gms
z를 최소화하는 lp를 사용하여 전송을 해결합니다.
$offEcho
* dumpOptGDX 포함 및 포함 없이 복구 다시 시작
루프(duVals$restartRecov(duVals),
put_utility 'shell' / '피망 슬롯 tran2.gms lo=%피망 슬롯lo% r=base dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 tran2.dmp lo=%피망 슬롯lo% GDX=trans2' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 tran2.gms lo=%피망 슬롯lo% r=base dumpOptGDX=trans2 dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 tran2.dmp lo=%피망 슬롯lo% GDX=trans2' duVals.tl:0 'GDX';
put_utility 'shell' / 'gdxdiff trans2' duVals.tl:0 '.gdx trans2' duVals.tl:0 'GDX.gdx > %system.nullfile%';
);
* 일부 구축사례 확인
$onEcho > data1.gms
i / i1*i3/을 설정합니다.
매개변수 a(i) / i1 1
i2 2/;
$onMulti
매개변수 a(i) / i1 0, i3 3/;
스칼라 b / 7 /; 스칼라 b / 77 /;
i / i2*i5/를 설정합니다.
스칼라 y /1/, x;
$on: 그대로
i / i3*i6/을 설정합니다.
$평가 Y Y
$off축어적으로
xx 설정 /x1*x%y%/;
$on: 그대로
$ifThenE %Y%=1
x=1;
$else
x=2;
$endIf
$off축어적으로
$offEcho
* 새로운 기본 케이스 생성
'피망 슬롯 data1.gms lo=%피망 슬롯lo% GDX=database'를 실행합니다.
* dumpOptGDX 없음
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data1.gms lo=%피망 슬롯lo% dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data1.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* dumpOptGDX 포함
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data1.gms lo=%피망 슬롯lo% dumpOptGDX=data dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data1.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* 빈 데이터 문 처리
$onEcho > data2.gms
빈 설정(*);
$gdxOut 테스트.gdx
$unLoad 비어 있음
$gdx아웃
$gdxIn test.gdx
$$load 비어 있음
$gdxIn
테스트 설정(*) / /
테스트2(*) / /
;
내가 설정
비어있음I(i) / /;
$offEcho
* 새로운 기본 케이스 생성
'피망 슬롯 data2.gms lo=%피망 슬롯lo% GDX=database'를 실행합니다.
* dumpOptGDX 없음
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data2.gms lo=%피망 슬롯lo% dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data2.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* dumpOptGDX 포함
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data2.gms lo=%피망 슬롯lo% dumpOptGDX=data dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data2.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* 하위 집합 다루기
$onEcho > data3.gms
i(i) / i1 / 설정;
세트 jj
j(jj);
jj / j1 / 설정;
$offEcho
* 새로운 기본 케이스 생성
'피망 슬롯 data3.gms lo=%피망 슬롯lo% GDX=database'를 실행합니다.
* dumpOptGDX 없음
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data3.gms lo=%피망 슬롯lo% dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data3.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* dumpOptGDX 포함
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data3.gms lo=%피망 슬롯lo% dumpOptGDX=data dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data3.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* 병합된 세트 처리
$onEcho > data4.gms
i를 설정합니다.
매개변수 p(i);
$gdxIn trans1base.gdx
$load i<c.Dim1
$loadM i<c.Dim2
나는 디스플레이;
$offEcho
* 새로운 기본 케이스 생성
'피망 슬롯 data4.gms lo=%피망 슬롯lo% GDX=database'를 실행합니다.
* dumpOptGDX 없음
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data4.gms lo=%피망 슬롯lo% dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data4.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* dumpOptGDX 포함
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data4.gms lo=%피망 슬롯lo% dumpOptGDX=data dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data4.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* 더 많은 테이블
$onEcho > data5.gms
테이블 무작위EmptyTable(*,*),randomDelimTable(*,*)
$onDelim
블리,블라,블럽
t1,123
t2,456
$offDelim
;
$offEcho
* 새로운 기본 케이스 생성
'피망 슬롯 data5.gms lo=%피망 슬롯lo% GDX=database'를 실행합니다.
* dumpOptGDX 없음
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data5.gms lo=%피망 슬롯lo% dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data5.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);
* dumpOptGDX 포함
루프(duVals$reWriteInput(duVals),
put_utility 'shell' / '피망 슬롯 data5.gms lo=%피망 슬롯lo% dumpOptGDX=data dumpOpt=' duVals.tl:0;
put_utility 'shell' / '피망 슬롯 data5.dmp lo=%피망 슬롯lo% GDX=data' duVals.tl:0;
put_utility 'shell' / 'gdxdiff 데이터베이스.gdx 데이터' duVals.tl:0 '.gdx > %system.nullfile%';
);