首页 > 解决方案 > 使用间隔进行调度时如何在 CP 中获取当前时间

问题描述

我正在尝试在不同的机器上安排任务。这些机器具有动态可用资源,例如:

机器 1:最大容量 4 核。

在 T=t1 => 可用 CPU = 2 核;

在 T=t2 => 可用 CPU = 1 个核心;

每个间隔都有固定的时间(例如:1 分钟)。

所以在 CPLEX 中,我有一个 cumulFunction 来总结机器中使用的资源:

cumulFunction cumuls[host in Hosts] = 
   sum(job in Jobs) pulse(itvs[task][host], requests[task]);

现在问题出在约束中:

forall(host in Hosts) {
    cumuls[host] <= ftoi(available_res_function[host](**<<Current Period>>**));
}

我找不到获取当前时间段的方法,以便我可以将使用的资源与该特定时间段内的可用资源进行比较。

PS:available_res_function 是可用资源的 stepFunction。

非常感谢你的帮助。

标签: schedulingcplexjob-schedulingconstraint-programmingcp-optimizer

解决方案


您可以做的是在 cumul 函数中添加一组脉冲。

例如,在 sched_cumul 函数中,您可以更改:

cumulFunction workersUsage = 
   sum(h in Houses, t in TaskNames) pulse(itvs[h][t],1); 

进入

cumulFunction workersUsage = 
   sum(h in Houses, t in TaskNames) pulse(itvs[h][t],1)+pulse(1,40,3);

如果您想提及在时间 1 到 40 之间可用的工人数量减少了 3 个。


推荐阅读