설명
이 무력한 로트 크기 조정 문제는 최소 비용 생산 계획을 찾습니다. 수요 요구 사항을 충족합니다. 생산비, 입고비 등이 발생합니다. 그리고 기계를 세팅합니다. 네 가지 해결 방법이 제시됩니다. 1) 원본 모델을 MIP로 해결 2) RMIP로 엄격한 재구성 해결 3) 재고 없이 빡빡한 재구성을 RMIP로 해결 4) 분리 알고리즘을 사용하여 원본 모델을 RMIP로 해결
소형 모델 유형 :MIP
카테고리 : 슬롯 머신 모델 라이브러리
메인 파일 : prodplan.gms
$title A 생산 계획 예(PRODPLAN, SEQ=356)
$onText
이 무능력한 로트 크기 조정 문제는 최소 비용 생산 계획을 찾습니다.
수요 요구 사항을 충족합니다. 생산비, 입고비 등이 발생합니다.
그리고 기계를 세팅합니다.
네 가지 해결 방법이 제시됩니다.
1) 원본 모델을 MIP로 해결
2) RMIP로 엄격한 재구성 해결
3) 재고 없이 빡빡한 재구성을 RMIP로 해결
4) 분리 알고리즘을 이용하여 원본 모델을 RMIP로 해결
Pochet, Y 및 Wolsey, LA, 혼합 정수별 생산 계획
프로그래밍(운영 연구 및 금융 분야의 스프링거 시리즈)
공학). Springer-Verlag 뉴욕, Inc., 2006.
키워드: 혼합 정수 선형 계획법, 완화된 혼합 정수 선형 계획법
프로그래밍, 생산 기획
$offText
*1) 초기 미량 제제
세트
t '기간' / t1*t8 /
ut(t,t) '상부 삼각형';
별칭(t,tt,k);
매개변수
DEMAND(T) '기간당 수요' / (t1,t2) 400, (t3,t4) 800, (t5*t8) 1200 /
SETUPCOST '기간당 설정 비용' / 5000 /
PRODCOST '기간당 생산비' / 100 /
INVCOST '기간당 생산비' / 5 /
STOCKINI '기간당 생산비' / 200 /
BigM(T) '최대 생산량 - BigM';
*초기 재고가 첫 번째 기간의 수요보다 낮다고 가정합니다.
abort$(Demand('t1') < STOCKINI) '초기 재고가 너무 많습니다.';
ut(k,t) = ord(k) <= ord(t);
BigM(t) = sum(k$(ord(k) >= ord(t)), DEMAND(k) - STOCKINI$(ord(t) = 1));
디스플레이유타, 빅엠;
변수
s(t) 't 기간의 재고'
x(t) 't 기간의 생산'
y(t) 't 기간에 설정'
비용;
이진변수 y;
양수 변수 s, x;
방정식
잔고(t) '재고잔고'
생산(t) '생산 설정'
최소 비용 '목적 함수';
민코스트..
비용 =e= sum(t, ifthen(ord(t) < 카드(t),INVCOST,INVCOST/2)*s(t)) + sum(t, SETUPCOST*y(t) + PRODCOST*x(t));
생산량(톤)..
x(t) =L= BigM(t)*y(t);
잔액(t)..
STOCKINI$(ord(t) = 1) + s(t-1) + x(t) =e= 수요(t) + s(t);
모델 소형 / 최소 비용, 생산, 균형 /;
작은.optCr=0;
mip를 사용하여 작은 최소화 비용을 해결합니다.
*2) 복합상품 배합(타이트한 재구성)
변수
smc(t,t) 'i 기간에 t 기간 동안 입력된 재고'
xmc(t,t) 't 기간의 수요에 대한 i 기간의 생산';
양수 변수 smc, xmc;
방정식
Balancemc(t,t) '재고 잔고'
Productionmc(t,t) '생산 설정'
Mincostmc '목적 함수';
민코스트엠씨..
비용 =e= 합계(ut, PRODCOST*xmc(ut) + INVCOST*smc(ut)) + 합계(t, SETUPCOST*y(t));
Balancemc(ut(k,t))..
STOCKINI$(ord(t) = 1) + smc(k-1,t) + xmc(k,t) =e= smc(k,t) + diag(k,t)*DEMAND(t);
생산mc(ut(k,t))..
xmc(k,t) =l= (수요(t) - STOCKINI$(ord(t) = 1))*y(k);
모델tinymc/Mincostmc, Balancemc, Productionmc/;
rmip를 사용하여 비용을 최소화하는tinmc를 해결합니다.
*3) 재고가 없는 다중 상품 배합(타이트한 재구성)
매개변수 dist(t,t) '기간 간 거리';
dist(ut(k,t)) = ord(t) - ord(k);
디스플레이 거리;
방정식
Demandmcws(t) '수요 만족'
Mincostmcws '목적 함수';
민코스트mcws..
비용 =e= 합계(ut, PRODCOST*xmc(ut) + INVCOST*dist(ut)*xmc(ut)) + 합계(t, SETUPCOST*y(t));
수요mcws(t)..
sum(ut(k,t), xmc(k,t)) =g= DEMAND(t) - STOCKINI$(ord(t) = 1);
모델tinymcws / Mincostmcws, Demandmcws, Productionmc /;
rmip를 사용하여 비용을 최소화하는tinmcws를 해결합니다.
*4) 분리 알고리즘
세트
j '반복' /j1*j10/
n(j,t) '컷 세트'
Scon(j,t,t) '위반된 제약조건 집합';
n(j,t) = 아니오;
Scon(j,t,t) = 아니오;
별칭 (t,l), (j,jj);
매개변수
D(t,t) '누적수요'
left(t,t) '컷의 왼쪽';
D(ut(t,k)) = sum[tt$(ord(tt) <= ord(k) 및 ord(tt) >= ord(t)), DEMAND(tt)];
방정식 cuts(j,t) 'RMIP에 대한 컷(완전한 선형 설명)';
cuts(n(jj,t)).. sum(Scon(jj,t,k), x(k) - D(k,t)*y(k)) =l= s(t);
모델tinycuts/작은, 컷/;
스칼라
더 / 1 /
엡실론 / 1e-6 /;
*STOCKINI < DEMAND(t1)인 경우 첫 번째 기간에 생산이 있어야 합니다.
y.fx('t1') = 1;
루프(j$더,
rmip 최소 비용을 사용하여 Tinycut을 해결합니다.
옵션 limCol = 0, limRow = 0, solPrint = 자동;
* 잠재적 절단의 왼쪽을 저장합니다.
왼쪽(ut(tt,l)) = x.l(tt)-d(tt,l)*y.l(tt);
* 0보다 큰 LHS만 사용
Scon(j,l,tt) = 왼쪽(tt,l) > 엡실론;
* 그 합이 재고 수준보다 큰 경우 : 위반 발견
* 이 컷을 모델에 추가하세요.
n(j,l) = sum[Scon(j,l,tt), left(tt,l)] - 엡실론 > s.l(l);
* 이 반복 중에 하나 이상의 컷이 추가된 경우 계속 진행합니다.
more = sum(n(j,l), yes);
);
put_Utility$(더 이상) '로그' /
'>>>>정수 솔루션을 찾았습니다. 총 'sum(n(j,t),1):0:0' 컷이 추가되었습니다.';