this repo has no description
1int: jobs; % 作业的数量 2set of int: JOB = 1..jobs; 3int: tasks; % 每个作业的任务数量 4set of int: TASK = 1..tasks; 5array [JOB,TASK] of int: d; % 任务持续时间 6int: total = sum(i in JOB, j in TASK)(d[i,j]);% 总持续时间 7int: digs = ceil(log(10.0,total)); % 输出的数值 8array [JOB,TASK] of var 0..total: s; % 起始时间 9var 0..total: end; % 总结束时间 10 11% nooverlap 12predicate no_overlap(var int:s1, int:d1, var int:s2, int:d2) = 13 s1 + d1 <= s2 \/ s2 + d2 <= s1; 14 15constraint %% 保证任务按照顺序出现 16 forall(i in JOB) ( 17 forall(j in 1..tasks-1) 18 (s[i,j] + d[i,j] <= s[i,j+1]) /\ 19 s[i,tasks] + d[i,tasks] <= end 20 ); 21 22constraint %% 保证任务之间没有重叠 23 forall(j in TASK) ( 24 forall(i,k in JOB where i < k) ( 25 no_overlap(s[i,j], d[i,j], s[k,j], d[k,j]) 26 ) 27 ); 28 29solve minimize end; 30 31output ["end = \(end)\n"] ++ 32 [ show_int(digs,s[i,j]) ++ " " ++ 33 if j == tasks then "\n" else "" endif | 34 i in JOB, j in TASK ];