用Python解决线性约束最小二乘问题


12

我要解决

minxAxb22,s.t.ixi=1,xi0,i.

认为这是一个二次问题,可以使用CVXOPT解决,但我不知道如何解决。


我希望这个问题不是针对compsci的。
tillsten 2012年

Geoff Oxberry:出于好奇,但是为什么要编辑线性部分?我认为这是问题描述的重要部分,对于非线性最小二乘优化,解决方案将大不相同。
tillsten 2012年

顺便说一句,其他编辑很棒!
tillsten 2012年

您可以通过自己的代码以非常有效的方式轻松解决此问题。无需CVXOPT。
罗伊'18

Answers:


11

我发现之前写了一个完整的答案(下面的线)CVXPY,其中(如CVX为MATLAB)做了所有硬的东西给你,有一个非常简单的例子几乎相同,你在这里。您只需要将相关行替换为

 p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])

我的旧答案是使用CVXOPT进行更困难的操作:

遵循Geoff提出的平方目标函数的建议,

Axb22=xTATbT,Axb=xTATAxbTAxxTAbbTb

当然,所有项都是标量,因此您可以转置第三个项,而删除最后一个项(因为它不依赖,因此不会改变给您的最小值,尽管您需要将其加回去)在求解之后才能获得正确的目标值)以获得 这(包括您的约束)具有二次程序的形式,如此处的CVXOPT文档,那里还有解决此类问题的示例代码。x x T A T A x b TA + A Txxx

xTATAxbT(A+AT)x

4

代替您解决的问题,解决

minxAxb22,s.t.ixi=1,xi0,i.

此问题是可微分的凸非线性优化问题,可以在CVXOPT,IPOPT或任何其他凸优化求解器中解决。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.