Pemrograman linier dengan batasan matriks


10

Saya memiliki masalah pengoptimalan yang terlihat seperti berikut ini

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

Di sini, variabel saya adalah matriks J dan B , tetapi seluruh masalahnya masih berupa program linier; variabel yang tersisa diperbaiki.

Ketika saya mencoba memasukkan program ini ke alat pemrograman linear favorit saya, saya mengalami beberapa masalah. Yaitu, jika saya menulis ini dalam bentuk program linear "standar", parameter matriks M dan Y akhirnya diulang satu ton kali (satu kali untuk setiap kolom X ).

Apakah ada algoritma dan / atau paket yang dapat menangani optimasi formulir di atas? Saat ini saya kehabisan memori karena M dan Y harus disalin berkali-kali!


Apakah B parameter matriks, atau maksud Anda Y ? Apa saja bentuk berbagai matriks?
Geoffrey Irving

[Hai Geoffrey!] J dan B adalah variabel, sisanya adalah parameter. B memiliki kolom yang relatif sedikit tetapi semua dimensi yang tersisa cukup besar (tidak ada yang persegi).
Justin Solomon

[Hello!] Anda harus mengedit posting untuk tidak mengatakan dua kali bahwa B adalah parameter.
Geoffrey Irving

1
Menarik tapi mungkin tidak berguna, versi masalah ini dengan bukannyadapat diselesaikan dengan beberapa SVD. | J i j |Jij2|Jij|
Geoffrey Irving

1
@ Geoffrey, itu bukan kebetulan :-)
Justin Solomon

Jawaban:


12

Gambaran

Anda mungkin ingin mencoba varian dari Alternating Directions Method of Multipliers (ADMM), yang ternyata sangat cepat menyatu untuk masalah tipe laso . Strateginya adalah merumuskan masalah dengan Lagrangian yang diperbesar dan kemudian melakukan pendakian gradien pada masalah ganda. Ini sangat baik untuk masalah teregulasi l1 karena bagian yang tidak mulus dari setiap iterasi metode memiliki solusi yang tepat Anda hanya dapat mengevaluasi elemen demi elemen, sedangkan bagian yang halus melibatkan penyelesaian sistem linear.l 1l1l1

Dalam posting ini kita

  • dapatkan formulasi ADMM keseluruhan untuk generalisasi masalah Anda,
  • dapatkan subproblem untuk setiap iterasi ADMM dan khususkan mereka untuk situasi Anda, dan kemudian
  • menyelidiki sistem linear yang dihasilkan bahwa kebutuhan untuk dipecahkan setiap iterasi, dan mengembangkan pemecah cepat (atau preconditioner) berdasarkan precomputing yang dekomposisi eigen (atau perkiraan peringkat rendah daripadanya) untuk dan .Y Y TMTMYYT
  • merangkum dengan beberapa kata penutup

Sebagian besar ide besar di sini tercakup dalam makalah ulasan yang luar biasa berikut,

Boyd, Stephen, dkk. "Optimalisasi terdistribusi dan pembelajaran statistik melalui metode pengganda arah bergantian." Yayasan dan Tren® dalam Pembelajaran Mesin 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf

Sebelum masuk ke perincian, saya ingin mencatat bahwa ini adalah metode / jawaban algoritma bukan jawaban kode praktis yang ada - jika Anda ingin menggunakan metode ini, Anda perlu menggulung implementasi Anda sendiri.

Formulasi ADMM

Secara umum, misalkan Anda ingin menyelesaikan

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

Masalah dalam posting asli termasuk dalam kategori ini setelah vektorisasi yang sesuai. (ini hanya pada prinsipnya - kita akan melihat bahwa vektorisasi tidak perlu dilakukan dalam praktik)

Anda bisa menyelesaikan masalah yang setara, yang memiliki bahasa Lagrangian L(x,z,λ,γ)=

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.

Metode arah bolak-balik dari pengganda memecahkan masalah ganda, melalui kenaikan gradien pada variabel ganda, kecuali dengan proyeksi bolak-balik yang tidak tepat pada subproblem ganda. Yaitu, satu iterasi x k + 1

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).

Di bawah kondisi ringan tertentu pada parameter dan (dijelaskan dalam kertas Boyd & Parikh yang ditautkan di atas), metode ADMM akan menyatu dengan solusi yang sebenarnya. Tingkat konvergensi adalah linier, karena pada intinya metode kenaikan gradien. Seringkali dapat dipercepat menjadi superlinear dengan 1) mengubah parameter dan saat Anda menggunakan heuristik, atau 2) menggunakan akselerasi Nesterov. Untuk catatan tentang mengubah parameter penalti, lihat kertas survei Boyd, dan untuk menggunakan akselerasi Nesterov dengan ADMM, lihat kertas berikut,β α βαβαβ

Goldstein, Tom, Brendan O'Donoghue, dan Simon Setzer. "Metode optimasi arah bolak-balik cepat." Laporan CAM (2012): 12-35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf

Namun, bahkan jika keseluruhan tingkat konvergensi hanya linier, untuk masalah metode telah diamati untuk menemukan pola sparsity sangat cepat, dan kemudian bertemu lebih lambat pada nilai yang tepat. Karena menemukan pola sparsity adalah bagian tersulit, ini sangat kebetulan! Alasan tepatnya mengapa tampaknya menjadi bidang penelitian saat ini. Semua orang melihat pola sparsity berkumpul dengan cepat, tetapi tampaknya tidak ada yang tahu persis mengapa itu terjadi. Beberapa waktu yang lalu saya bertanya kepada Boyd dan Parikh tentang hal ini melalui email dan Parikh berpikir itu mungkin dijelaskan dengan menafsirkan metode ini dalam konteks sistem kontrol. Penjelasan heuristik lain dari fenomena ini ditemukan dalam lampiran makalah berikut,l1

Goldstein, Tom, dan Stanley Osher. "Metode Bregman split untuk masalah yang diatur L1." Jurnal SIAM tentang Ilmu Pencitraan 2.2 (2009): 323-343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

Tentu saja sekarang kesulitannya terletak pada penyelesaian masalah pembaruan dan untuk situasi spesifik Anda. Karena Lagrangian adalah kuadrat dalam , subproblem pembaruan hanya membutuhkan penyelesaian sistem linear. The subproblem tampaknya sulit karena merupakan nondifferentiable, tapi ternyata ada sebuah formula yang tepat untuk solusi yang dapat diterapkan elemen dengan elemen! Kami sekarang mendiskusikan subproblem ini lebih terinci dan menentukannya untuk masalah di posting asli.z z z xxzzzx

Pengaturan untuk subproblem pembaruan (sistem linier)z

Untuk pembaruan , kami memiliki a r g m i n z L ( x k , z , λ k , γ k ) = a r g m i n z αz

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

Khusus untuk masalah Anda, menjadi,

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

di mana menunjukkan norma Frobenius (elementwise ). Ini adalah masalah minimisasi kuadratik, di mana kondisi optimalitas orde pertama dapat ditemukan dengan mengambil turunan sebagian dari tujuan sehubungan dengan dan dan mengaturnya ke nol. Ini adalah, l 2 Z J Z B 0||||Frol2ZJZB

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

Seperti dicatat dalam komentar oleh poster asli Justin Solomon, sistem ini untuk simetris sehingga gradien konjugat adalah metode bebas-matriks yang ideal. Bagian selanjutnya membahas sistem ini dan bagaimana menyelesaikan / memprakondisikannya secara lebih rinci.ZJ,ZB

Memecahkan pembaruan submasalah (solusi penetapan ambang analitik)x

Sekarang kita beralih ke subproblem , a r g m i n x L ( x , z k , λ k , γ k )x

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

Hal pertama yang harus dilihat adalah jumlah dapat dipecah elemen demi elemen,

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

Jadi kita dapat memecahkan elemen masalah optimasi dengan elemen secara paralel, menghasilkan

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

Bentuk umum persamaan ini adalah,

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

Fungsi nilai absolut mencoba menarik titik optimal ke arah , sedangkan istilah kuadrat mencoba menarik titik optimal ke arah . solusi sebenarnya karena itu terletak di suatu tempat di segmen antara keduanya, dengan peningkatan cenderung untuk menarik titik optimal ke arah , dan mengurangi menarik titik optimal ke .s = t [ 0s=0s=tα t α 0[0,t)αtα0

Ini adalah fungsi cembung tetapi tidak dapat dibedakan dengan nol. Kondisi untuk titik minimum adalah bahwa subderivatif tujuan pada titik tersebut mengandung nol. Istilah kuadrat memiliki turunan , dan fungsi nilai absolut memiliki turunan untuk , subderivatif bernilai-set sebagai interval ketika , dan turunan untuk . Dengan demikian kita mendapatkan subderivatif untuk fungsi objektif keseluruhan, - 1 s < 0 [ - 1 , 1 ] s = 0 1 sα(st)1s<0[1,1]s=01s ( | s | + αs>0

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

Dari sini kita melihat bahwa subderivatif tujuan pada berisi jika dan hanya jika , dalam hal ini adalah minimizer. Di sisi lain, jika bukan minimizer, maka kita dapat mengatur turunan bernilai tunggal sama dengan nol dan menyelesaikannya untuk minimizer. Melakukan ini menghasilkan, 0 | t | 1s=00 s=0s=0argmins| s| +α|t|1αs=0s=0

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

Mengkhususkan hasil ini lagi untuk masalah nyata yang kami coba pecahkan dalam pertanyaan awal di mana menghasilkan, Pembaruan untuk hanyalah J k + 1 i j ={ Z k i j - 1t=Zijk1αΓijkBB

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

seperti dicatat oleh poster asli Justin Solomon dalam komentar. Secara keseluruhan, melakukan pembaruan untuk hanya membutuhkan perulangan melalui entri matriks Anda dan mengevaluasi formula di atas untuk setiap entri.J,B

Schur pelengkap untuk sistemZJ,ZB

Langkah iterasi yang paling mahal adalah menyelesaikan sistem,

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

Untuk itu, perlu beberapa upaya untuk membangun pemecah / pengkondisi yang baik untuk sistem ini. Pada bagian ini kami melakukannya dengan membuat vektor , membentuk komplemen Schur , melakukan beberapa manipulasi produk Krnoecker dan kemudian membatalkannya. Sistem komplemen Schur yang dihasilkan adalah persamaan Sylvester yang sedikit dimodifikasi .

Dalam apa yang mengikuti identitas berikut tentang vektorisasi dan produk Kronecker benar-benar penting:

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

Identitas ini berlaku setiap kali ukuran matriks dan keterbalikan sedemikian rupa sehingga setiap sisi persamaan adalah ekspresi yang valid.

Bentuk vektor dari sistem adalah,

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

atau,

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

di mana dan adalah notasi kental untuk sisi kanan. Sekarang kita melakukan komplemen block-gaussian-eliminasi / Schur untuk menghilangkan blok kiri bawah dari matriks, dalam proses kondensasi produk Kronecker. Ini adalah, 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, dua persamaan yang harus kita pecahkan secara berurutan adalah,

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

Solusi sistem komplemen Schur ketika adalah kuadrat, peringkat tinggiY,M

Pada bagian ini kita memecahkan sistem komplemen Schur untuk (persamaan 1. di atas) dengan menggunakan SVD penuh yang sudah dikompilasi dari matriks dan menerapkan versi modifikasi dari algoritma Bartels-Stewart untuk Sylvester persamaan. Algoritma ini sedikit dimodifikasi dari versi standar untuk memperhitungkan ekstra pada istilah kedua, yang membuatnya tidak cukup dengan persamaan Sylvester. Setelah ditemukan melalui persamaan pertama, dapat ditemukan dari persamaan kedua dengan mudah. Persamaan kedua sepele untuk dipecahkan melalui metode apa pun yang Anda suka.ZBYYT,MMT,MTMβYYTZBZJ

Metode ini membutuhkan biaya dimuka untuk melakukan precompute dua SVD penuh sebelum proses ADMM dimulai, tetapi kemudian cepat untuk diterapkan dalam iterasi ADMM yang sebenarnya. Karena metode ini berkaitan dengan SVD penuh dari matriks kendala, itu sesuai ketika mereka dekat dengan kuadrat dan peringkat tinggi. Metode yang lebih rumit dengan menggunakan peringkat rendah SVD juga dimungkinkan, tetapi disajikan di bagian selanjutnya.

Metode ini berkembang sebagai berikut. Mari masing menunjukkan precomputed penuh singular nilai dekomposisi, dan memadatkan sisi kanan menjadi . Kemudian persamaan pertama menjadi, Mengalikan oleh faktor-faktor ortogonal untuk membersihkan sisi kiri dan kanan dan menetapkan sementara yang baru tidak diketahui , ini selanjutnya menjadi,

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.

Sekarang kita dapat menemukan dengan menyelesaikan sistem diagonal , A

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

Setelah menemukan , kita menghitung , dan mengetahui kita menyelesaikan persamaan kedua di atas untuk , yang sepele karena kita sudah memiliki dekomposisi nilai eigen untuk .AZB=WAQTZBZJMTM

Biaya di muka menghitung dua dekomposisi nilai eigen pasti simetris positif dan , dan kemudian biaya per iterasi untuk penyelesaian lengkap didominasi oleh beberapa perkalian matriks-matriks, yang berada pada urutan yang sama dari besarnya seperti melakukan 1 subiterasi CG. Jika dekomposisi nilai eigen dimuka terlalu mahal, maka mereka dapat dihitung secara tidak tepat dengan, misalnya, mengakhiri iterasi Lanczos lebih awal dan menjaga vektor eigen terbesar. Kemudian metode ini dapat digunakan sebagai prasyarat yang baik untuk CG daripada sebagai pemecah langsung.MTMYYT

Metode solusi ketika sangat persegi panjang atau memiliki perkiraan peringkat rendahM,Y

Sekarang kita mengalihkan perhatian kita untuk memecahkan atau ketika salah satu a) matriks input sangat persegi - artinya mereka memiliki lebih banyak baris daripada kolom atau sebaliknya - atau b) mereka memiliki perkiraan peringkat rendah. Derivasi di bawah ini melibatkan penggunaan ekstensif formula Woodbury, komplemen Schur, dan manipulasi serupa lainnya.ZJ,ZBM,Y

Kita mulai dengan sistem komplemen Schur kami,

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

Beberapa manipulasi mengubah sistem ini menjadi bentuk yang lebih simetris,

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

Sekarang kita membawa perkiraan peringkat rendah. Misalkan menjadi perkiraan SVD yang dikurangi atau peringkat rendah dan ( adalah pengganti dan tidak bekas). Mengganti ini ke dalam sistem kami menghasilkan invers matriks berikut yang ingin kami terapkan,

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

Karena matriks yang kita gunakan untuk membalikkan adalah pembaruan peringkat rendah untuk identitas, strategi logisnya adalah mencoba menggunakan rumus Woodbury,

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

Namun, beberapa kehati-hatian diperlukan karena potongan-potongan peringkat rendah dan tidak ortogonal. Jadi untuk menerapkan rumus Woodbury, kami mengumpulkan kedua pembaruan peringkat rendah menjadi satu pembaruan besar. Sambut dan menerapkan hasil rumus Woodbury, IWYI

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

Inti invers dapat dihitung dengan rumus invers 2x2,

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

Posting ini sudah cukup panjang sehingga saya akan menyisihkan detail perhitungan yang panjang, tetapi hasil akhirnya adalah bahwa memasukkan submatrices yang diperlukan ke inversi blockwise dan mengalikan semuanya melalui menghasilkan bentuk eksplisit berikut untuk invers keseluruhan,

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

di mana

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.

Dalam formulir ini, kita dapat menerapkan invers dan menemukan istilah per term melalui 8 sandwich multiplikasi matriks kiri dan kanan. Rumus umum untuk menerapkan jumlah produk Kronecker adalah, ZB

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

Perhatikan bahwa semua invers eksplisit yang kami hasilkan adalah diagonal, jadi tidak ada yang harus "diselesaikan".

Kode pemecah linear

Saya mengimplementasikan dua di Matlab. Tampaknya bekerja dengan baik. Kode solver ada di sini.zJ,ZB

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

Skrip uji untuk memeriksa apakah solver berfungsi ada di sini. Ini juga menunjukkan dengan contoh bagaimana memanggil kode solver.

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

Komentar penutup

Metode tipe ADMM sangat cocok untuk masalah seperti ini, tetapi Anda harus menjalankan implementasi Anda sendiri. Struktur keseluruhan dari metode ini cukup sederhana sehingga implementasi tidak terlalu sulit dalam sesuatu seperti MATLAB.

Potongan yang hilang dari pos ini yang perlu ditentukan untuk sepenuhnya mendefinisikan metode untuk masalah Anda adalah pilihan parameter penalti . Untungnya metode ini umumnya cukup kuat asalkan parameter parameternya tidak gila. Makalah Boyd dan Parikh memiliki bagian tentang parameter penalti seperti referensi di dalamnya, tapi saya hanya akan bereksperimen dengan parameter sampai Anda mendapatkan tingkat konvergensi yang masuk akal.α,β

The strategi pemecah disajikan sangat efektif jika matriks kendala yang baik) padat, squareish, dan peringkat tinggi, atau b) memiliki pendekatan yang baik rendah peringkat. Solver lain yang berguna yang bisa menjadi topik pekerjaan di masa depan akan menjadi pemecah dioptimalkan untuk kasus berikut - matriks kendala jarang dan squareish dan peringkat tinggi, tetapi terdapat preconditioner baik untuk . Ini akan menjadi kasus jika, misalnya, adalah seorang Laplacian yang didiskritkan.ZJ,ZBMαI+MMTM


Menerapkan ini sekarang! Untuk memeriksa, penyelesaian matriks untuk dan harus simetris / pasti positif karena berasal dari kuadrat terkecil, kan? Ini secara empiris tampaknya benar :-). Jadi, apakah CG opsi yang lebih baik daripada GMRES? ZBZJ
Justin Solomon

Juga, saya pikir pembaruan untuk B salah? Saya sedang mengerjakan ini secara lebih rinci, tetapi ingat B tidak muncul dalam fungsi energi saya (tidak istilah), jadi saya tidak yakin itu harus mengambil nilai dalam Apakah saya memikirkan hal yang salah ini? Terima kasih! |B|±(11/α).
Justin Solomon

1
[errr, ]B=ZBΓB/α
Justin Solomon

3
Luar biasa! Setelah memasukkan formula saya sendiri untuk dan (mungkin dekat / setara dengan apa yang Anda posting tetapi ada yang tidak berfungsi), ini jauh mengungguli metode IRLS. Terima kasih! BJB
Justin Solomon

1
Kabar baik. Sangat menyenangkan untuk melihat ketika kontribusi di sini menghasilkan hasil nyata.
Michael Grant

5

Anda mungkin ingin menggunakan metode bebas-matriks untuk pemrograman linier. Saya tidak tahu metode apa pun yang secara khusus diarahkan pada pemrograman linear, tetapi ada metode interior titik bebas-matriks untuk program kuadratik dan untuk program nonlinier umum. Casing program kuadrat sesuai persis dengan masalah Anda, di mana koefisien bentuk kuadrat semuanya nol. (Anda juga bisa menyesuaikan metode yang menggunakan penyelesaian linier yang tepat dengan struktur masalah Anda, tetapi implementasi semacam itu mungkin tidak sepadan, dan kurang praktis daripada menggunakan metode bebas-matriks.)

Saya tidak tahu ada paket optimasi komersial yang mengimplementasikan varian bebas-matriks metode titik interior. IPOPT seharusnya menerapkan metode titik interior bebas-matriks untuk pemrograman nonlinear, tapi saya belum bisa melacak panggilan API yang memungkinkan Anda untuk menggunakannya.

Selain CVX, Anda mungkin bisa menggunakan GAMS atau AMPL untuk memasukkan matriks sekali dan mengatur kendala Anda dalam bahasa pemodelan untuk menggunakan matriks itu. Namun, metode yang digunakan oleh solver backends ke CVX, GAMS, dan AMPL tidak menggunakan pemecah matriks bebas; semua akan memerlukan matriks koefisien penuh untuk program linier dalam bentuk standar, yang akan sangat besar (itu akan menjadi produk Kronecker dari matriks). Apa yang mungkin akan terjadi adalah bahwa Anda memasukkan program linier Anda dalam formulir di atas menggunakan bahasa pemodelan, dan kemudian bahasa pemodelan akan menerjemahkan data ke dalam bentuk yang dapat digunakan oleh backend solver. Formulir ini akan membutuhkan matriks besar, dan saya curiga Anda akan mengalami kesalahan yang sama (kecuali jika Anda menjalankan mesin dengan memori yang cukup).


Sepertinya saya sudah mencoba semua hal yang benar! Saya awalnya bereksperimen dengan CVX dan gagal, jadi saya beralih ke IPOPT. Tetapi IPOPT mengalami masalah yang sama. Saya tidak menyadari bahwa ia memiliki opsi bebas-matriks, jadi saya akan melihat apakah saya dapat mengetahuinya.
Justin Solomon

Saya tidak yakin apakah GAMS / AMPL akan membantu masalah saya. Saya senang membuat kode masalah dalam bentuk apa pun yang akan membantu pemecah melakukan hal yang benar, tetapi seperti yang Anda katakan di balik layar mengambil produk Kronecker tidak akan berhasil.
Justin Solomon

4

Bisakah Anda membayar SVD yang disebutkan oleh Geoffrey Irving? Jika Anda bisa, saya akan mempertimbangkan pendekatan iteratively reweighted least square (IRLS) . Pendekatan ini akan menyelesaikan masalah dalam bentuk di mana adalah matriks berat.

minimizeijWijJij2subject toMJ+BY=X
W

Iterasi dimulai dengan sebagai semua matriks; ini menghasilkan optimal . Iterasi dilanjutkan dengan mana adalah konstanta kecil yang mencegah pembagian dengan nol. Saya tidak sepenuhnya yakin tentang kriteria konvergensi, tetapi mungkin tautan Wikipedia yang saya tawarkan di atas dapat memberi Anda referensi. J ( 0 )W(0)J(0) ϵ

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

Anda juga dapat mempertimbangkan metode urutan pertama yang dihaluskan. TFOCS, yang saya tulis bersama, dapat menangani ini menggunakan solver "smoothed conic dual" (SCD), tetapi itu tidak akan semudah digunakan.

Jika Anda ingin mencoba metode titik interior tanpa matriks, bacalah karya Jacek Gondzio.

EDIT: hmm, mungkin itu kasus IRLS tidak akan dapat menggunakan SVD untuk menghitung solusi. Jika demikian saya akan kembali ke salah satu pilihan lain.


1
Saya tidak yakin apakah saya bisa menggunakan SVD di sini, tapi IRLS adalah ide bagus! Kecepatan tidak terlalu menjadi masalah seperti memori, dan memalukan saya menggunakan IRLS untuk penelitian terkait beberapa bulan yang lalu dan itu bekerja dengan baik (menendang diri saya karena tidak pernah mencoba ini sebelumnya!). Bahkan tanpa SVD untuk IRLS, harus dimungkinkan untuk melakukannya menggunakan pemecah linear seperti CG yang tidak memerlukan sistem lengkap. Bahkan, CG mungkin bisa dihentikan dengan kendala yang cukup longgar sebelum menyesuaikan seperti yang Anda sarankan. Juga melihat ke pendekatan ADMM, tapi saya kurang pengalaman dengan itu. Wij
Justin Solomon

Ya, ADMM juga akan bagus. Saya benar-benar menulis bagian yang menyarankan Anda menghilangkan Y sama sekali, tetapi saya kemudian melihat bahwa tidak persegi. M
Michael Grant

1
Menerapkan strategi IRLS - konvergen tetapi secara numerik tidak bekerja dengan baik karena sistem linier yang harus dipecahkannya tidak terkondisi berkat berbagai ; menggunakan GMRES untuk menyelesaikan sistem. Akan mencoba ADMM selanjutnya! w
Justin Solomon

2

Anda dapat mencoba menggunakan CVX , yang memungkinkan Anda untuk mengkodekannya persis seperti yang Anda tulis (yaitu, dengan sebagai matriks daripada vektor). Ini mungkin akan diselesaikan dengan menggunakan solver cembung yang lebih umum daripada LP solver, tetapi jika solver cembung berhasil maka saya kira Anda tidak akan keberatan.X

Kemungkinan lain: gunakan solver yang memungkinkan matriks kendala Anda disimpan sebagai matriks jarang. Ini masih akan membutuhkan lebih banyak memori daripada apa yang seharusnya Anda butuhkan, tetapi jauh lebih sedikit daripada jika Anda menyimpannya sebagai matriks padat. Di CVX, jika Anda menggunakan kronAnda mendapatkan matriks jarang, jadi akan sepele untuk mencoba ini.


Jika Python akan lebih nyaman daripada MATLAB untuk alasan apa pun, maka ada juga cvxpy meskipun tidak cukup dipoles seperti cvx.
k20

Kecurigaan saya adalah bahwa pendekatan ini akan bekerja secara dangkal, dan kemudian gagal setelah bahasa pemodelan CVX mengubah data input menjadi bentuk yang dapat digunakan oleh pemecah backend (yang akan menyelesaikan program linear, program kuadratik, program kerucut orde dua, program semidefinite, dan program geometris). Saya menjelaskan mengapa dalam jawaban saya. Backend Gurobi adalah solver LP terbaik (antara jenis lainnya), jadi menggunakan CVX dengan algoritma itu mungkin yang terbaik yang bisa Anda lakukan dalam hal implementasi, singkatnya memanggil CVX dari API bahasa yang dikompilasi.
Geoff Oxberry

1
Seperti yang dikatakan Geoff, tidak ada lapisan pemodelan yang akan membantu Anda di sini. LP yang dihasilkan memiliki data yang diulang untuk setiap pemecah generik standar. Untuk menghindari hal ini, Anda harus menggunakan (mengembangkan) solver berbasis oracle, yaitu, solver yang pada dasarnya didasarkan pada pengembalian residu untuk nilai , dan / atau potongan yang cocok, dan kemudian bekerja dengan deskripsi itu sebagai gantinya. J , YMJ+BYXJ,Y
Johan Löfberg

Ya, saya benar-benar mengalami masalah yang disebutkan Geoff. Bahkan, saya menggunakan CVX untuk tebakan awal saya. Saya juga sudah mencoba menelepon Gurobi secara langsung, tetapi satu-satunya cara saya bisa berpikir untuk melakukannya adalah dengan melakukan masalah membuka gulungan yang sama.
Justin Solomon

1
Saya pikir Anda harus memutar sendiri
Johan Löfberg
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.