설명
이것은 재료 추출을 모델링하는 방법의 예입니다. 여러 기간의 결정 프로세스를 갖춘 순서 요구 사항이 있습니다. 시작하기 전에 세그먼트를 완전히 추출해야 합니다. 다음 세그먼트. 완전히 추출되지 않은 세그먼트는 다음 기간에 추출되거나 부분적으로 추출된 상태로 유지됩니다. 마지막 기간. 전체 추출 요구 사항이 추가됩니다. 다중 기간 프레임워크 내에서 모델링이 복잡해집니다.
대형 모델 유형 :MIP
카테고리 : 크레이지 슬롯 모델 라이브러리
메인 파일 : openpit.gms
$title 동적 노천 채굴 추출(OPENPIT,SEQ=309)
$onText
이는 재료 추출을 모델링하는 방법의 예입니다.
여러 기간의 결정 프로세스를 갖춘 순서 요구 사항이 있습니다.
시작하기 전에 세그먼트를 완전히 추출해야 합니다.
다음 세그먼트. 완전히 추출되지 않은 세그먼트는
다음 기간에 추출되거나 부분적으로 추출된 상태로 유지됩니다.
마지막 기간. 전체 추출 요구 사항이 추가됩니다.
다중 기간 프레임워크 내에서 모델링이 복잡해집니다.
참고: 크레이지 슬롯 Development Corporation, 공식화 및 언어
예.
키워드: 혼합 정수 선형 계획법, 노천 채굴, 다중 기간 스케줄링
$offText
$설정되지 않은 경우 tmx $set tmx 4
$smx를 설정하지 않은 경우 $set smx 50
$pmx를 설정하지 않은 경우 $set pmx 4
세트
t '추출 기간' / t1*t%tmx% /
s '추출 세그먼트' / s1*s%smx% /
p '구덩이' / p1*p%pmx% /;
매개변수
nev(p,s) '순 추출 이익'
evo(p,s) '추출량'
수요(t) '제품 수요'
rho '할인율'
delta(t) '할인 요소'
fix(p) '임의의 값에 대한 오프셋'
var(p) '임의의 값에 대한 var';
* 서로 다른 순 이익 프로필을 가진 무작위 입력 데이터 생성
수정(p) = 균일(-1,+1);
var(p) = -sign(fix(p))*uniform(1,5);
nev(p,s) = (fix(p) + var(p)/카드(들)*(ord(s) - 1));
evo(p,s) = 균일(.1,1);
* 수요를 총 자원의 70%로 설정
수요(t) = sum((p,s), evo(p,s))*0.7/카드(t);
로 = 0.1;
delta(t) = power(1 + rho,1 - ord(t));
바이너리 변수
b(p,s,t) '세그먼트를 추출할 수 있습니다'
e(p,s,t) '마지막으로 추출된 세그먼트 및 시작'
open(p,s) '세그먼트가 활성화되었습니다';
정수변수
ej(p,t) '마지막 세그먼트의 기간';
양수 변수
out(p,s,t) '추출 수준'
pout(p,t) '피트 출력';
변수
obj '총 할인 순이익';
방정식
eone(p,t) '추출 시퀀스는 한 번만 끝납니다.'
etwo(p,t) '추출 종료 시퀀스'
etwo(p,t) '끝 시작 순서'
opendef(p,s,t) '1로 개방 설정'
openlow(p,s) '열림을 0으로 설정'
brun(p,s,t) 'B에 대한 계단 정의'
defpout(p,t) '피트 출력 정의'
dem(t) '총 수요'
outlim(p,s,t) '추출 한계'
outmax(p,s) '총 추출 한계'
outall(p,s) '마지막 항목을 제외하고 전체 추출을 강제 실행'
defobj;
eone(p,t)..sum(s, e(p,s,t)) =e= 1;
etwo(p,t).. ej(p,t) =e= sum(s, ord(s)*e(p,s,t));
e three(p,t-1).. ej(p,t-1) =l= ej(p,t);
brun(p,s,t).. b(p,s,t) =e= b(p,s-1,t) - e(p,s-1,t) + e(p,s,t-1) + (ord(t) = 1 및 ord(s) = 1);
defpout(p,t).. pout(p,t) =e= sum(s, out(p,s,t));
dem(t)..sum(p, pout(p,t)) =e= 수요(t);
opendef(p,s,t).. open(p,s) =g= b(p,s,t);
openlow(p,s).. open(p,s) =l= sum(t, b(p,s,t));
outlim(p,s,t).. out(p,s,t) =l= evo(p,s)*b(p,s,t);
outall(p,s)..sum(t, out(p,s,t)) =g= evo(p,s)*open(p,s+1);
outmax(p,s)..sum(t, out(p,s,t)) =l= evo(p,s)*open(p,s);
defobj..obj =e= sum((p,s,t), delta(t)*nev(p,s)*out(p,s,t));
모델 추출 / 모두 /;
if(카드(들)*카드(p)*카드(t) > 200,
옵션 limRow = 0, limCol = 0, solPrint = 꺼짐, optCr = 0.01;
그렇지 않으면
옵션 optCr = 0;
디스플레이 evo, nev;
);
* 단일 피트 출력을 수요의 80%로 제한
pout.up(p,t) = 0.8*수요(t);
mip max obj를 사용하여 추출을 해결합니다.
ej.l, e.l, b.l, out.l, pout.l을 표시합니다.