-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIntervalJobshop.txt
67 lines (62 loc) · 1.2 KB
/
IntervalJobshop.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*********************************************
* OPL 12.9.0.0 Model
* Author:
* Creation Date: Jun 5, 2020 at 7:14:10 PM
*********************************************/
using CP;
int nbJob=3;
int nbMachine=4;
range Job=1..nbJob;
range Machine=1..nbMachine;
tuple Node {
int machine;
int job;
};
tuple SolidArc{
int job;
int pre;
int suc;
};
/*
Job 1: 1-2-3
Job 2: 2-1-4-3
Job 3: 1-2-4
*/
{Node} NodeSet={<1,1>,<2,1>,<3,1>,
<2,2>,<1,2>,<4,2>,<3,2>,
<1,3>,<2,3>,<4,3>};
{SolidArc} SolidArcSet={<1,1,2>,<1,2,3>,
<2,2,1>,<2,1,4>,<2,4,3>,
<3,1,2>,<3,2,4>};
int ProTime[NodeSet]=[10,8,4,
8,3,5,6,
4,7,3];
range Time=0..30;
dvar interval X[<m,j> in NodeSet] in Time size ProTime[<m,j>];
dvar sequence seqM[m in Machine] in all(<m,j> in NodeSet) X[<m,j>];
dvar sequence seqJ[j in Job] in all(<m,j> in NodeSet)X[<m,j>];
dvar int+ Cmax;
execute {
cp.param.TimeLimit=4*60;// setup the time limit
}
minimize Cmax;
subject to {
forall( m in Machine){
noOverlap(seqM[m]);
}
forall( j in Job){
noOverlap(seqJ[j]);
}
forall(n in NodeSet){
Cmax >= endOf(X[n]);
}
forall(<j,p,s> in SolidArcSet){
before(seqJ[j],X[<p,j>],X[<s,j>]);
}
}
execute RESULT{
for(m in Machine)
{
writeln(seqM[m]);
}
}