0

我在尝试寻找资源约束调度问题的解决方案时遇到了这个问题。每当我将 dvar 作为 forall 循环中的条件或 if 条件时,我都会遇到错误,指出“不允许使用决策变量(或表达式)“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;
4

2 回答 2

0

这是一个非常常见的错误。您正在编写的代码正在为 cplex构建模型。您(dvars,如您的 S)中的 cplex 变量通常在模型求解之前没有值,因此您不能在模型构建过程中使用它们的值。您需要重组您的问题,并且您可能需要在模型中使用额外的 bool 或 int 变量或指示符约束。

于 2017-06-03T07:40:59.760 回答
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); 
}

将工作

问候

于 2017-06-03T16:55:41.590 回答