haverly.gms : Haverly의 풀링 문제 예시

설명

Haverly의 풀링 문제 예. 이것은 볼록하지 않은 문제입니다.
비선형 변수에 대한 초기 수준을 설정하는 것이 좋습니다.
전역 최적을 찾기 위한 접근 방식입니다.

소형 모델 유형 :NLP


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


메인 파일 : haverly.gms

$title Haverly의 풀링 문제 예 (HAVERLY,SEQ=214)

$onText
Haverly의 풀링 문제 예. 이것은 볼록하지 않은 문제입니다.
비선형 변수에 대한 초기 수준을 설정하는 것이 좋습니다.
전역 최적점을 찾는 접근 방식입니다.

Haverly, CA, 풀링을 위한 재귀 동작 연구
문제. ACM SIGMAP Bull 25(1978), 29-32.

Adhya, N, Tawaralani, M 및 Sahinidis, N, 라그랑주 접근법
풀링 문제. 독립공학화학연구 38
(1999), 1956-1972.

----- 원유A ------/--- 풀 --|
                  / |--- 최종X
----- 원유B ----/ |
                               |--- 최종
----- 원유C -----|

키워드: 비선형 계획법, 화학 공학, 풀링 문제
$offText

세트
   s '공급량(원유)' / 원유A, 원유B, 원유C /
   f '최종 제품' / finalX, finalY /
   i '최종 제품의 중간 공급원' / Pool, CrudeC /
   poolin(s) '풀 탱크로 들어가는 원유' / CrudeA, CrudeB /;

테이블 data_S(s,*) '공급 데이터 요약'
            가격 유황
   조A 6 3
   원유B 16 1
   조C 10 2;

테이블 data_f(f,*) '최종 제품 데이터'
            가격 유황 수요
   최종 X 9 2.5 100
   최종 Y 15 1.5 200;

매개변수
   yellow_content(s) '공급 품질(퍼센트)'
   req_sulfur(f) '필요한 최대 황 함량(백분율)'
   수요(f) '최종 제품 수요';

황 함량(들) = data_S(s,'황');
req_sulfur(f) = data_F(f,'황');
수요(f) = data_F(f,'수요');

방정식
   costdef '비용 방정식'
   소득 정의 '소득 방정식'
   blend(f) '최종 제품의 혼합'
   풀발 '풀 탱크 밸런스'
   CrudeCbal 'crudeC 잔액'
   poolqualbal '풀 품질 균형'
   blendqualbal '블렌딩을 위한 품질 균형'
   이익def '이익 방정식';

양수 변수
   원유(들) '사용된 원유의 양'
   stream(i,f) '스트림'
   q '풀 품질';

변수
   이익 '총 이익'
   비용 '총 비용'
   소득 '총소득'
   final(f) '판매된 최종 제품의 양';

이익def.. 이익 =e= 수입 - 비용;

비용정의.. 비용 =e= 합계(들, data_S(들,'가격')*원유(들));

소득def.. 소득 =e= sum(f, data_F(f,'price')*final(f));

blend(f).. final(f) =e= sum(i, stream(i,f));

poolbal.. sum(poolin, raw(poolin)) =e= sum(f, stream('pool',f));

원유Cbal.. 원유('crudeC') =e= sum(f, stream('crudeC',f));

poolqualbal.. q*sum(f, stream('pool', f)) =e= sum(poolin,sulfur_content(poolin)*crude(poolin));

blendqualbal(f).. q*stream('pool',f) + yellow_content('CrudeC')*stream('CrudeC',f)
                  =l= req_sulfur(f)*sum(i,stream(i,f));

final.up(f) = 수요(f);

모델 m / 모두 /;

* 제품 조건으로 인해 일부 현지 솔버는
* 0*0에 갇혔으므로 q의 초기 값을 설정합니다.
q.l = 1;

nlp를 사용하여 이익을 극대화하는 m을 해결합니다.