forked from aashimasingh/Roomba-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroomba.mod
49 lines (45 loc) · 1.33 KB
/
roomba.mod
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
/*********************************************
* OPL 12.8.0.0 Model
* Author: aashima
* Creation Date: Mar 14, 2018 at 3:25:20 PM
*********************************************/
int numNodes = ...;
int numScenarios = ...;
int capacity = ...;
int rate = ...;
range Nodes = 0..numNodes+1;
range Tiles = 1..numNodes;
range Scenarios = 1..numScenarios;
float probScenarios[Scenarios] = ...;
dvar int dplus[Scenarios][Nodes];
dvar int dminus[Scenarios][Nodes];
dvar boolean x[Nodes][Nodes];
minimize
sum(s in Scenarios, i in Nodes)
probScenarios[s] * (dplus[s][i] + dminus[s][i]);
subject to {
forall (i in Tiles)
ctEachTileVacuumedAtMostOnce:
sum(j in Nodes)
x[i][j] <= 1;
ctLeavesChargingStationOnce:
sum(j in Nodes)
x[0][j] == 1;
ctReturnsToChargingStation:
sum(i in Nodes)
x[i][numNodes+1] == 1;
forall(k in Tiles)
ctLeavesNodeOnlyIfEntersNode:
sum(i in Nodes) x[i][k] == sum(j in Nodes) x[k][j];
ctCannotPickupMoreDirtThanCapacity:
sum(i in Tiles) rate * sum(j in Nodes)x[i][j] <= capacity;
/*forall(i in Tiles, s in Scenarios)
ctBalanceDirtOnEachTileEachScenario:
dminus[s][i] - dplus[s][i] + rate * sum(j in Nodes)x[i][j] = */
forall (s in Scenarios, i in Nodes)
ctNonNegativityDplus:
dplus[s][i] >= 0;
forall (s in Scenarios, i in Nodes)
ctNonNegativityDminus:
dminus[s][i] >= 0;
}