OPL中有一个约束,其中我需要一个dvar,例如另一个dvar中的索引,但是CPLEX给我一个错误。我尝试使用https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=2be2ec22-db4b-4a2c-b164-615b9f735dc9&ps=25中所述的逻辑约束来避免此错误。但是现在出现此错误:
Error 5002: Q is not positive semi-definite
这是约束:
forall(j in pat,k in gior,w in slotp)
vinc4: (k==t[j])*y[j,k,w] ==
sum(g in giorni)(r[j,g,w+1]) +
sum(g in giorni)(l[j,g,w-1]);
答案 0 :(得分:0)
如果t[j]
是变量,则表达式k == t[j]
不是常数,而是约束的真值。如果约束为true,则此真值等效于变量,变量为1,否则为0。
似乎您将此“变量”乘以另一个y[j,k,w]
。因此,您最终得到一个二次约束模型:一个其中某些约束包含二次项的模型。只有这些模型是凸形的,CPLEX才能求解,并且由于错误,这里不是这种情况。