Lập trình tuyến tính với các ràng buộc ma trận


10

Tôi có một vấn đề tối ưu hóa giống như sau

minJ,Bij|Jij|s.t.MJ+BY=X

Ở đây, các biến của tôi là ma trận JB , nhưng toàn bộ vấn đề vẫn là một chương trình tuyến tính; các biến còn lại là cố định.

Khi tôi cố gắng nhập chương trình này vào các công cụ lập trình tuyến tính yêu thích của mình, tôi gặp một số rắc rối. Cụ thể, nếu tôi viết điều này dưới dạng chương trình tuyến tính "tiêu chuẩn", ma trận tham số MY cuối cùng sẽ được lặp lại một tấn lần (một lần cho mỗi cột của X ).

Có một thuật toán và / hoặc gói có thể đối phó với tối ưu hóa của mẫu ở trên không? Ngay bây giờ tôi sắp hết bộ nhớ vì MY phải được sao chép rất nhiều lần!


B một ma trận tham số, hay bạn có nghĩa là Y ? Các hình dạng của ma trận khác nhau là gì?
Geoffrey Irving

[Hi Geoffrey!] J và B là các biến, phần còn lại là các tham số. B có tương đối ít cột nhưng tất cả các kích thước còn lại đều khá lớn (không có gì là hình vuông).
Justin Solomon

[Xin chào!] Bạn nên chỉnh sửa bài đăng để không nói hai lần rằng B là một tham số.
Geoffrey Irving

1
Thật thú vị nhưng có lẽ vô dụng, phiên bản của vấn đề này với thay vìcó thể được giải quyết với một vài SVD. Jij2|Jij|
Geoffrey Irving

1
@Geoffrey, đó không phải là sự trùng hợp ngẫu nhiên :-)
Justin Solomon

Câu trả lời:


12

Tổng quat

Bạn có thể muốn thử một biến thể của Phương pháp đa hướng thay thế (ADMM), đã được tìm thấy để hội tụ nhanh một cách đáng ngạc nhiên đối với các vấn đề kiểu lasso. Chiến lược này là xây dựng vấn đề với Lagrangian tăng cường và sau đó tăng độ dốc cho vấn đề kép. Nó đặc biệt tốt đẹp cho đặc biệt này vấn đề regularized vì phần nonsmooth của mỗi lần lặp của phương pháp này có một giải pháp chính xác mà bạn chỉ có thể đánh giá phần tử bằng phần tử, trong khi phần trơn tru liên quan đến giải quyết một hệ thống tuyến tính.l1l1

Trong bài này, chúng tôi

  • rút ra một công thức ADMM tổng thể để khái quát hóa vấn đề của bạn,
  • rút ra các bài toán con cho mỗi lần lặp ADMM và chuyên môn hóa chúng cho tình huống của bạn, và sau đó
  • tra kết quả các hệ thống tuyến tính mà cần phải được giải quyết mỗi lần lặp, và phát triển một giải nhanh (hoặc preconditioner) dựa trên precomputing sự phân tách eigenvalue (hoặc xấp xỉ bậc thấp của chúng) cho và .MTMYYT
  • tóm tắt với một vài nhận xét kết luận

Hầu hết các ý tưởng lớn ở đây được đề cập trong bài đánh giá tuyệt vời sau đây,

Boyd, Stephen, et al. "Tối ưu hóa phân tán và học thống kê thông qua phương pháp số nhân xen kẽ." Nền tảng và Xu hướng® trong Machine Learning 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/ con / pdf / adm_distr_stats.pdf

Trước khi đi vào chi tiết, tôi muốn lưu ý rằng đây là câu trả lời của phương thức / thuật toán không phải là câu trả lời mã thực tế hiện có - nếu bạn muốn sử dụng phương pháp này, bạn sẽ cần phải tự thực hiện.

Công thức ADMM

Nói chung, giả sử bạn muốn giải quyết

minxi|xi|s.t.Ax=b.

Vấn đề trong bài viết gốc rơi vào thể loại này sau khi vector hóa thích hợp. (đây chỉ là về nguyên tắc - chúng ta sẽ thấy rằng việc vector hóa không cần phải được thực hiện trong thực tế)

Thay vào đó, bạn có thể giải quyết vấn đề tương đương, có Lagrangian started

minx,zi|xi|+α2||xz||2+β2||Azb||2s.t.Az=b&x=z,
L(x,z,λ,γ)=i|xi|+α2||xz||2+β2||Azb||2+λT(Azb)+γT(xz)=i|xi|+α2||xz+1αγ||2+β2||Azb+1βλ||2+α2||1αγ||2+β2||1βλ||2.

Phương pháp số nhân hướng xen kẽ giải quyết vấn đề kép, thông qua độ dốc tăng dần trên các biến kép, ngoại trừ dự đoán xen kẽ không chính xác trên các bài toán con kép. Tức là, người ta lặp lại

maxλ,γminx,zL(x,z,λ,γ),
xk+1=argminxL(x,zk,λk,γk)zk+1=argminzL(xk+1,z,λk,γk)γk+1=γk+α(xk+1zk+1)λk+1=λk+β(Azk+1b).

Trong một số điều kiện nhất định về các tham số và (được giải thích trong bài báo Boyd & Parikh được liên kết ở trên), phương pháp ADMM sẽ hội tụ đến giải pháp thực sự. Tốc độ hội tụ là tuyến tính, vì nó là cốt lõi của một phương pháp tăng dần độ dốc. Thông thường, nó có thể được tăng tốc thành siêu tuyến tính bằng 1) thay đổi các tham số và khi bạn đi dựa trên phương pháp phỏng đoán hoặc 2) bằng cách sử dụng gia tốc Nesterov. Để biết các lưu ý về việc thay đổi các tham số hình phạt, xem bài khảo sát Boyd và để sử dụng gia tốc Nesterov với ADMM, hãy xem bài viết sau,αβαβ

Goldstein, Tom, Brendan O'Donoghue và Simon Setzer. "Phương pháp tối ưu hóa hướng xen kẽ nhanh." Báo cáo CAM (2012): 12-35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf

Tuy nhiên, ngay cả khi tốc độ hội tụ tổng thể chỉ là tuyến tính, đối với các vấn đề , phương pháp đã được quan sát để tìm ra mô hình thưa thớt rất nhanh, và sau đó hội tụ chậm hơn trên các giá trị chính xác. Vì việc tìm ra mô hình thưa thớt là phần khó nhất, điều này rất tình cờ! Những lý do chính xác tại sao dường như là một lĩnh vực nghiên cứu hiện tại. Mọi người đều thấy mô hình thưa thớt hội tụ nhanh, nhưng dường như không ai biết chính xác tại sao nó lại xảy ra. Cách đây một thời gian, tôi đã hỏi Boyd và Parikh về điều này qua email và Parikh nghĩ rằng nó có thể được giải thích bằng cách diễn giải phương pháp trong bối cảnh hệ thống kiểm soát. Một lời giải thích heuristic khác về hiện tượng này được tìm thấy trong phần phụ lục của bài báo sau,l1

Goldstein, Tom và Stanley Osher. "Phương pháp Bregman phân chia cho các vấn đề thường xuyên L1." Tạp chí SIAM về Khoa học hình ảnh 2.2 (2009): 323-343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

Tất nhiên bây giờ khó khăn nằm ở việc giải các bài toán con cập nhật và cho tình huống cụ thể của bạn. Do Lagrangian là bậc hai theo , nên bài toán con cập nhật chỉ đơn giản yêu cầu giải một hệ tuyến tính. Biểu đồ con có vẻ khó hơn vì nó không đặc biệt, nhưng hóa ra có một công thức chính xác cho giải pháp có thể được áp dụng từng phần tử! Bây giờ chúng tôi thảo luận về các bài toán con này chi tiết hơn và chỉ định chúng cho vấn đề trong bài viết gốc.xzzzx

Thiết lập cho chương trình con cập nhật (hệ thống tuyến tính)z

Đối với bản cập nhật , chúng tôi có z

argminzL(xk,z,λk,γk)=argminzα2||xz+1αγ||2+β2||Azb+1βλ||2.

Chuyên về vấn đề của bạn, điều này trở thành,

argminZJ,ZBα2||Jk+1ZJ+1αΓJ||Fro2+α2||Bk+1ZB+1αΓB||Fro2+β2||MZJ+ZBYX+1αΛ||Fro2,

trong đó biểu thị định mức Frobenius (yếu ). Đây là một vấn đề tối thiểu hóa bậc hai, trong đó các điều kiện tối ưu hóa bậc nhất có thể được tìm thấy bằng cách lấy các đạo hàm riêng của mục tiêu đối với và và đặt chúng về 0. Đây là, ||||Frol2ZJZB

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

Như đã lưu ý trong các nhận xét của người đăng ban đầu Justin Solomon, hệ thống này cho là đối xứng nên độ dốc liên hợp là một phương pháp không có ma trận lý tưởng. Một phần sau thảo luận về hệ thống này và cách giải quyết / điều kiện tiên quyết chi tiết hơn.ZJ,ZB

Giải bài toán cập nhật (giải pháp ngưỡng phân tích)x

Bây giờ chúng ta chuyển sang chương trình con , x

argminxL(x,zk,λk,γk)=argminxi|xi|+α2||xzk+1αγk||2

Điều đầu tiên cần thấy là tổng có thể được chia thành phần tử theo phần tử,

i|xi|+α2||xzk+1αγk||2=i|xi|+α2i(xizik+1αγik)2,

Vì vậy, chúng ta có thể giải quyết song song phần tử bài toán bằng phần tử, thu được

xik+1=argminxi|xi|+α2(xizik+1αγik)2.

Dạng chung của phương trình này là,

mins|s|+α2(st)2.

Hàm giá trị tuyệt đối đang cố gắng kéo điểm tối ưu về phía , trong khi thuật ngữ bậc hai đang cố gắng kéo điểm tối ưu về phía . do đó, giải pháp thực sự nằm ở đâu đó trên đoạn giữa hai phần, với việc tăng có xu hướng kéo điểm tối ưu về phía và giảm kéo điểm tối ưu về .s=0s=t[0,t)αtα0

Đây là một hàm lồi nhưng nó không khác biệt ở mức 0. Điều kiện cho một điểm tối thiểu hóa là phần phụ của mục tiêu tại điểm đó chứa 0. Thuật ngữ bậc hai có đạo hàm và hàm giá trị tuyệt đối có đạo hàm cho , tập hợp con có giá trị là khoảng khi và đạo hàm cho . Do đó, chúng ta có được hàm con cho hàm mục tiêu tổng thể, α(st)1s<0[1,1]s=01s>0

s(|s|+α2(st)2)={1+α(st)s>0[1,1]+αt,s=0,1+α(st),s<0.

Từ đó, chúng ta thấy rằng phần con của mục tiêu tại chứa khi và chỉ khi , trong trường hợp đó là bộ thu nhỏ. Mặt khác, nếu không phải là bộ giảm thiểu, thì chúng ta có thể đặt đạo hàm một giá trị bằng 0 và giải cho bộ giảm thiểu. Làm điều này mang lại, s=00|t|1αs=0s=0

argmins|s|+α2(st)2={t1α,t>1α,0,|t|1α,t+1α,t<1α

Chuyên môn hóa kết quả này một lần nữa cho vấn đề thực sự mà chúng tôi đang cố gắng giải quyết trong câu hỏi ban đầu trong đó mang lại, Bản cập nhật cho chỉ đơn giản là t=Zijk1αΓijk

Jijk+1={Zijk1αΓijk1α,Zijk1αΓijk>1α,0,|Zijk1αΓijk|1α,Zijk1αΓijk+1α,Zijk1αΓijk<1α.
B
Bk+1=ZB1αΓB,

như ghi chú của poster gốc Justin Solomon trong các bình luận. Nhìn chung, thực hiện cập nhật cho chỉ cần lặp qua các mục trong ma trận của bạn và đánh giá các công thức trên cho mỗi mục.J,B

Bổ sung Schur cho hệ thốngZJ,ZB

Bước tốn kém nhất của phép lặp là giải hệ thống,

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

Cuối cùng, cần có một số nỗ lực để xây dựng một bộ giải / điều kiện tiên quyết tốt cho hệ thống này. Trong phần này, chúng tôi làm như vậy bằng cách vector hóa , tạo thành phần bù Schur , thực hiện một số thao tác sản phẩm Krnoecker và sau đó hủy kích hoạt. Hệ thống bổ sung Schur kết quả là một phương trình Sylvester được sửa đổi một chút .

Trong những gì sau đây các danh tính sau đây về vector hóa và các sản phẩm Kronecker là hoàn toàn chính:

  • vec(ABC)=(CTA)vec(B),
  • (AB)(CD)=ACBD ,
  • (AB)1=A1B1
  • (AB)T=ATBT .

Các danh tính này giữ bất cứ khi nào kích thước ma trận và tính không khả dụng sao cho mỗi bên của phương trình là một biểu thức hợp lệ.

Hình thức vector hóa của hệ thống là,

(αI+β[IMTM(YM)TYMYYTI])[vec(ZJ)vec(ZB)]=[vec(αJ+βMTX+ΓJMTΛ)vec(αB+βXYT+ΓBΛYT)],

hoặc,

[I(αI+βMTM)β(YM)TβYM(αI+βYYT)I][vec(ZJ)vec(ZB)]=[vec(F)vec(G)],

Trong đó và là ký hiệu ngưng tụ cho phía bên tay phải. Bây giờ chúng tôi thực hiện bổ sung block-gaussian-Elimination / Schur để loại bỏ khối dưới bên trái của ma trận, trong quá trình ngưng tụ các sản phẩm Kronecker. Đây là, FG

[I(αI+βMTM)β(YM)T0(αI+βYYT)Iβ2YYTM(αI+βMTM)1MT][vec(ZJ)vec(ZB)]=[vec(F)vec(G)βYM(αI+βMTM)1vec(F)].

Unvectorizing, hai phương trình chúng ta phải giải theo trình tự là,

  1. ZB(αI+βYYT)(βM(αI+βMTM)1MT)ZB(βYYT)=GβM(αI+βMTM)1FYT
  2. (αI+βMTM)ZJ=FβMTZBY.

Giải pháp của hệ thống bổ sung Schur khi vuông, thứ hạng caoY,M

Trong phần này, chúng tôi giải quyết hệ thống bổ sung Schur cho (phương trình 1. ở trên) bằng cách sử dụng các SVD đầy đủ được tính toán trước của ma trận và áp dụng một phiên bản sửa đổi của thuật toán Bartels-Stewart cho Sylvester phương trình. Thuật toán được sửa đổi một chút từ phiên bản tiêu chuẩn để tính thêm cho thuật ngữ thứ hai, điều này làm cho nó không hoàn toàn là phương trình Sylvester. Khi được tìm thấy thông qua phương trình đầu tiên, có thể được tìm thấy từ phương trình thứ hai một cách dễ dàng. Phương trình thứ hai là tầm thường để giải quyết thông qua bất kỳ phương pháp nào bạn muốn.ZBYYT,MMT,MTMβYYTZBZJ

Phương pháp này đòi hỏi một chi phí trả trước để tính toán trước hai SVD đầy đủ trước khi quá trình ADMM bắt đầu, nhưng sau đó nhanh chóng được áp dụng trong các lần lặp ADMM thực tế. Vì phương thức xử lý các SVD đầy đủ của các ma trận ràng buộc, nên nó phù hợp khi chúng gần với thứ hạng vuông và cao. Một phương pháp phức tạp hơn sử dụng các SVD xếp hạng thấp cũng có thể, nhưng được trình bày trong phần sau.

Phương pháp phát triển như sau. Hãy biểu thị precomputed đầy đủ phân tách giá trị độc nhất vô nhị và ngưng tụ phía bên tay phải là . Sau đó phương trình đầu tiên trở thành, Nhân bởi các yếu tố trực giao để xóa bên trái và bên phải và thiết lập một ẩn số tạm thời mới , điều này tiếp tục trở thành,

QDQT=YYT,WΣWT=MMT,VTVT=MTM
H
ZBQ(αI+D)QTWβΣ(αI+Σ)1ΣWTZBQDQT=H.
A=WTZBQ
A(αI+D)βΣ(αI+Σ)1ΣAD=WHQT.

Bây giờ chúng ta có thể tìm bằng cách giải hệ chéo , A

((αI+D)I+DβΣ(αI+Σ)1Σ)vec(A)=vec(WHQT).

Khi tìm thấy , chúng tôi tính và biết chúng tôi giải phương trình thứ hai ở trên cho , điều này không quan trọng vì chúng tôi đã có phân tách eigenvalue cho .AZB=WAQTZBZJMTM

Chi phí trả trước là tính toán hai phép phân tách xác định giá trị xác định dương đối xứng của và , và sau đó chi phí mỗi lần lặp cho một giải pháp hoàn chỉnh bị chi phối bởi một số phép nhân ma trận, theo cùng một thứ tự cường độ như làm 1 phụ đề CG. Nếu các phân tách eigenvalue trả trước quá tốn kém, thì chúng có thể được tính toán một cách không chính xác bằng cách, ví dụ, chấm dứt sớm lặp Lanczos và giữ các hàm riêng lớn nhất. Sau đó, phương pháp có thể được sử dụng như một điều kiện tiên quyết tốt cho CG hơn là một người giải trực tiếp.MTMYYT

Phương pháp giải khi rất hình chữ nhật hoặc có xấp xỉ thứ hạng thấpM,Y

Bây giờ chúng tôi chú ý đến việc giải quyết hoặc tiền điều kiện khi a) các ma trận đầu vào rất hình chữ nhật - có nghĩa là chúng có nhiều hàng hơn các cột hoặc ngược lại - hoặc b) chúng có xấp xỉ thứ hạng thấp. Đạo hàm dưới đây liên quan đến việc sử dụng rộng rãi công thức Woodbury, bổ sung Schur và các thao tác tương tự khác.ZJ,ZBM,Y

Chúng tôi bắt đầu với hệ thống bổ sung Schur của chúng tôi,

(αI+βYYT)Iβ2YYTM(αI+βMTM)1MT.

Một vài thao tác biến hệ thống này thành một dạng đối xứng hơn,

(αI+βIMMT+βYYTI)vec(ZB)=(I(I+βαMMT))vec(H).

Bây giờ chúng tôi mang lại các xấp xỉ thứ hạng thấp. Đặt là các xấp xỉ thứ hạng thấp của SVD hoặc xấp xỉ của và ( là giữ chỗ và không đã sử dụng). Việc thay thế chúng vào hệ thống của chúng tôi sẽ tạo ra ma trận nghịch đảo sau mà chúng tôi muốn áp dụng,

QD1/2Q2T=YWΣ1/2VT=M
YMQ2
(αI+βIWΣWT+βYYTI)1.

Vì ma trận mà chúng ta đảo ngược là một bản cập nhật thứ hạng thấp cho danh tính, nên chiến lược hợp lý là thử sử dụng công thức Woodbury,

(A+UCUT)1=A1A1U(C1+UTA1U)1UTA1.

Tuy nhiên, một số chăm sóc là cần thiết vì các mảnh xếp hạng thấp và không trực giao. Do đó, để áp dụng công thức Woodbury, chúng tôi thu thập cả các bản cập nhật thứ hạng thấp thành một bản cập nhật lớn duy nhất. Doint như vậy và áp dụng công thức Woodbury năng suất, IWYI

(1αI+β[IWQI][IΣDY][IΣTQTI])1=αIβα2[IWQI][I(Σ1+βαI)βαQWTβαQTW(D1+βαI)Y]1[IΣTQTI].

Nghịch đảo lõi có thể được tính theo công thức nghịch đảo khối 2 x 2,

[ABBTC]1=[(ABC1BT)1A1B(CBTA1B)1C1BT(ABC1BT)1(CBTA1B)1].

Bài đăng này đã đủ dài, vì vậy tôi sẽ tiết kiệm các chi tiết dài của phép tính, nhưng kết quả cuối cùng là việc cắm các mô hình con cần thiết vào nghịch đảo khối và nhân mọi thứ thông qua việc mang lại hình thức rõ ràng sau cho nghịch đảo tổng thể,

(αI+βIMMT+βYYTI)1=1αIβα2(t11+s11+t12+s12+t21+s21+t22+s22),

trong đó

t11=αβIWl1WTs11=(QWl1)D11(QTl1WT)t12=αβQh1QTWl1WTs12=(Qh1Wl1)D22(h1QTWT)t21=t12s21=(Qh1W)D22(h1QTl1WT)t22=αβQh1QTIs22=(Qh1W)D22(h1QTWT)D11=αβ(hIIl1)1D22=αβ(Ilh1I)1l=αβΣ1+Ih=αβD1+I.

Trong biểu mẫu này, chúng ta có thể áp dụng nghịch đảo và tìm thuật ngữ theo thuật ngữ thông qua 8 bánh sandwich nhân ma trận trái và phải. Công thức chung để áp dụng tổng số sản phẩm Kronecker là, ZB

((A1B1)+(A2B2)+)vec(C)=vec(B1TCA1+B2TCA2+).

Lưu ý rằng tất cả các nghịch đảo rõ ràng mà chúng tôi đã kết thúc là đường chéo, vì vậy không có gì để được "giải quyết".

Mã giải tuyến tính

Tôi đã triển khai hai bộ giải ở trên trong Matlab. Dường như hoạt động tốt. Mã người giải quyết ở đây.zJ,ZB

https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m

Một kịch bản thử nghiệm để kiểm tra rằng các bộ giải làm việc ở đây. Nó cũng cho thấy bằng cách ví dụ cách gọi mã bộ giải.

https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m

Kết luận

Các phương thức kiểu ADMM rất phù hợp cho các vấn đề như thế này, nhưng bạn sẽ cần phải triển khai thực hiện của riêng mình. Cấu trúc tổng thể của phương thức khá đơn giản nên việc thực hiện không quá khó trong một cái gì đó như MATLAB.

Phần còn thiếu trong bài đăng này cần được chỉ định để xác định đầy đủ phương pháp cho vấn đề của bạn là một lựa chọn tham số hình phạt . May mắn thay, phương pháp này thường khá mạnh mẽ miễn là các tham số vales không điên. Bài báo Boyd và Parikh có một phần về các tham số hình phạt cũng như các tham chiếu trong đó, nhưng tôi sẽ chỉ thử nghiệm các tham số cho đến khi bạn có được tỷ lệ hội tụ hợp lý.α,β

Các chiến lược của bộ giải được trình bày có hiệu quả cao nếu các ma trận ràng buộc là a) dày đặc, vuông và xếp hạng cao hoặc b) có xấp xỉ thứ hạng thấp tốt. Một giải hữu ích mà có thể là một chủ đề công việc trong tương lai sẽ là một giải tối ưu hóa cho các trường hợp sau đây - ma trận hạn chế là thưa thớt và squareish và xếp hạng cao, nhưng tồn tại một preconditioner tốt cho . Đây sẽ là trường hợp nếu, ví dụ, là một Laplacian rời rạc.ZJ,ZBMαI+MMTM


Thực hiện điều này ngay bây giờ! Để kiểm tra, ma trận giải cho và phải là đối xứng / xác định dương vì nó xuất phát từ các bình phương nhỏ nhất, phải không? Điều này theo kinh nghiệm dường như là đúng :-). Vì vậy, CG là một lựa chọn tốt hơn so với GMRES? ZBZJ
Justin Solomon

Ngoài ra, tôi nghĩ cập nhật cho B là sai? Tôi đang giải quyết vấn đề này chi tiết hơn, nhưng nhớ lại B không xuất hiện trong hàm năng lượng của tôi (không có hạn), vì vậy tôi không chắc chắn chỉ nên lấy các giá trị trong Tôi đang nghĩ về điều này sai? Cảm ơn! |B|±(11/α).
Justin Solomon

1
[errr đúng hơn, ]B=ZBΓB/α
Justin Solomon

3
Kinh ngạc! Sau khi đưa vào các công thức của riêng tôi cho và (có thể gần / tương đương với những gì bạn đã đăng nhưng có gì đó không hoạt động), điều này vượt xa so với phương pháp IRLS. Cảm ơn! JB
Justin Solomon

1
Tin tốt. Rất tốt để xem khi đóng góp ở đây dẫn đến kết quả thực sự.
Michael Grant

5

Bạn có thể muốn sử dụng một phương pháp không có ma trận để lập trình tuyến tính. Tôi không biết về bất kỳ phương pháp nào đặc biệt hướng đến lập trình tuyến tính, nhưng vẫn tồn tại các phương pháp điểm bên trong không có ma trận cho các chương trình bậc hai và cho các chương trình phi tuyến nói chung. Trường hợp chương trình bậc hai tương ứng chính xác với vấn đề của bạn, trong đó các hệ số dạng bậc hai đều là số không. (Bạn cũng có thể điều chỉnh các phương thức sử dụng các giải pháp tuyến tính chính xác cho cấu trúc của vấn đề của mình, nhưng cách thực hiện theo yêu cầu đó có thể không đáng giá và ít thực tế hơn so với sử dụng phương pháp không có ma trận.)

Tôi không biết bất kỳ gói tối ưu hóa thương mại nào thực hiện các biến thể không có ma trận của các phương thức điểm bên trong. IPOPT được cho là thực hiện một phương pháp điểm bên trong không có ma trận để lập trình phi tuyến, nhưng tôi không thể theo dõi các lệnh gọi API cho phép bạn sử dụng nó.

Ngoài CVX, có lẽ bạn có thể sử dụng GAM hoặc AMPL để nhập ma trận một lần và thiết lập các ràng buộc của bạn trong ngôn ngữ lập mô hình để sử dụng ma trận đó. Tuy nhiên, các phương thức được sử dụng bởi các phụ trợ của bộ giải cho CVX, GAM và AMPL không sử dụng các bộ giải không có ma trận; tất cả sẽ yêu cầu ma trận hệ số đầy đủ cho chương trình tuyến tính ở dạng chuẩn, sẽ rất lớn (nó sẽ là sản phẩm Kronecker của ma trận). Điều có thể sẽ xảy ra là bạn nhập chương trình tuyến tính của mình vào biểu mẫu ở trên bằng ngôn ngữ lập mô hình và sau đó ngôn ngữ lập mô hình sẽ dịch dữ liệu thành dạng có thể sử dụng được bởi người giải quyết phụ trợ. Biểu mẫu này sẽ yêu cầu ma trận rất lớn và tôi nghi ngờ bạn sẽ gặp phải các loại lỗi tương tự (trừ khi bạn chạy trên một máy có đủ bộ nhớ).


Hình như tôi đã thử tất cả những điều đúng đắn! Ban đầu tôi đã thử nghiệm với CVX và nó đã thất bại, vì vậy tôi đã chuyển sang IPOPT. Nhưng IPOPT đã có cùng một vấn đề. Tôi không biết rằng nó có tùy chọn không có ma trận, vì vậy tôi sẽ xem liệu tôi có thể tìm ra nó không.
Justin Solomon

Tôi không chắc chắn nếu GAM / AMPL sẽ giúp vấn đề của tôi. Tôi rất vui khi giải quyết vấn đề dưới bất kỳ hình thức nào sẽ giúp người giải quyết làm đúng, nhưng như bạn nói đằng sau hậu trường, việc sử dụng sản phẩm Kronecker sẽ không hiệu quả.
Justin Solomon

4

Bạn có đủ khả năng cho những SVD Geoffrey Irving được đề cập không? Nếu bạn có thể, tôi sẽ xem xét một cách tiếp cận lặp lại bình phương nhỏ nhất (IRLS) . Cách tiếp cận này sẽ giải quyết các vấn đề có dạng trong đó là ma trận trọng số.

minimizeijWijJij2subject toMJ+BY=X
W

Các lần lặp bắt đầu với là ma trận tất cả; điều này mang lại một tối ưu . Việc lặp lại tiến hành với trong đó là một hằng số nhỏ ngăn chia cho 0. Tôi không hoàn toàn chắc chắn về các tiêu chí hội tụ, nhưng có lẽ liên kết Wikipedia tôi cung cấp ở trên có thể cung cấp cho bạn các tài liệu tham khảo.W(0)J(0)

Wij(k+1)=|max{Jij(k),ϵ}|1
ϵ

Bạn cũng có thể xem xét một phương pháp đặt hàng đầu tiên được làm mịn. TFOCS, mà tôi là đồng tác giả, có thể xử lý việc này bằng cách sử dụng bộ giải "làm phẳng hình nón kép" (SCD), nhưng nó sẽ không dễ sử dụng.

Nếu bạn muốn thử một phương pháp điểm nội thất không ma trận, hãy đọc tác phẩm của Jacek Gondzio.

EDIT: hmm, có thể là trường hợp IRLS sẽ không thể sử dụng SVD để tính toán các giải pháp. Nếu vậy tôi sẽ rơi trở lại một trong những lựa chọn khác.


1
Tôi không chắc liệu tôi có thể sử dụng SVD ở đây không, nhưng IRLS là một ý tưởng tuyệt vời bất kể! Tốc độ không phải là mối quan tâm nhiều như trí nhớ, và thật xấu hổ tôi đã sử dụng IRLS cho một nghiên cứu liên quan vài tháng trước và nó hoạt động rất tốt (tự đá mình vì đã không thử điều này trước đây!). Ngay cả khi không có SVD cho IRLS, vẫn có thể thực hiện được bằng cách sử dụng bộ giải tuyến tính như CG không cần hệ thống đầy đủ. Trên thực tế, CG có thể bị dừng với các ràng buộc khá lỏng lẻo trước khi điều chỉnh như bạn đề xuất. Cũng xem xét một cách tiếp cận ADMM, nhưng tôi có ít kinh nghiệm hơn với điều đó. Wij
Justin Solomon

Vâng, ADMM cũng sẽ rất tuyệt. Tôi thực sự đã viết lên một phần đề nghị bạn loại bỏ Y hoàn toàn, nhưng sau đó tôi thấy rằng không vuông. M
Michael Grant

1
Đã triển khai chiến lược IRLS - nó hội tụ nhưng về mặt số lượng không hoạt động tốt vì hệ thống tuyến tính mà nó phải giải quyết là không có điều kiện nhờ vào một loạt các ; sử dụng GMRES để giải quyết hệ thống. Sẽ thử ADMM tiếp theo! w
Justin Solomon

2

Bạn có thể thử sử dụng CVX , điều này sẽ cho phép bạn viết mã theo chính xác dạng bạn đã viết (nghĩa là với là ma trận chứ không phải là vectơ). Có lẽ nó sẽ được giải quyết bằng cách sử dụng một bộ giải lồi tổng quát hơn thay cho bộ giải LP, nhưng nếu bộ giải lồi thành công thì tôi cho rằng bạn sẽ không phiền.X

Một khả năng khác: sử dụng một bộ giải cho phép các ma trận ràng buộc của bạn được lưu trữ dưới dạng các ma trận thưa thớt. Điều này vẫn sẽ đòi hỏi nhiều bộ nhớ hơn những gì bạn cần, nhưng ít hơn nhiều so với việc bạn lưu trữ chúng dưới dạng ma trận dày đặc. Trong CVX, nếu bạn sử dụng, kronbạn nhận được một ma trận thưa thớt, vì vậy sẽ rất đơn giản để thử điều này.


Nếu Python sẽ thuận tiện hơn MATLAB vì bất kỳ lý do gì, thì cũng có cvxpy mặc dù nó không hoàn toàn bóng bẩy như cvx.
k20

Sự nghi ngờ của tôi là cách tiếp cận này sẽ hoạt động một cách hời hợt, và rồi thất bại sau khi ngôn ngữ mô hình CVX biến đổi dữ liệu đầu vào thành dạng có thể sử dụng được bởi các bộ giải phụ trợ của nó (sẽ giải quyết các chương trình tuyến tính, chương trình bậc hai, chương trình hình nón bậc hai, chương trình bán chính xác và chương trình hình học). Tôi giải thích tại sao trong câu trả lời của tôi. Phần cuối của Gurobi là một trình giải LP tốt nhất (trong số các loại khác), vì vậy sử dụng CVX với thuật toán đó có lẽ là cách tốt nhất bạn có thể làm về mặt triển khai, gọi là CVX từ API ngôn ngữ được biên dịch.
Geoff Oxberry

1
Như Geoff nói, không có lớp mô hình nào sẽ giúp bạn ở đây. LP kết quả có dữ liệu được lặp lại cho bất kỳ bộ giải chung chung tiêu chuẩn nào. Để phá vỡ điều này, bạn sẽ phải sử dụng (phát triển) một bộ giải dựa trên lời tiên tri, tức là một bộ giải, về cơ bản, dựa trên việc trả lại cho một giá trị đã cho của và / hoặc một số cắt phù hợp, và sau đó làm việc với mô tả đó thay thế. MJ+BYXJ,Y
Johan Löfberg

Vâng, tôi đang gặp chính xác vấn đề Geoff đề cập. Trong thực tế, tôi đã sử dụng CVX cho dự đoán ban đầu của tôi. Tôi cũng đã thử gọi Gurobi trực tiếp, nhưng cách duy nhất tôi có thể nghĩ là làm điều đó là thực hiện cùng một vấn đề không kiểm soát.
Justin Solomon

1
Tôi nghĩ bạn sẽ phải tự lăn lộn
Johan Löfberg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.