我正在研究 RCPSP 并希望对其应用 Preemption。
我将每项任务的持续时间分成相等的部分。现在,在这样做之后,我无法将优先约束应用于任务的每个单独的单元持续时间。
using CP;
int NbTasks = ...;
int NbRsrcs = ...;
range RsrcIds = 1..NbRsrcs;
int Capacity[r in RsrcIds] = ...;
tuple Task {
key int id;
int pt;
int dmds[RsrcIds];
{int} succs;
{int} pred;
}
{Task} Tasks=...;
tuple sub_task {
Task task;
int p_no;
}
{sub_task} sub_activities = {<t,i > | t in Tasks, i in 1..t.pt };
dvar interval itvs[t in Tasks] size t.pt;
dvar interval a[p in sub_activities] size 1;
cumulFunction rsrcUsage[r in RsrcIds] =
sum (p in sub_activities: p.task.dmds[r]>0) pulse(a[p], p.task.dmds[r]);
minimize max(t in Tasks) endOf(itvs[t]);
subject to {
forall (r in RsrcIds)
rsrcUsage[r] <= Capacity[r];
forall (t1 in Tasks, t2id in t1.succs)
endBeforeStart(itvs[t1], itvs[<t2id>]);
}
execute {
for (var p in sub_activities) {
writeln("subactivity of " + p.task.id + " - " + p.p_no + " starts at " + a[p].start + " Ends at " + a[p].end);
}
}
提前致谢。