prodsch.gms : APEX - 생산 일정 모델

설명

선외기 모터 제조 전문회사입니다.
계절적 수요가 많아 생산 비용을 최소화하려고 합니다. 는
세 가지 주요 비용 범주는 다음과 같습니다.
  1. 직접생산비(비선형적인 생산관계 및 교대)
     수술이 가능합니다)
  2. 재고비용(임대 또는 임대옵션)
  3. 인력 변동 비용.

소형 모델 유형 :MIP


카테고리 : 슬롯 사이트 모델 라이브러리


메인 파일 : prodsch.gms

$title APE X - 생산 일정 모델(PRODSCH,SEQ=9)

$onText
선외기 모터 제작 전문기업
계절적 수요가 많아 생산 비용을 최소화하려고 합니다. 는
세 가지 주요 비용 범주는 다음과 같습니다.
  1. 직접생산비(비선형적인 생산관계 및 교대)
     수술이 가능합니다)
  2. 재고비용(임대 또는 임대옵션)
  3. 인력 변동 비용.

CDC, APEX-III 참조 매뉴얼 버전 1.2, Control Data Corporation,
미니애폴리스, 1980. MIP 샘플 문제

키워드: 혼합정수선형계획법, 스케줄링, 생산 계획
$offText

세트
   q '분기' / 여름, 가을, 겨울, 봄 /
   s '교대' / 첫 번째, 두 번째 /
   l '생산 수준' / 1*4 /
   i(l) '생산 수준 간격' / 1*3 /;

매개변수
   d(q) '수요(계절별 모터)' / 봄 24000 /
   lc(q) '리스 비용(계절당 달러)' / 여름 15000 /
   ei(q) '초기 취업' / 84년 여름 /
   delt(q) '할인율';

스칼라
   mc '재료비(모터당 달러)' / 100 /
   sr '공간 임대(모터당 달러)' / 2 /
   invmax '재고(모터)의 상한'
   hc '고용 비용(직원당 달러)' / 900 /
   fc '해고 비용(직원당 달러)' / 150 /;

delt(q) = 1/1.03**(ord(q) - 1);
invmax = sum(q, d(q));

테이블 pr(*,l) '생산 관계'
              1 2 3 4
   노동 20 40 50 60
   모터 1000 3000 4500 5800;

테이블 sc(*,s) '교대 비용(교대당 달러)'
            첫 번째 두 번째
   고정 10000 16000
   노동 3500 4100;

변수
   비용 '연간 총 할인 비용(1000 $)'
   dpc(q) '직접제작비(시즌당 1000$)'
   isc(q) '재고 보관 비용(계절당 1000$)'
   wfc(q) '인력변동비용(계절당 1000$)'
   src(q) '공간 임대 비용(시즌당 1000$)'
   p(q) '생산(계절별 모터 수)'
   ss(l,q,s) '생산 세그먼트(sos2 유형)'
   ssb(l,q,s) 'ss sos2 공식화에 0-1이 필요함'
   inv(q) '재고(계절별 모터 수)'
   임대 '리스-임대 옵션'
   e(q) '총 고용(직원)'
   se(q,s) '교대 근무(교대당 직원 수)'
   Shift(q,s) '교대 사용 표시자(이진수)'
   h(q) '분기별 채용(직원)'
   f(q) '분기별 해고(직원)';

양수 변수 p, ss, inv, src, h, f;
이진 변수 bpl, 임대, 이동, ssb;

방정식
   acost '총 비용 정의(1000 $)'
   ddpc(q) '직접생산비 정의(1000$)'
   disc(q) '재고 보관 비용 정의(1000$)'
   dwfc(q) '인력 변동 비용 정의(1000 $)'
   sbp(q) 'sos 제품 잔액(모터)'
   sbse(q,s) 'sos 교대 고용 잔액(직원)'
   scc(q,s) 'sos 시프트 링크'
   invb(q) '재고 잔액(모터)'
   dsrc(q) '정의: 공간 임대'
   ed(q) '총 고용 정의(직원)'
   eb1(q) '고용잔액 유형 1(직원)'
   eb2(q) '고용수지 유형 2(직원)'
   messb(q,s) 'ssb에 대한 상호 배타성'
   lssb(l,q,s) 'ss - ssb 연결';

acost.. 비용 =e= sum(q, delt(q)*( dpc(q) + isc(q) + wfc(q)));

ddpc(q).. dpc(q) =e= (mc*p(q) + sum(s, sc("고정",s)*shift(q,s) + sc("노동",s)*se(q,s)))/1000;

sbp(q).. p(q) =e= sum((s,l), pr("모터",l)*ss(l,q,s));

sbse(q,s).. se(q,s) =e= sum(l, pr("노동",l)*ss(l,q,s));

scc(q,s)..sum(l, ss(l,q,s)) =e= Shift(q,s);

invb(q).. inv(q) =e= inv(q-1) + p(q) - d(q);

디스크(q).. isc(q) =e= (lc(q)*리스 + src(q))/1000;

dsrc(q).. src(q) =g= sr*( inv(q) - invmax*lease );

dwfc(q).. wfc(q) =e= (hc*h(q) + fc*f(q))/1000;

ed(q)..e(q) =e= sum(s, se(q,s));

eb1(q).. e(q) =e= e(q-1) + h(q) - f(q) + ei(q);

eb2(q).. e(q) =e= e(q--1) + h(q) - f(q);

messb(q,s)..sum(l, ssb(l,q,s)) =e= 1;

lssb(l,q,s)..ss(l-1,q,s) + ss(l,q,s) =l= ssb(l-2,q,s) + ssb(l-1,q,s) + ssb(l,q,s);

p.up("스프링") = .8*카드(들)*smax(l, pr("모터",l));

모델
   prod1 '초기 고용' / 모두 - eb2 /
   prod2 '정상 상태' / all - eb1 /;

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

se.l, p.l을 표시하십시오.

매개변수
   rep1 '비용 요약'
   rep2 '생산 요약';

rep1("direct",q) = dpc.l(q);
rep1("저장소",q) = isc.l(q);
rep1("hire-fire",q) = wfc.l(q);
rep1("*전체*",q) = dpc.l(q) + isc.l(q) + wfc.l(q);

rep2("출력",q) = p.l(q);
rep2("inventory",q) = inv.l(q);
rep2("판매액",q) = d(q);
rep2("고용",q) = e.l(q);

담당자1, 담당자2 표시;