scheduled-tasks - 在 CPLEX 中进行任务调度和资源分配时如何对管道处理进行建模?
问题描述
我提出了一个任务调度和资源分配问题,其中资源可以开始运行具有复杂条件的新任务。
- 如果从开始在偶数时间单位开始的前一个任务至少经过 2n 个时间单位,则资源可以在偶数时间单位开始新任务。
- 这同样适用于奇数时间单位。
以下是对单个资源的有效调度。每个数字代表当时已经开始了一项新任务。
- 0, 1, 2n, 2n+1, 4n, 4n+1, ...
我有很多任务之间存在优先关系(我知道如何处理优先关系)和一些此类资源。我按照以下方式进行了调度,但没有产生最佳结果:
- 虽然任务可以在奇数或偶数时间单位开始,但我使用“forbidStart”和“stepFunction”限制一半任务在偶数时间单位开始,另一半在奇数时间单位开始。
- 对于每个资源 s,我考虑了两个“cumulFunction”s_even 和 s_odd。
- 禁止在偶数(奇数)时间单位开始的任务需要 s_odd (s_even) 资源。我使用“cumulFunction”和“pulse”定义了这个约束。
尽管上述过程产生了一个有效的调度,但这还不够,因为我正在寻找一个最佳解决方案。有人知道如何在 CPLEX 中解决这个问题吗?
解决方案
正如Philippe Laborie在https://www.ibm.com/developerworks/community/forums/html/topic?id=ac7a4fa1-f304-420c-8302-18501b4b7602&ps=25所说
只需考虑一个长度为 2n 的附加间隔变量“任务”,它代表任务,并在两个可选任务“taskEven”和“taskOdd”上有一个替代方案。这两个区间是您的模型中已有的区间(具有足够的 forbidStart 约束,并且对足够的资源有贡献)。
推荐阅读
- dart - dart pub 版本冲突
- python - Colab 不渲染 mathjax sympy 输出
- sas - 将excel表导入SAS
- android - 使用 Android 的导航组件时列出 backstack 上的 Fragments
- java - 反转图表 - 试图提高节点效率
- wordpress - 即使高级设置>自定义css说“仅限专业版”,我能否以某种方式给出这个短代码自定义css?
- azure-active-directory - 如果清除本地状态,什么可以允许 Azure AD 应用程序访问而无需注销?
- django - 表单多选 - 无法分配 QuerySet,必须是用户实例
- python - 按下空格使图像显示 300 毫秒
- mysql - DATE_SUB(NOW(), INTERVAL 5 MINUTE) 在 PDO 语句中不起作用