설명
일련의 작업이 단일 시스템에서 처리됩니다. 작업 실행은 비선점형입니다(즉, 중단될 수 없음). 모든 작업에 대해 릴리스 날짜, 기간 및 기한이 제공됩니다. 최대 지각을 최소화하는 순서는 무엇입니까? 참조: Xpress-MP를 통한 최적화 적용(최종 업데이트 2007년 9월 10일) 7.4 병목 현상이 발생한 시스템의 작업 순서 지정, 94-97페이지 이 모델은 다양한 재구성(BigM, Convex Hull 및 지표) 모델 자체를 변경하지 않고 EMP를 통해. 기여자: Michael Ferris 및 Jan-H. Jagla, 2009년 4월
소형 모델 유형 :논리적
카테고리 : 슬롯 사이트 추천 EMP 라이브러리
메인 파일 : sequence.gms
$title 단일 시스템의 시퀀싱(SEQUENCE, 슬롯 사이트 추천=20)
$onText
일련의 작업이 단일 시스템에서 처리됩니다.
작업 실행은 비선점형입니다(즉, 중단될 수 없음).
모든 작업에 대해 릴리스 날짜, 기간 및 기한이 제공됩니다.
최대 지각을 최소화하는 순서는 무엇입니까?
참조:
Xpress-MP를 통한 최적화 적용(최종 업데이트 2007년 9월 10일)
7.4 병목 현상이 발생한 시스템의 작업 순서 지정, 94-97페이지
이 모델은 다양한 재구성(BigM, Convex Hull 및
지표) 모델 자체를 변경하지 않고 EMP를 통해.
기여자: Michael Ferris 및 Jan-H. 자글라, 2009년 4월
$offText
작업 설정 / 1*7 /;
설정 시간 /릴리스, 기간, 기한/;
테이블 데이터(회,작업)
1 2 3 4 5 6 7
릴리스 2 5 4 8 9
지속시간 5 6 8 4 2 4 2
마감일 10 21 15 10 5 15 22
;
별칭(직업,i,j);
이진 변수 order(i,j) "i는 j보다 먼저 정렬되어야 합니다.";
양수 변수 start(j) "작업 j의 시작 시간";
양수 변수 comp(j) "작업 j의 완료 시간";
양수 변수 late(j) "작업 j의 지연";
다양한 지각;
방정식
defcomp(j), deflate(j), deftard(j);
defcomp(j)..
comp(j) =e= start(j) + data('기간',j);
* 이것은 실제로 max(0, comp(j) - data('due',j)) 입니다.
수축(j)..
late(j) =g= comp(j) - data('due',j);
디퍼드(j)..
지각 =g= 늦음(j);
모델 베이스 /all/;
*--- BigM 제제
스칼라 M; M = sum(작업, 데이터('릴리스',작업) + data('기간',작업));
방정식
disjoint1(i,j), disjoint2(i,j);
* 다음은 종이 i 또는 종이 j 중 하나 또는 제약 조건입니다.
disjoint1(i,j)$(ord(i) lt ord(j))..
comp(i) =l= start(j) + M*(1-order(i,j));
disjoint2(i,j)$(ord(i) lt ord(j))..
comp(j) =l= start(i) + M*order(i,j);
모델 시퀀스 /base, disjoint1, disjoint2/;
시퀀스.optcr = 0;
start.lo(j) = max(0, data('release',j));
mip min 지각을 사용하여 시퀀스를 해결합니다.
*--- Bigm, ConvexHull 또는 표시기를 사용하여 촉진하는 EMP 공식화
방정식
시퀀스(i,j);
모델 시퀀스_emp /base, 슬롯 사이트 추천/;
시퀀스_emp.optcr = 0;
* 다음은 종이 i 또는 종이 j 중 하나 또는 제약 조건입니다.
슬롯 사이트 추천(i,j)$(동일하지 않음(i,j))..
comp(i) =l= start(j);
파일 emp / '%emp.info%' /
empopt / 'jams.opt' /;
시퀀스_emp.optfile=1;
스칼라 ll; ll= 라이선스 수준;
*--- EMP 볼록 껍질(기본값)
* 결과 모델에는 라이센스가 필요합니다
만약(ll>0,
루프((i,j)$(ord(i) < ord(j)),
put emp / 'disjunction *' 슬롯 사이트 추천(i,j) 'else' 슬롯 사이트 추천(j,i));
putclose emp;
putclose empopt / '파일명 conexhull.gms';
emp min 지각을 사용하여 시퀀스_emp를 해결합니다.
abort$(abs(sequence_emp.objval - 시퀀스.objval) > 1e-10) 'EMP 볼록 껍질: 잘못된 솔루션', 시퀀스_emp.objval, 시퀀스.objval;
);
*--- EMP 빅엠
emp / '기본 bigm' M:0:0;
루프((i,j)$(ord(i) < ord(j)),
put emp / 'disjunction *' 슬롯 사이트 추천(i,j) 'else' 슬롯 사이트 추천(j,i));
putclose emp;
putclose empopt / '파일명 bigm.gms';
emp min 지각을 사용하여 시퀀스_emp를 해결합니다.
abort$(abs(sequence_emp.objval - 시퀀스.objval) > 1e-10) 'EMP BigM: 잘못된 솔루션', 시퀀스_emp.objval, 시퀀스.objval;
*--- EMP 표시기(CPLEX, XPRESS 및 SCIP에만 해당)
$해결자가 아닌 경우 cplex $exit
emp / '기본 indic'을 입력하세요.
루프((i,j)$(ord(i) < ord(j)),
put emp / 'disjunction *' 슬롯 사이트 추천(i,j) 'else' 슬롯 사이트 추천(j,i));
putclose emp;
putclose empopt / '파일 이름 표시기.gms'
/ '하위 솔버 복합체';
emp min 지각을 사용하여 시퀀스_emp를 해결합니다.
abort$(abs(sequence_emp.objval - 시퀀스.objval) > 1e-10) 'EMP 표시기: 잘못된 솔루션', 시퀀스_emp.objval, 시퀀스.objval;
*--- EMP를 사용하면 다양한 재구성 유형을 혼합하고 일치시킬 수도 있습니다.
*--- 재구성에 사용되는 매개변수를 변경합니다.
emp / '기본 indic'을 입력하세요.
loop((i,j)$(ord(i) < ord(j) 및 ord(i) < 카드(i) 및 ord(j) < 카드(j)),
put emp / 'disjunction *' 슬롯 사이트 추천(i,j) 'else' 슬롯 사이트 추천(j,i));
loop((i,j)$(ord(i) < ord(j) 및 (ord(i) < 카드(i)/2 및 ord(j) = 카드(j))),
put emp / 'disjunction bigm' M:0:0 '*' 슬롯 사이트 추천(i,j) 'else' 슬롯 사이트 추천(j,i));
loop((i,j)$(ord(i) < ord(j) 및 (ord(i) >= 카드(i)/2 및 ord(j) = 카드(j))),
put emp / 'disjunction chull 4000 *' 슬롯 사이트 추천(i,j) 'else' 슬롯 사이트 추천(j,i));
putclose emp;
putclose empopt / '파일명 mixandmatch.gms'
/ '하위 솔버 복합체';
emp min 지각을 사용하여 시퀀스_emp를 해결합니다.
abort$(abs(sequence_emp.objval - 시퀀스.objval) > 1e-10) 'EMP 믹스 앤 매치: 잘못된 솔루션', 시퀀스_emp.objval, 시퀀스.objval;