gurobi 6.0.2 / setPWLObj 的分段线性目标崩溃

Posted

技术标签:

【中文标题】gurobi 6.0.2 / setPWLObj 的分段线性目标崩溃【英文标题】:Crashes with piecewise linear objective for gurobi 6.0.2 / setPWLObj 【发布时间】:2015-05-05 08:07:09 【问题描述】:

我们有一个复杂的优化问题,其中包括几个具有整数和连续变量的二次项(使用 Anaconda Python / Pycharm 和 Gurobi 6.0.2)。我们应用 setPWLObj 函数来近似二次目标分量。代码如下:

    m.addConstr(l1[t] == 1/2.0 * (hsqrt[t]+hQ[t]))
    m.addConstr(l2[t] == 1/2.0 * (hsqrt[t]-hQ[t]))
    hlx1 = linspace(-10, 10, 50)  
    hlx2 = linspace(-10, 10, 50)
    h1y1 = [0]*50
    hly2 = [0]*50

    for i in range(len(hlx1)):
        h1y1[i] = hlx1[i] * hlx1[i] * 7.348 / 1000.0
        hly2[i] = -hlx2[i] * hlx2[i] * 7.348 / 1000.0

    m.setPWLObj(l1[t], hlx1, h1y1)
    m.setPWLObj(l2[t], hlx2, hly2)

其中 l1 和 l2 是连续变量。

问题的行为不一致。在 Mac 上运行它主要提供退出代码 138 和 139(对应于总线错误 10),有时可以计算出相同的问题的解决方案。连续多次启动优化时尤其如此。这似乎是随机的。

在 Windows 机器上,Python 崩溃,或者提供了退出代码“-1073741819”。进一步搜索此退出代码并没有真正帮助我们。

【问题讨论】:

带有l1 等定义的完整示例会很有用。 【参考方案1】:

抱歉,拖了这么久,但我们解决了这个问题。

实际上,我们发现 python 崩溃是或者是由于 Gurobi 中的一个错误。根据我们向他们提交的请求,该错误已被删除。

如果 Gurobi 6.0.3。或以上使用错误不再存在。

【讨论】:

以上是关于gurobi 6.0.2 / setPWLObj 的分段线性目标崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu16.04安装Gurobi 的tips

学习笔记之Gurobi

如何绘制Gurobi得到的结果?

google or-tools 无法获得最佳 LP 结果,如 gurobi 示例

使用Gurobi的线性和双线性约束。

Gurobi 中一个目标函数的两个表达式