OPL for CPLEX 中的资源受限项目调度问题 (RCPSP) 实施

问题描述 投票:0回答:1

如果您能提供纠正我错误的指导,我将不胜感激。我正在尝试实现 Pritsker 等人的 RCPSP 模型。 (1969)。 链接:这里

// Example data
range J = 1..5;
range R = 1..3;
range T = 1..10;
int P[J] = [0,1,2,3,4]; 
int d[J] = [1, 1, 3, 5, 2];
int EF[J] = [1, 2, 1, 1, 1];
int LF[J] = [2, 3, 4, 6, 2];
int Tbar = sum(j in J) d[j];

// Resource usage matrix
int u[J][R] = [[1, 0, 2],
               [1, 1, 1], 
               [1, 1, 0],  
               [2, 0, 3],  
               [1, 1, 2]]; 

// Resource availability
int a[R]= [1,2,3];

// Decision Variables
dvar boolean x[J][T];

dexpr int CT = sum(j in J, t in EF[j]..LF[j])t*x[j][t];
minimize CT;

subject to {
  forall(j in J)
    sum (t in EF[j]..LF[j]) x[j][t] == 1;
  forall(j in J, i in J)
    sum (t in EF[j]..LF[j]) (t - d[j]) * x[j][t] - sum (t in EF[i]..LF[i]) t * x[i][t] >= 0;    
  forall(r in R, t in 1..Tbar) {
    sum(j in J) u[j][r] * sum(q in max(t, EF[j])..min(t + d[j] - 1, LF[j])) x[j][q] <= a[r];
  }
}

cplex opl
1个回答
0
投票

max 应该是 maxl!

如果我写

subject to {
  forall(j in J)
    ct1:sum (t in EF[j]..LF[j]) x[j][t] == 0;
  forall(j in J, i in J)
    ct2:sum (t in EF[j]..LF[j]) (t - d[j]) * x[j][t] - sum (t in EF[i]..LF[i]) t * x[i][t] >= 0;    
  forall(r in R, t in 1..Tbar) {
    ct3:sum(j in J) u[j][r] * sum(q in maxl(t, EF[j])..minl(t + d[j] - 1, LF[j])) x[j][q] <= a[r];
  }
}  

然后我得到一个解决方案

© www.soinside.com 2019 - 2024. All rights reserved.