2015-10-17 74 views
2

我在Zimpl代码中得到了意想不到的VARSYM。这里是我的代码的一部分:zimpl中出乎意料的VARSYM

param T := 0.8; 
var S[Sensors] binary; 

minimize nb_sensors : sum <i> in Sensors : S[ i ]; 

subto fd: 

    1- prod <k,l> in Sensors*Pipe : (1-ord(Proba[k,l],1,1) * S[k]) >= T; 

看来这个错误是因为我有一个变量(S[])是函数(prod)里面,你有关于这个问题的任何想法?

回答

0

什么是T,一个变量或一个常量?你有没有试着写产品括号:

1- (prod <k,l> in Sensors*Pipe : (1-ord(Proba[k,l],1,1) * S[k])) >= T; 

或改写是:

prod <k,l> in Sensors*Pipe : (1-ord(Proba[k,l],1,1) * S[k]) + T <= 1; 
+0

是的,我曾尝试他们两个,但同样的错误发生。但是,当我试图用'sum'替换'prod'时,没有发生错误!你怎么看?可能是'prod'函数中的一个错误? – Noureddine

+0

好的。我认为问题在于zimpl无法处理大于2的变量乘积的术语,即双线性项很好。您的类型fd的每个约束如下所示:((1-a)* S [1])*((1-b)* S [2])* ... *((1-k)* S [k] ) – Jakob

+0

每个约束条件如下:'(1-(a * S [1]))*(1-(b * S [2]))*(1-(c * S [3])).... “你认为这种情况下的解决方案是什么? – Noureddine