int: horizon = sum(j in Jobs, t in Tasks)(duration[j,t]); var 0..horizon: makespan; array[JOB,TASK] of var 0..horizon: start; constraint forall(j in Jobs, t in 1..nbTasks-1) ( start[j,t] + duration[j,t] <= start[j,t+1] ); constraint forall(j in Jobs) ( start[j, nbTasks] + duration[j, nbTasks] <= makespan ); constraint forall(m in Machines) ( disjunctive( [start[j,t] | j in Jobs, t in Tasks where resource[j,t] == m], [duration[j,t] | j in Jobs, t in Tasks where resource[j,t] == m], ) ); solve minimize makespan;