【问题标题】:Check for positive value - constraint in gurobi python检查正值 - gurobi python中的约束
【发布时间】:2017-12-19 01:35:35
【问题描述】:

我想为此编写一个约束

if A > 0 then B = 1 else B = 0

其中 A 是决策变量。 B 是二元决策变量。执行此操作的最有效(如果有的话,对于内存和 CPU 使用)的方法是什么?

谢谢。

【问题讨论】:

    标签: python gurobi


    【解决方案1】:

    指标约束很简单:

     B=1 => A >= 0.001
     B=0 => A <= 0
    

    在 A 上使用良好的边界来帮助 Gurobi。

    如果你有好的界限,你也可以直接做:

     A <= B * U
     A >= L * (1-B) +  B * 0.001 
     L <= A <= U  
    

    【讨论】:

    • m.addConstrs(y[i,k,j,jp] = (y_bin[i,k,j,jp]) for i,k in userpair for j,jp in arcs);显然 userpair 有 2500 个索引, arcs 也有 2500 个索引。首先,这看起来像你的建议对吗?正如我所观察到的那样,添加约束的步骤需要花费大量时间并且会消耗大量内存。这正常吗?顺便说一句,我没有为 y 定义任何 U 和 L 界限,但我知道界限。如果我定义与否,它会改变什么吗?
    • 为什么你插入 0.001 作为偏差而不是直接插入 0?谢谢。
    • 您要求 A>0。
    • 哦,是的。没错。但有时我看到人们定义了一个非常小的 epsilon 值,例如 10e-6。它会改变或提高计算时间/效率吗?对不起,如果这个问题很愚蠢。
    • 存在可行性公差和缩放比例。
    猜你喜欢
    • 1970-01-01
    • 2015-07-31
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多