foodemp.gms : 식품 제조 문제 - 오일 혼합

설명

문제는 다섯 종류의 기름을 두 가지로 구성하여 혼합하는 계획을 세우는 것입니다.
카테고리 (식물성 기름 2종, 비식물성 기름 3종)
6개월에 걸쳐 혼합 제품으로 분류됩니다.

일부 오일은 이미 저장되어 있습니다. 초기 재고가 있습니다.
계획이 시작되면 각 원료 유형별로 500톤의 석유를 생산합니다. 동등한 주식이어야합니다
계획이 끝나면 저장소에 존재합니다. 각 유형의 원유 최대 1000톤
나중에 사용하기 위해 매달 저장할 수 있습니다. 원유 보관 가격은
톤당 5 화폐 단위. 정제된 기름은 보관할 수 없습니다. 블렌딩된 제품
저장도 안 됩니다.

나머지 오일(즉, 보관할 수 없는 오일)은 현지에서 구입해야 합니다.
혼합 요구 사항을 충족하는 수량. 기름 종류별 가격
6개월 기간에 따라 달라집니다.

두 종류의 오일을 동일한 생산 라인에서 정제할 수 없습니다.
각 카테고리(식물성 또는 비식물성)의 기름 양에는 제한이 있습니다.
특정 달에 구체화할 수 있습니다.
 - 식물성 기름은 월 200톤 이상 정제할 수 없습니다.
 - 비식물성유는 월 250톤 이하로 정제할 수 있습니다.

오일 혼합에는 다음과 같은 제약이 있습니다.
 - 본 제품은 3가지 이상의 오일을 혼합할 수 없습니다.
 - 특정 종류의 오일을 제품에 혼합할 경우 최소 20톤 이상
   해당 유형을 사용해야 합니다.
 - 식물성 오일 1(v1) 또는 식물성 오일 2(v2) 중 하나를 블렌딩하는 경우
   그런 다음 해당 제품에는 비식물성유 3(o3)도 혼합해야 합니다.

최종 제품(정제 및 혼합)은 알려진 가격으로 판매됩니다.
톤당 150 화폐 단위.

6개월 계획의 목표는 생산 및 보관 비용을 최소화하는 것입니다.
이익을 극대화합니다.

소형 모델 유형 :논리적


카테고리 : 슬롯 커뮤니티 EMP 라이브러리


메인 파일 : foodemp.gms

$title 식품 제조 문제 - 오일 혼합(FOODEMP,SEQ=59)

$onText
문제는 다섯 가지 오일을 두 가지로 구성하여 블렌딩을 계획하는 것입니다.
카테고리 (식물성 기름 2종, 비식물성 기름 3종)
6개월에 걸쳐 혼합 제품으로 분류됩니다.

일부 오일은 이미 저장되어 있습니다. 초기 재고가 있습니다.
계획이 시작되면 각 원료 유형별로 500톤의 석유를 생산합니다. 동등한 주식이어야합니다
계획이 끝나면 저장소에 존재합니다. 각 유형의 원유 최대 1000톤
나중에 사용하기 위해 매달 저장할 수 있습니다. 원유 보관 가격은
톤당 5 화폐 단위. 정제된 기름은 보관할 수 없습니다. 블렌딩된 제품
저장도 안 됩니다.

나머지 오일(즉, 보관할 수 없는 오일)은 현지에서 구입해야 합니다.
혼합 요구 사항을 충족하는 수량. 기름 종류별 가격
6개월 기간에 따라 달라집니다.

두 종류의 오일을 동일한 생산 라인에서 정제할 수 없습니다.
각 카테고리(식물성 또는 비식물성)의 기름 양에는 제한이 있습니다.
특정 달에 구체화할 수 있습니다.
 - 식물성 기름은 월 200톤 이상 정제할 수 없습니다.
 - 비식물성유는 월 250톤 이하로 정제할 수 있습니다.

오일 혼합에는 다음과 같은 제약이 있습니다.
 - 본 제품은 3가지 이상의 오일을 혼합할 수 없습니다.
 - 특정 종류의 오일을 제품에 혼합할 경우 최소 20톤 이상
   해당 유형을 사용해야 합니다.
 - 식물성 오일 1(v1) 또는 식물성 오일 2(v2) 중 하나를 블렌딩하는 경우
   그런 다음 해당 제품에는 비식물성유 3(o3)도 혼합해야 합니다.

최종 제품(정제 및 혼합)은 알려진 가격으로 판매됩니다.
톤당 150 화폐 단위.

6개월 계획의 목표는 생산 및 보관 비용을 최소화하는 것입니다.
이익 극대화.

이 예는 Cplex 12 사용자 매뉴얼에서 가져온 것입니다.
(ILOG, Cplex 12 사용자 매뉴얼, 2009)

Williams, HP, 수학적 계획법 모델 구축. 존 와일리
그리고 아들들, 1978.

기고자: Jan-Hendrik Jagla, 2011년 1월
$offText

m 대패 기간 설정 / m1*m6 /
     p 원유 / v1*v2, o1*o3 /
     pv(p) 식물성 기름 / v1*v2 /
     pnv(p) 비식물성 기름 / o1*o3 /
매개변수
     maxstore 원유 종류별 최대 저장량 / 1000 /
     maxusepv 식물성 기름의 최대 사용 / 200 /
     maxusepnv 비식물성 오일의 최대 사용 / 250 /
     minusep 원유 최소 사용 / 20 /
     maxnusep 혼합 시 원유의 최대 개수 / 3 /
     sp 정제 및 혼합유 판매가격 / 150 /
     sc 원유 저장 비용 / 5 /
     stock(p) 시작과 끝의 재고 / #p 500 /
     hmin 정제유의 최소 경도 / 3 /
     hmax 정제유의 최대 경도 / 6 /
     h(p) 원유의 경도 / v1 8.8, v2 6.1, o1 2, o2 4.2, o3 5.0 /

테이블 비용(m,p) 원유 비용
    v1 v2 o1 o2 o3
m1 110 120 130 110 115
m2 130 130 110 90 115
m3 110 140 130 100 95
m4 120 110 120 120 125
m5 100 120 150 110 105
m6 90 100 140 80 135;

변수
     생산(m) 월별 혼합 및 정제 오일 생산량
     사용량(m,p) 월간 원유 사용량
     induse(m,p) 월간 원유 사용량 표시
     buy(m,p) 월간 원유 구매
     store(m,p) 월말 원유 비축량
     이익 목적변수;
양수 변수는 생산, 구매, 저장, 사용합니다.
바이너리 변수 induse;

방정식
     defobj 목표
     defusepv(m) 식물성 기름의 최대 사용
     defusepnv(m) 비식물성 기름의 최대 사용
     defproduce(m) 정제유 생산
     defhmin(m) 최소 경도 요구 사항
     defhmax(m) 최대 경도 요구 사항
     stockbal(m,p) 재고 잔고 제약 조건
     minus(m,p) 원유의 최소 사용량
     maxuse(m,p) induse가 0이면 원유 사용량은 0입니다.
     maxnuse(m) 혼합에 사용되는 원유의 최대 개수
;
논리 방정식
     deflogic1(m) 일부 식물성 원료 오일을 사용하는 경우 o1도 사용해야 합니다.
;

defobj.. 이익 =e= 합계(m, sp*생산(m))
                           - 합계((m,p), 비용(m,p)*구매(m,p))
                           - sum((m,p), sc*store(m,p));

defusepv(m).. sum(pv, use(m,pv)) ​​=l= maxusepv;

defusepnv(m).. sum(pnv, use(m,pnv)) =l= maxusepnv;

defproduce(m)..Produce(m) =e= sum(p, use(m,p));

defhmin(m).. sum(p, h(p)*use(m,p)) =g= hmin*produce(m);

defhmax(m).. sum(p, h(p)*use(m,p)) =l= hmax*produce(m);

* 정상상태 재고
stockbal(m,p).. store(m--1,p) + buy(m,p) =e= use(m,p) + store(m,p);

* 이제 논리적 제약이 옵니다.
minuse(m,p).. use(m,p) =g= minusep;

maxuse(m,p)..use(m,p) =l= 0;

maxnuse(m)..sum(p, induse(m,p)) =l= maxnusep;

deflogic1(m).. induse(m,'v1') 또는 induse(m,'v2') -> induse(m,'o3');

모델 foodemp /all/;

$onEcho > "%emp.info%"
분리 induse 마이너스 else maxuse
$offEcho

store.up(m,p) = 최대스토어;
store.fx('m6',p) = 주식(p);

옵션 optcr=0;
emp를 사용하여 foodemp 최대 이익을 해결합니다.