% main routine schedule(Schedule, FinTime):- tasks(TDs), constrain(TDs, Schedule, FinTime), minimize(FinTime). % add basic constraints constrain([], [], _). constrain([T/D | TDs], [T/Start/D | Rest], FinTime):- { Start >= 0, Start + D =< FinTime }, constrain(TDs, Rest, FinTime), prec_constr(T/Start/D, Rest). % add precedence constraints prec_constr(_, []). prec_constr(T/S/D, [T1/S1/D1 | Rest]):- ( prec(T, T1), !, { S + D =< S1 } ; prec(T1, T), !, { S1 + D1 =< S } ; true ), prec_constr(T/S/D, Rest). % podaj problem (opisi taske in podaj precedence) tasks([t1/5, t2/7, t3/10, t4/2, t5/9]). prec(t1, t2). prec(t1, t4). prec(t2, t3). prec(t4, t5).