this repo has no description
1predicate fzn_cumulative_opt(array[int] of var opt int: s,
2 array[int] of var int: d,
3 array[int] of var int: r, var int: b) =
4 let {
5 set of int: tasks =
6 {i | i in index_set(s) where ub(r[i]) > 0 /\ ub(d[i]) > 0 },
7 set of int: times =
8 min([ lb(s[i]) | i in tasks ]) ..
9 max([ ub(s[i]) + ub(d[i]) | i in tasks ])
10 }
11 in
12 forall( t in times ) (
13 b >= sum( i in tasks ) (
14 bool2int( occurs(s[i]) /\ deopt(s[i]) <= t /\ t < deopt(s[i]) + d[i] ) * r[i]
15 )
16 );