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


12

Çözmem gerek

minxAxb22,s.t.ixi=1,xi0,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

Axb22=xTATbT,Axb=xTATAxbTAxxTAbbTb

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

xTATAxbT(A+AT)x

4

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

minxAxb22,s.t.ixi=1,xi0,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.