【问题标题】:unexpected VARSYM in zimplzimpl 中的意外 VARSYM
【发布时间】:2015-10-17 02:11:41
【问题描述】:

我的 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)内部,您对这个问题有什么想法吗?

【问题讨论】:

    标签: optimization linear-programming scip


    【解决方案1】:

    什么是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;
    

    【讨论】:

    • 是的,我都试过了,但是同样的错误发生了。但是,当我尝试将prod 替换为sum 时,没有出现错误!!你怎么看?可能是prod 函数中的错误?
    • 好的。我认为问题在于 zimpl 无法处理大小大于 2 的可变乘积项,即双线性项很好。您的 fd 类型的每个约束看起来像: ((1-a)*S[1])*((1-b)*S[2])*...*((1-k)*S[k] )
    • 每个约束看起来像:(1-(a*S[1]) ) * (1-(b*S[2]) ) *(1-(c*S[3]) ) ....您认为这种情况的解决方案是什么?
    • 您知道其他可以处理此类产品的语言吗?感谢您的所有 cmets。
    • 有一些商业语言,例如 mosel (xpress) 和 gams,可以处理这些限制。我认为在您的情况下,这将是直接在求解器中实现您的问题的最简单方法,例如 scip。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多