-
Notifications
You must be signed in to change notification settings - Fork 1
/
MDPStateAction.run
43 lines (38 loc) · 1.1 KB
/
MDPStateAction.run
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
# Define the feasible states for each time slice
let isFeasibleState[1,H,HOME] := 1; # initialize the terminal state for individual 1
let isFeasibleState[2,H,HOME] := 1; # initialize the terminal state for individual 2
for {n in PERS, t in H-1..0 by -1, j in AUW[n], k in AUW[n]} {
if t < opening[j]/T or t > closing[j]/T then
continue;
if j == k then {
for {h in 1..DH} {
if t + 1 >= opening[k]/T and
t + h <= closing[k]/T and
t + h <= H and
isFeasibleState[n,t+h,k] > 0 then {
let isFeasibleState[n,t,j] := 1;
let isFeasibleChoice[n,t,j,k,h] := 1;
};
}
} else {
if t + travelTime[t,j,k] <= H and
isFeasibleState[n,t+travelTime[t,j,k],k] > 0 then {
let isFeasibleState[n,t,j] := 1;
let isFeasibleChoice[n,t,j,k,travelTime[t,j,k]] := 1;
};
};
}
# start debug log
if debug_log == 1 then {
# Write isFeasibleState to DATA/ISFS.sol
for {n in PERS} {
for {t in 0..H} {
for {j in AUW[n]}
if (t,j) in X[n] then
printf "(%d,%3d,%d):%3d\t", n,t, j, card(D[n,t,j]) > DATA/ISFS.sol;
printf "\n" > DATA/ISFS.sol;
}
printf "\n" > DATA/ISFS.sol;
}
# end of log
}