“几乎凸”问题的分段线性二次优化

计算科学 Python 约束优化 非线性规划 非凸的
2021-12-23 23:19:30

我有一个 7-14 维分段线性成本函数,我想用以下形式的两个二次项来最小化:

f(X)=XtCX+di|xixi|2+iPi(xixi0)
ixi=1,0xi1

在哪里d>0,C是正定的并且X,X0是固定的。

Pi(xixi0)是连续的和分段线性的,具有“几乎不错”的形式。

在此处输入图像描述

和凸分段线性时,它们总是,但请注意,蓝色曲线并非对所有都是凸的。很近!0xixi00xixi00xixi0

的域来将其拆分为凸问题,这在计算上过于密集。27214xixi0,xixi0

对于分段线性、二次非凸函数,是否有一个好的(python)求解器?有没有更聪明的方法来简化这个问题?

1个回答

您可以使用 SOS2 变量(SOS2=Special Ordered Sets of Type 2)来实现分段线性函数。这种方法不关心凸性(即与分段线性函数相关的凸性;对于大多数求解器来说,二次项是凸的仍然很重要)。支持 SOS2 变量并可从 Python 调用的 MIQP(混合整数二次规划)求解器很容易获得。如果 MIQP 求解器不支持 SOS2 变量,我们可以用二进制变量模拟它们。一些需要考虑的求解器是 Cplex、Gurobi、SCIP。

如果非凸性仅出现在处,我们可以优化公式。我们仍然会得到一个 MIQP 模型。x=0