【发布时间】:2021-11-21 15:11:57
【问题描述】:
我正在尝试将 Endbeforestartconstraint 添加到我的受限编程问题中。但是,我收到一条错误消息,指出我的 end beforestart 不是数组类型。我不明白这一点,因为我几乎从 CPLEX 中的 sched_seq 示例中复制了约束和数据,我只将其更改为整数。
我试图通过约束来完成任务 3 和任务 1 将在任务 2 开始之前执行。
如何修复此约束的数组错误?
请在下面找到我的代码的相关部分
tuple Precedence {int pre;int post;};
{Precedence} Precedences = {<3,2>,<1,2>};
dvar interval task[j in Jobs] in release..due;
dvar interval opttask[j in Jobs][m in Machines] optional size duration[j][m];
dvar sequence tool[m in Machines] in all(j in Jobs) opttask[j][m]
dexpr int makespan = max(j in Jobs, m in Machines)(endOf(opttask[j][m]));
minimize makespan;
subject to {
// Each job needs one unary resource of the alternative set s (28)
forall(j in Jobs){
alternative(task[j], all(m in Machines) opttask[j][m]);
}
// No overlap on machines
forall(j in Jobs)
forall(p in Precedences)
endBeforeStart(opttask[j][p.pre],opttask[j][p.post]);
forall(m in Machines){
noOverlap(tool[m],transitionTimes);
}
};
execute {
writeln(task);
日期。
nbMachines = 2;
nbJobs = 3;
duration = [
[5,6],
[4,4],
[5,8]
];
release = 1;
due = 30;
【问题讨论】:
标签: optimization constraints cplex job-scheduling constraint-programming