首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行无延迟调度IBM OPL (CPLEX)

执行无延迟调度IBM OPL (CPLEX)
EN

Stack Overflow用户
提问于 2015-11-30 00:42:54
回答 2查看 126关注 0票数 0

我在IBM OPL中创建了一个调度:

代码语言:javascript
复制
dvar sequence schedule in all(j in Jobs) job[j]; 

如果CP模块生成解决方案,则该解决方案有时不是非延迟解决方案。然而,这是不允许的,因此我想执行一个无延迟的时间表。

我在主题到部分尝试了不同的解决方案...

代码语言:javascript
复制
 forall(t in Jobs)
   if (t > 1)
   startOf(job[t]) == endOf(job[t-1]);

..。但是,当作业t-1后面没有作业t时,这些方法(显然)会失败。

谁能给我一个关于如何解决这个问题的提示?

温馨的问候,弗朗茨

EN

回答 2

Stack Overflow用户

发布于 2015-11-30 17:10:09

您应该尝试使用endAtStart。(OPL约束用于限制区间变量的相对位置。)问候

票数 0
EN

Stack Overflow用户

发布于 2020-10-23 13:17:08

仅当您的作业始终准备好在前一个作业完成时启动时,endAtStart才能工作。如果不是这样,您将收到一个错误。

一个更好的解决方案将是考虑到目标中的不拖延。你要达到的目标是尽快开始每一项新工作。例如,您可以使用staticLex函数:

代码语言:javascript
复制
minimize staticLex(startOf(job[1]), startOf(job[2]),...);

但是,此表达式可能会变得非常长,您需要硬编码间隔数。一个小的解决方法是指定间隔递减加权因子

代码语言:javascript
复制
minimize sum(j in Jobs) startOf(job[j])*100^-ord(Jobs,j);

我希望这对你有用!

问候Jan

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33985230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档