我在尝试寻找资源约束调度问题的解决方案时遇到此问题。每当我把dvar作为一个条件放在一个forall循环中或者条件我有错误表明"决策变量(或表达式)" S"不允许"。
range activity = 1..16;
dvar float+ S[activity];
dvar float+ rd[jobs];
forall (i in activity)
forall (t in T:S[i]<=t<=S[i]+D[i]) //boolean b
b[i][t]==1;
forall (t in T)
forall (k in R)
sum (i in activity)b[i][t]*V[i][k]<=Rk[k];//human resources constraint
forall (j in jobs)
forall (t in T:rd[j]<=t<=S[maxact[j]])//boolean y
y[j][t]==1;
答案 0 :(得分:0)
这是一个非常常见的错误。您正在编写的代码是构建 cplex的模型。您的(dvars,如S)中的cplex变量通常在模型解决之前没有值,因此在模型构建过程中不能使用它们的值。您需要重构问题,您可能需要在模型中使用额外的bool或int变量或指标约束。
答案 1 :(得分:0)
range activity = 1..16; dvar float+ S[activity]; range jobs=1..3; range T=1..3; range R=1..4; dvar boolean b[activity][T]; dvar boolean y[jobs][T]; int D[activity]; int Rk[R]; int V[activity][R]; int maxact[j in jobs]=1; dvar float+ rd[jobs]; subject to { forall (i in activity) forall (t in T) //boolean b ((S[i]<=t) &&(t<=S[i]+D[i])) => (b[i][t]==1); forall (t in T) forall (k in R) sum (i in activity)b[i][t]*V[i][k]<=Rk[k];//human resources constraint forall (j in jobs) forall (t in T)//boolean y ((rd[j]<=t) && (t<=S[maxact[j]])) => (y[j][t]==1); }
将起作用
问候