ibm1.gms : 알루미늄 합금 제련소 샘플 문제

설명

이 간단한 합금 제련소 혼합 문제는 입문용으로 사용됩니다.
여러 mpsx 매뉴얼의 예입니다.

소형 모델 유형 :LP


카테고리 : 슬롯 머신 모델 라이브러리


메인 파일 : ibm1.gms

$title 알루미늄 합금 제련소 샘플 문제(IBM1,SEQ=79)

$onText
이 간단한 합금 제련소 혼합 문제는 입문용으로 사용됩니다.
여러 mpsx 매뉴얼의 예.

IBM, MPSX/370 입문서. 기술. 대표, IBM, 1979.

키워드: 선형 계획법, 혼합 문제, 시나리오 분석, 화학 공학
$offText

세트
   '혼합용 고철' / bin-1*bin-5, 알루미늄, 실리콘 /
   sl(s) '로컬에서 사용 가능한 블렌드' / bin-1*bin-5 /
   e '화학 원소' / 철, 구리, 망간, 마그네슘
                                       알루미늄, 실리콘 /

테이블 bspec(e,*) '혼합 사양(2000lb 주괴의 경우 lb)'
                  최대 최소
   철 60
   구리 100
   망간 40
   마그네슘 30
   알루미늄 INF 1500
   실리콘 300 250;

테이블 소품(e,s) '화학적 특성(비율)'
                  bin-1 bin-2 bin-3 bin-4 bin-5 알루미늄 실리콘
   철 .15 .04 .02 .04 .02 .01 .03
   구리 .03 .05 .08 .02 .06 .01
   망간 .02 .04 .01 .02 .02
   마그네슘 .02 .03 .01
   알루미늄 .70 .75 .80 .75 .80 .97
   실리콘 .02 .06 .08 .12 .02 .01 .97;

매개변수 dcheck(s) 'prop(prop)의 다른 요소';
dcheck(s) = 1 - sum(e, prop(e,s));
디스플레이 dcheck;

테이블 공급(들,*) '공급 및 비용 데이터'
                재고 최소 사용 비용
* (파운드) (파운드) ($/파운드)
   빈-1 200 .03
   빈-2 750 .08
   빈-3 800 400 .17
   빈-4 700 100 .12
   빈-5 1500 .15
   알루미늄 INF .21
   실리콘 INF .38;

변수
   x(s) '혼합 성분(lb)'
   bc(e) '혼합 원소(lb)'
   비용 '총 재료비($)';

방정식
   수율 '최종 혼합 요구 사항(lb)'
   ebal(e) '원소 균형(lb)'
   cdef '비용 정의($)';

수율.. sum(s, x(s)) =e= 2000;

ebal(e).. bc(e) =e= sum(s, prop(e,s)*x(s));

cdef..cost =e= sum(s, sup(s,"cost")*x(s));

모델 합금 '합금 혼합 모델' / 모두 /;

x.lo(s) = sup(s,"최소 사용");
x.up(s) = sup(s,"인벤토리");
bc.lo(e) = bspec(e,"최소");
bc.up(e) = bspec(e,"최대");

매개변수 보고서(들,*) '혼합 결과';

lp를 사용하여 합금 최소화 비용을 해결합니다.
보고서(들,"run-1") = x.l(s);

옵션 solPrint = 꺼짐, limCol = 0, limRow = 0;

prop("철","실리콘") = .02;
prop("실리콘","실리콘") = .98;
lp를 사용하여 합금 최소화 비용을 해결합니다.
보고서(들,"run-2") = x.l(s);

prop("철","실리콘") = .01;
prop("실리콘","실리콘") = .99;
lp를 사용하여 합금 최소화 비용을 해결합니다.
보고서(들,"run-3") = x.l(s);

prop("철","실리콘") = 0;
prop("실리콘","실리콘") = 1.0;
옵션 solPrint = 켜짐;
lp를 사용하여 합금 최소화 비용을 해결합니다.
보고서(들,"run-4") = x.l(s);

보고서 표시;

매개변수 costrep '2000lb 배치에 대한 비용 보고서 예시';
costrep(s ,"비용") = sup(s,"비용");
costrep(s ,"수량") = x.l(s);
costrep(s ,"c-cost ") = costrep(s,"비용")*costrep(s,"수량");
costrep("**총계**","c-cost ") = sum(s, costrep(s,"c-cost"));

디스플레이 비용;

* ecl 매뉴얼에 따른 슬롯 머신의 반올림 기능을 보여줍니다.
매개변수
   xr(s) '반올림된 해 값'
   xr3(s) '소수점 세 번째 자리에서 숫자 오류 반올림'
   num '반올림된 솔루션 카운터';

xr(s) = round(x.l(s));
xr3(s) = round(x.l(s),3);
숫자 = 0;

loop(s$(xr(s) <> xr3(s) 및 num < 2),
   x.lo(s)$(xr(s) > xr3(s)) = xr(s);
   x.up(s)$(xr(s) < xr3(s)) = xr(s);
   숫자 = 숫자 + 1;
);

lp를 사용하여 비용을 최소화하는 합금을 해결합니다.