簡體   English   中英

稀疏約束線性最小二乘求解器

[英]Sparse constrained linear least-squares solver

這極大SO回答指向一個良好稀疏求解為Ax=b ,但是我有制約x ,使得在每個元素x>=0<=N

此外, A 很大 (約2e6x2e6),但非常稀疏,每行<=4元素。

有什么想法/建議嗎? 我正在尋找類似於MATLAB的lsqlin但具有巨大的稀疏矩陣的東西。

我基本上試圖解決稀疏矩陣上的大規模有界變量最小二乘問題

替代文字

編輯:CVX中

cvx_begin
    variable x(n)
    minimize( norm(A*x-b) );
    subject to 
        x <= N;
        x >= 0;
cvx_end

你的問題類似於非負最小二乘問題(NNLS),可以表述為

$$ \\ min_x || Ax-b || _2 ^ 2 \\ text {subject to} x \\ ge 0 $$,

似乎存在許多算法。

實際上,如果除了原始的非負變量$ x $之外,你還可以或多或少地將問題轉換為NNLS問題,你可以創建額外的變量$ x'$並用線性約束$ x_i + x_i'= N $鏈接它們。 這種方法的問題在於,在最小二乘解決方案中可能無法完全滿足這些額外的線性約束 - 然后嘗試用大數量加權它們可能是合適的。

您正在嘗試使用框約束來解決最小二乘法。 標准稀疏最小二乘算法包括LSQR,最近還包括LSMR。 這些只需要您應用矩陣矢量產品。 要添加約束,請注意如果您位於框的內部(沒有任何約束是“活動”),那么您將繼續使用您選擇的任何內部點方法。 對於所有活動約束,您執行的下一次迭代將停用約束,或約束您沿約束超平面移動。 通過對您選擇的算法進行一些(概念上相對簡單的)適當修改,您可以實現這些約束。

但是,通常可以使用任何凸優化包。 我親自使用Matlab軟件包CVX解決了這個確切類型的問題,它使用SDPT3 / SeDuMi作為后端。 CVX只是圍繞這些半定程序求解器的非常方便的包裝器。

你的矩陣A ^ TA是正半正定的,所以你的問題是凸的; 在設置求解器時一定要充分利用它。

大多數首選的QP求解器都是Fortran和/或非自由的; 但是我聽說過有關OOQP的好消息( http://www.mcs.anl.gov/research/projects/otc/Tools/OOQP/OoqpRequestForm.html ),雖然獲取副本有點痛苦。

如果你有Matlab,這是你可以用TFOCS做的事情 這是您將用於解決問題的語法:

x = tfocs( smooth_quad, { A, -b }, proj_box( 0, N ) );

如果A太大而無法放入內存,則可以將A作為函數句柄傳遞。

如果您將模型重新表述為:


受制於:

那么這是一個標准的二次規划問題。 這是一種常見的模型,可以通過CPLEX或Gurobi等商業解算器輕松解決。 (免責聲明:我目前在Gurobi Optimization工作,之前曾在提供CPLEX的ILOG工作)。

CVXOPT怎么樣? 它適用於稀疏矩陣,似乎有些錐形編程求解器可能有所幫助:

http://abel.ee.ucla.edu/cvxopt/userguide/coneprog.html#quadratic-cone-programs

這是對上面doc中代碼的簡單修改,以解決您的問題:

from cvxopt import matrix, solvers
A = matrix([ [ .3, -.4,  -.2,  -.4,  1.3 ],
             [ .6, 1.2, -1.7,   .3,  -.3 ],
             [-.3,  .0,   .6, -1.2, -2.0 ] ])
b = matrix([ 1.5, .0, -1.2, -.7, .0])
N = 2;
m, n = A.size
I = matrix(0.0, (n,n))
I[::n+1] = 1.0
G = matrix([-I, I])
h = matrix(n*[0.0]  + n*[N])
print G
print h
dims = {'l': n, 'q': [n+1], 's': []}
x = solvers.coneqp(A.T*A, -A.T*b, G, h)['x']#, dims)['x']
print x

CVXOPT支持稀疏矩陣,因此對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM