【问题标题】:Gurobi Python Accessible constraints for derived variablesGurobi Python 派生变量的可访问约束
【发布时间】:2020-02-25 10:06:42
【问题描述】:

我正在使用 Python 在 Gurobi 中实现 MILP。我的问题有几个来自决策变量的变量,例如:

d[tau] 是一个常数值,q[t,tau,k] 是一个二元决策变量。为了使符号更清晰,我想稍后重用这些变量,例如在目标或约束中。我不确定如何正确实施它。作为 Gurobi 的新手,我的方法如下:

  1. 我使用Model.addVar()y[t,tau,k] 声明为变量
  2. 我使用Model.addConstr() 创建了一个等式约束来强制执行y[t,tau,k]=q[t,tau,k]*d[tau]

在代码中:

y[t,tau,k] = dda_prob_IS.addVar(
    lb=0.0,
    vtype=GRB.CONTINUOUS,
    name=f'y[{t},{tau},{k}]')

dda_prob_IS.addConstr(
    y[t,tau,k] == q[t,tau,k]*d[tau],
    name = f'y_def[{t},{tau},{k}]')

我在实现的以下部分专门使用y[t,tau,k],因此我需要能够访问特定的y。有没有更优雅的方法来实现这一点,或者我的方法是否正确?

提前感谢您的支持。

【问题讨论】:

    标签: python-3.x linear-programming gurobi


    【解决方案1】:

    您可以使用addVars() 更高效地创建这些变量:

    y = dda_prob_IS.addVar(len(T), len(Tau), len(K)    
        lb=0.0,
        vtype=GRB.CONTINUOUS)
    

    这将创建一个您可以使用 3 个索引访问的元组。

    您还可以使用addConstr() 通过在调用中循环您的变量来一次添加多个类似的约束。

    【讨论】:

    • 谢谢,我实际上是在使用addVars(),我只是在这里解决问题。不过,我不确定我这样做的方式是否是对派生变量建模的正确程序?
    • 我没有看到另一种更简单或更好的方法。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多