batchdes.gms : 화학 배치 처리를 위한 최적 설계

설명

세 가지 처리 단계를 갖는 화학 배치 공정: 혼합,
반응과 원심분리를 거쳐 두 가지 생성물이 생성된다. 이
모델은 단위의 수와 크기를 결정하는 데 사용됩니다.
각 단계에서 병렬로 작동합니다. 결과 모델은
비선형 및 혼합 정수;

소형 모델 유형 :MINLP


카테고리 : 무료 슬롯 모델 라이브러리


메인 파일 : batchdes.gms

$title 화학 배치 처리를 위한 최적 설계(BATCHDES,SEQ=119)

$onText
혼합, 혼합,
반응과 원심분리를 거쳐 두 가지 생성물이 생성된다. 이
모델은 단위의 수와 크기를 결정하는 데 사용됩니다.
각 단계에서 병렬로 작동합니다. 결과 모델은 다음과 같습니다.
비선형 및 혼합 정수;

Morari, M 및 Grossmann, I E, Eds, 화학 공학 최적화
무료 슬롯가 포함된 모델. 화학 공학 회사의 컴퓨터 보조 장치,
1991.

Kocis, GR 및 Grossmann, I E, 비볼록 MINLP의 전역 최적화
공정 합성의 문제. 독립 엔지니어링 화학
연구 27(1988), 1407-1421.

키워드: 혼합 정수 비선형 계획법, 화학공학, 화학
          산업, 화학 배치 공정, 공정 설계
$offText

세트
   i '제품' / a, b /
   j '단계' / 믹서, 반응기, 원심분리기 /
   k '병렬 장치의 잠재적 개수' / 1*3 /;

스칼라
   h '수평시(사용 가능 시간)' / 6000. /
   vlow '배치 단위 크기의 하한' / 250. /
   vupp '배치 단위 크기의 상한' / 2500. /;

매개변수
   q(i) '제품 i의 수요'
            / 200000
              b 150000 /
   alpha(j) '배치 단위의 비용 계수'
            / 믹서 250.
              원자로 500.
              원심분리기 340. /
   beta(j) '배치 단위의 비용 지수'
            /믹서 0.6
              원자로 0.6
              원심분리기 0.6 /

* 아래 매개변수는 원래 변수를 얻기 위해 정의된 것입니다.
   actv(j) '실제 볼륨(l)'
   actb(i) '실제 배치 크기(kg)'
   acttl(i) '실제 사이클 시간(시간)'
   actn(j) '병렬로 연결된 실제 장치 수'
   coeff(k) '병렬 장치 수를 나타냅니다.';

coeff(k) = log(ord(k));

표 s(i,j) 'j 단계의 제품 i에 대한 크기 계수(kg/l)'
       믹서 반응기 원심 분리기
   2 3 4
   ㄴ 4 6 3;

표 t(i,j) 'j 배치에서 제품 i의 처리 시간(시간)'
       믹서 반응기 원심 분리기
   8 20 4
   ㄴ 10 12 3;

변수
    y(k,j) '단계 존재를 나타내는 이진 변수'
    v(j) 'j단계의 부피(l)'
    b(i) '제품 i의 배치 크기(kg)'
    tl(i) '제품 i의 사이클 시간(hrs)'
    n(j) '병렬단 j의 유닛 수'
    비용 '일괄 처리 단위의 총 비용($)';

이진변수 y(k,j);
양의 변수 v(j), b(i), tl(i), n(j);

방정식
   vol(i,j) 'j 단계의 부피 계산'
   Cycle(i,j) '제품 i의 사이클 시간 계산'
   시간 '시간 제약'
   units(j) '단계당 처리 단위 수를 계산합니다.'
   lim(j) '선택을 하나의 숫자로 제한'
   obj '목적 함수 정의';

* 모델 방정식의 볼록화된 공식화
* j 단계의 볼륨 요구 사항
vol(i,j).. v(j) =g= log(s(i,j)) + b(i);

* 각 제품의 사이클 타임 i
사이클(i,j)..n(j) + tl(i) =g= log(t(i,j));

* 제작기간의 제약
시간.. sum(i, q(i)*exp(tl(i) - b(i))) =l= h;

* 단위 수를 0-1 변수와 연결
단위(j)..n(j) =e= sum(k , coeff(k)*y(k,j));

* 병렬 장치에 대해서는 하나만 선택 가능
lim(j)..sum(k, y(k,j)) =e= 1;

* 목적함수 정의
obj.. 비용 =g= sum(j, alpha(j)*(exp(n(j) + beta(j)*v(j))));

모델 배치 / 모두 /;

* 경계 섹션
v.lo(j) = log(vlow);
v.up(j) = log(vupp);
n.up(j) = log(3.);

* 사이클 시간 및 배치 크기에 대해 아래에서 엄격한 하한이 계산됩니다.
매개변수
   tllow(i) 'tl(i)의 하한'
   tlupp(i) 'tl(i)의 상한';

tllow(i) = smax(j, t(i,j)/exp(n.up(j)));
tlupp(i) = smax(j, t(i,j));
tl.lo(i) = log(tllow(i));
tl.up(i) = log(tlupp(i));

매개변수
   타격(i) 'b(i)의 하한'
   bupp(i) 'b(i)의 상한';

타격(i) = q(i)*(smax(j, t(i,j)/exp(n.up(j))))/h;
bupp(i) = min(q(i), smin(j, exp(v.up(j))/s(i,j)));
b.lo(i) = log(blow(i));
b.up(i) = log(bupp(i));

* 초기 지점
* 단계당 3개 단위로 설정된 이진 변수
y.l(k,j) = 0;
y.l('3','믹서') = 1;
y.l('3','리액터') = 1;
y.l('3','원심분리기') = 1;
n.l(j) = sum(k, coeff(k)*y.l(k,j));

* 배치 크기는 경계 사이의 중간 지점에 설정됩니다.
b.l(i) = (b.up(i) + b.lo(i))/2;
v.l(j) = smax(i,log(s(i,j)) + b.l(i));
tl.l(i) = smax(j,log(t(i,j)) - n.l(j));

비용을 최소화하는 minlp를 사용하여 배치를 해결합니다.

* 변수를 원래 형태로 변환
actv(j) = exp(v.l(j));
actb(i) = exp(b.l(i));
acttl(i) = exp(tl.l(i));
actn(j) = exp(n.l(j));

* 최적의 디자인
actv, actb, acttl, actn을 표시합니다.