【问题标题】:Gurobi: Relaxing Infeasible Model in PythonGurobi:放松 Python 中的不可行模型
【发布时间】:2017-11-10 23:07:26
【问题描述】:

我在 Gurobi 的数学符号中设置了以下约束。 x 变量是二进制的。 sigmaplussigmaminus 变量是正数且连续的。

Subject To
 858 x[1,_2] + 1092 x[1,_3] - sigmaplus[1] + sigmaminus[1] = -200  # Constraint 1
 858 x[1,_2] + 1092 x[1,_3] >= -1800 # Constraint 2
 858 x[1,_2] + 1092 x[1,_3] <= 0 # Constraint 3
 x[1,_2] + x[1,_3] = 1 # Constraint 4
 720 x[2,_1] + 990 x[2,_2] - sigmaplus[2] + sigmaminus[2] = 2000 # Constraint 5
 720 x[2,_1] + 990 x[2,_2] >= -500 # Constraint 6
 720 x[2,_1] + 990 x[2,_2] <= 3000 # Constraint 7
 x[2,_1] + x[2,_2] = 1 # Constraint 8
 ...
 ...

如您所见,constraint 2constraint 3 使解决方案不可行。当我的 x 变量出现这种情况时,我希望 Gurobi 通过将那些冲突的 x 值设置为 0 来进行优化。因此,对于这个示例,我希望 x[1,2]x[1,3] 为等于 0,以便在没有这些变量的情况下找到可行的解决方案。有什么方法可以为Gurobi 7.0.2 编码。

另外,我正在使用2.7.12 Anaconda 4.2.0(64-bit)。以下是我用来缓解问题以找到解决方案的代码。

if m.status == GRB.INFEASIBLE:
    m.feasRelaxS(1, False, False, True)

这在某些情况下可以正常工作。我的意思是,它将那些不可行创建变量设置为0。但是,在constraints 1,2,3不创建任何不可行的其他一些情况下,constraint 4创建不可行,求解器增加@987654337的右侧@。所以,在这种情况下,我需要找到一种方法将它们设置为 0。任何建议表示赞赏。

【问题讨论】:

    标签: python gurobi feasibility


    【解决方案1】:
    feasRelaxS ( relaxobjtype, minrelax, vrelax, crelax )
    

    参数:

    relaxobjtype:找到最小成本松弛时使用的成本函数。

    minrelax:要执行的可行性放松类型。

    vrelax:表示是否可以放宽变量界限。

    crelax:表示是否可以放松约束。

    此函数修改模型对象以创建可行性松弛。 此方法提供了许多用于指定松弛的选项。 minrelax 参数是一个布尔值,用于控制所创建的可行性松弛类型。如果 minrelax=False,则优化返回的模型会给出一个解决方案,以最大限度地降低违规成本。如果 minrelax=True,则优化返回的模型会找到一个使原始目标最小化的解决方案,但只能从那些使违规成本最小化的解决方案中找到。 如果您希望您的模型放宽约束不可行的变量值,请将 vrelax 从 False 更改为 True。 您可以阅读以下给出的完整说明:https://www.gurobi.com/documentation/7.5/refman/py_model_feasrelaxs.html

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多