使用CPLEX进行热启动QP求解器

3
我正在尝试弄清楚如何热启动CPLEX的二次规划求解器。我特别想热启动非凸二次规划求解器,以达到一阶稳定点。
我认为start()函数应该可以做到这一点,但我不知道如何让求解器使用起始数据。
def setproblemdata(p):
    p.objective.set_sense(p.objective.sense.minimize)

    target = p.parameters.optimalitytarget.values
    p.parameters.optimalitytarget.set(target.first_order)

    p.linear_constraints.add(rhs=[20.0, 30.0], senses="LL")

    obj = [1.0, 2.0, 3.0]
    ub = [40.0, cplex.infinity, cplex.infinity]
    cols = [[[0, 1], [-1.0, 1.0]],
            [[0, 1], [1.0, -3.0]],
            [[0, 1], [1.0, 1.0]]]

    p.variables.add(obj=obj, ub=ub, columns=cols,
                names=["one", "two", "three"])

    qmat = [[[0, 1, 2], [0.0, -1.0, 0.0]],
        [[0, 1, 2], [-1.0, 2.0, -1.0]],
        [[0, 1, 2], [0.0, -1.0, 2.0]]]

    p.objective.set_quadratic(qmat)

    p.parameters.advance.set(2)
    s = p.start.status


def qpex1():
    p = cplex.Cplex()
    setproblemdata(p)
    p.start.set_start([], [], [40.000000, 24.333333, 10.666667], [], [], [])
    p.solve()

我的起点是CPLEX输出的一阶稳定点,但我发现它对我的输入没有响应。

一种可能的方法是,如果你制定了一阶条件,你最终会得到一个混合整数规划问题。你可以使用MIPSTART来解决这个问题。 - Erwin Kalvelagen
1个回答

1

在幕后,Cplex.start.set_start 方法调用 C Callable Library 中的 CPXcopystart。从 CPXcopystart 的文档中可以看到:

起始信息不适用于障碍优化器和混合整数优化器(MIP)。

因此,在您上面的测试程序中,预计起始信息将被忽略。


非常感谢您提供的参考资料。您是否了解任何允许热启动的非凸(有界)二次规划求解器? - ae0709

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接