Python'da doğrusal kısıtlamalarla en küçük kareler problemini çözme


12

Çözmem gerek

minx‖Ax−b‖22,s.t.∑ixi=1,xi≥0,∀i.

Ben düşünüyorum onunla çözülebilir olması gereken bir kuadratik sorundur CVXOPT , ama nasıl dışarı çalışamaz.


Umarım bu soru compsci için çok spesifik değildir.
— tillsten

Geoff Oxberry: Sadece bir merak, ama doğrusal kısmı neden düzenledin? Bence sorun tanımının iktidarsız bir parçası, çözüm doğrusal olmayan en küçük kareler optimizasyonu için oldukça farklı olurdu.
— tillsten

Btw, diğer düzenlemeler harika!
— tillsten

Bunu kendi kodunuzla çok verimli bir şekilde kolayca çözebilirsiniz. CVXOPT'a gerek yok.
— Royi

Yanıtlar:


11

CVXPY'yi keşfetmeden önce (satırın altında) tam bir cevap yazdım ( ki bu MATLAB için CVX gibi) sizin için tüm zor şeyleri yapar ve burada neredeyse sizinkiyle çok kısa bir örneğe sahiptir . Yalnızca ilgili satırı

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

CVXOPT ile daha zor olan eski cevabım:

Geoff'un karesini alma önerisini takiben objektif fonksiyonunuz

‖Ax−b‖22=⟨xTAT−bT,Ax−b⟩=xTATAx−bTAx−xTAb−bTb

Tabii ki, tüm terimler skalerdir, bu nedenle üçüncü olanı transpoze edebilir ve sonuncuyu düşürebilirsiniz ( bağlı olmadığından ve hangi size minimum verdiğini değiştirmeyeceğinden , geri eklemeniz gerekir. çözdükten sonra hedefinizin doğru değerini elde etmek için) (Bu, kısıtlamalarınız dahil), CVXOPT belgeleri burada da böyle bir sorunun çözümü için örnek kod var.xx

xTATAx−bT(A+AT)x

4

Çözdüğün problem yerine, çöz

minx‖Ax−b‖22,s.t.∑ixi=1,xi≥0,∀i.

Bu sorun, CVXOPT, IPOPT veya diğer herhangi bir dışbükey optimizasyon çözücüsünde çözülebilen farklı, dışbükey, doğrusal olmayan bir optimizasyon problemidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.