Nelder Mead için durma kriteri


11

Bir işlevi optimize etmek için Nelder-Mead algoritmasını uygulamaya çalışıyorum. Nelder-Mead hakkındaki wikipedia sayfası onun durdurma kriter haricinde tüm algoritması hakkında şaşırtıcı açıktır. Orada ne yazık ki diyor:

Yakınsama olup olmadığını kontrol edin [açıklama gerekiyor] .

Kendimi birkaç kriter denedim ve test ettim:

  • Durdurma ise burada küçük ve burada olan -inci tepe düşük (sipariş simpleks, bir en yüksek seviyesine) ( ) işlev değerleri. Başka bir deyişle, simpleksin maksimum değeri neredeyse minimum değere eşit olduğunda. Bunun düzgün çalışmadığını gördüm, çünkü bu fonksiyonun simpleks içinde ne yaptığı hakkında hiçbir garanti vermez. Örnek, şu işlevi göz önünde bulundurun: Bu elbette optimize etmek için önemsizdir, ancak diyelim ki bunu NM ile yapıyoruz ve iki simpleks noktamız veϵ x i i f ( x 1 ) f ( x N + 1 ) f ( x ) = x 2 x 1 = - 1 x 2 = 1f(xN+1)f(x1)<ϵϵxiif(x1)f(xN+1)

    f(x)=x2
    x1=1x2=1. Algoritma, optimumunu bulmadan burada birleşecektir.
  • İkinci seçenek simpleksin sentroidinin değerlendirilmesini içerir: . Bu, eğer simpleks ve sentroidin en düşük noktası benzer değerlere sahipse, simpleks yakınsama çağrısı yapmak için yeterince küçüktür.|f(x1)f(xc)|<ϵ

Bu, yakınsamayı kontrol etmenin uygun bir yolu mu? Yoksa bunu kontrol etmenin yerleşik bir yolu var mı? Çoğu arama sonucu algoritmanın karmaşıklığına odaklandığından, bu konuda herhangi bir kaynak bulamadım.


1. de neler olduğunu neden ile karşılaştırdığınız açık değil ; elbette karşılaştırmak . 2. yakınsama kontrolleri bir çok optimizasyonda özellikle zor bir alandır; işlevin çok fazla değişmemesi gerekir, ancak bağımsız değişkenler hızlı bir şekilde değişiyorsa (işlev zar zor değişse bile) yakınsama yapmamış olabilirsiniz, bu nedenle insanlar genellikle her ikisine de bakan ölçütler kullanırlar. Ayrıca, göreceli veya mutlak bir kriter kullanıp kullanmadığınız da vardır (ikisi de yeterli değildir - örneğin, 0'a çok yakın olduğunuzda göreli bir test tetiklenmeyecektir) x 1 x NxN-+1x1xN-
Glen_b -Minica Monica

3
Nelder Mead için en iyi durma kriteri başlamadan önce.
Mark L. Stone

Sadece @ Glen_b yorumunda karışıklık wrt notasyonu önlemek için ... Ben burada abonelik algoritma iterasyon değil, simpleks köşeleri ifade inanıyoruz. Böylece, bu soruda önerilen ilk yakınsama kriteri, boyutlu parametre alanındaki köşelerin en düşük ve en yüksek fonksiyon değerlerini karşılaştırır ... bu soruda açıkça belirtilmez, ancak bağlantılı wikipedia sayfasındaki algoritmanın açıklaması ( ve orijinal kağıtta) köşelerini en düşük fonksiyon değerinden en yükseğe sıralayın . N + 1N-N-+1
Nate Pope

@NatePope Bu benim niyetim evet, soruya açıklama ekleyeceğim. \
JAD

Yanıtlar:


6

Sayısal Tariflerin orijinal versiyonlarındaki bu "yokuş aşağı simpleks algoritmasının" hesabı özellikle berrak ve yararlıdır. Bu yüzden bunun ilgili kısımlarını alıntılayacağım. İşte arka plan:

Tek boyutlu minimizasyonda, minimum bir parantez ... Yazık! Çok boyutlu uzayda benzer bir prosedür yoktur. ... Yapabileceğimiz en iyi şey algoritmamıza bir başlangıç ​​tahmini vermek; yani, denenecek ilk nokta olan bağımsız değişkenlerden oluşan bir vektörü. Algoritmanın daha sonra N -boyutlu bir topografyanın düşünülemez karmaşıklığı boyunca (en azından yerel) bir minimumla karşılaşana kadar kendi yolunu çizmesi beklenir .N-N-

Yokuş aşağı simpleks yöntemi sadece tek bir nokta ile değil, aynı zamanda bir başlangıç ​​simpleksini tanımlayan noktalarıyla başlatılmalıdır. [Bu noktaları, başlangıç ​​noktası P 0 ile birlikte alabilirsiniz] P i = P 0 + λ e i burada e i 'nin N birim vektörü olduğu ve λ sorunun karakteristiğini tahmin ettiğiniz bir sabit olduğu uzunluk ölçeği. ...N-+1P0

(10.4.1)Pben=P0+λeben
ebenN-λ

Çoğu adım, simpleksin karşıt yüzü boyunca fonksiyonun en büyük ("en yüksek nokta") olduğu yerde simpleks noktasını daha düşük bir noktaya taşır. ...

Şimdi eldeki sorun için, algoritmayı sonlandırmak. Hesabın genelliğine dikkat edin: yazarlar, herhangi bir çok boyutlu optimize ediciyi sonlandırmak için sezgisel ve yararlı tavsiyeler sunar ve daha sonra bu algoritmaya özel olarak nasıl uygulandığını gösterir. İlk paragraf bizden önceki soruya cevap verir:

Fesih kriterleri hassas olabilir. Tipik olarak çok boyutlu algoritmamızın bir "döngüsünü" veya "adımını" belirleyebiliriz. Bu aşamada, bu adımda hareket ettirilen vektör mesafesinin, bazı toleranslardan fraksiyonel olarak daha küçük olduğu zaman sona erdirmek mümkündür TOL. Alternatif olarak, sonlandırma adımındaki fonksiyon değerindeki azalmanın bir miktar toleranstan fraksiyonel olarak daha küçük olmasını gerektirebiliriz FTOL. ...

Yukarıdaki kriterlerden herhangi birinin, bir nedenden ötürü, herhangi bir yere ulaşamayan tek bir anormal adım tarafından kandırılabileceğini unutmayın. Bu nedenle, çok boyutlu bir minimizasyon rutinini minimum bulduğunu iddia ettiği bir noktada yeniden başlatmak genellikle iyi bir fikirdir . Bu yeniden başlatma için, yardımcı girdi miktarlarını yeniden başlatmalısınız. Yokuş aşağı yönlü bir yöntemde, örneğin, yeniden başlatmak gereken arasında K + 1 denklemi ile yeniden simplex köşe ( 10.4.1 ) ile, P 0 talep edilen en az köşe biri olarak varsayılır.N-N-+1(10.4.1)P0

Yeniden başlatmalar asla çok pahalı olmamalıdır; Sonuçta, algoritmanız bir kez yeniden başlatma noktasına yakınlaştı ve şimdi algoritmayı zaten orada başlatıyorsunuz.

[Sayfa 290-292.]

xyT>0

(1)|x|-|y|f(x,y)=2|x|-|y||x|+|y|<T

f(x,y)=(|x|+|y|)/2

(1)

Referans

William H. Press ve diğ. , Sayısal Tarifler: Bilimsel Hesaplama Sanatı. Cambridge University Press (1986). En son sürümler için http://numerical.recipes/ adresini ziyaret edin .


1
Yeniden başlatmayla ilgili bilgiler için teşekkürler. Bunun algoritmayı farklı başlangıç ​​noktalarından çalıştırdığını düşündüm, ama aslında daha fazlası var gibi görünüyor.
JAD

Daha önce "yeniden başlamanın" olası anlamlarını düşünmemiştim. Mevcut bağlamda, "yeniden başlatma" için "parlatma" gibi bir terim kullanmış olabilirim, ama belki de bu doğru değildir. Simpleks yöntemi için savunulan "yeniden başlatma" türü oldukça özel olabilir.
whuber

9

Tam bir cevap değil, ama bir yorum için çok uzun ve sizi doğru yola koyabilir.

Bu konu, "Bilgisayarlar için Kompakt Sayısal Yöntemler" 2. Baskı, 171. sayfada John C. Nash tarafından ele alınmıştır. Ve R'nin optim()fonksiyonunda uygulanan Nelder-Mead rutini için atıfta bulunulan referanstır . İlgili bölümden alıntı:

test=[(Σben=1n+1[S(bben)-S¯]2)/n]1/2
S¯=Σben=1n+1S(bben)/(n+1).

S(.)bn+1nb'HbL

S(bL)S(b'H)

Kaynağına hızlı bir bakış , optim()yakınsamayı belirlemek için en yüksek ve en düşük fonksiyon değerleri (simpleksi tanımlayan noktaların) arasındaki farkı kullandığını gösterir: Yüksek değer ve düşük değer if (VH <= VL + convtol || VL <= abstol) break;nerede . Bu, kaynağa çok hızlı bir şekilde baktığım ve muhtemelen bir şey eksik olduğum uyarısı ile birlikte geliyor.VHVL

Şimdi, (1) seçeneğiniz Nash tarafından savunulan ikinci yaklaşım gibi görünüyor. Ayrıca karşılaştığınız sorunu da tartışıyor:

(n+1)(n-1)n

Nash'in burada atıfta bulunduğu orijinal referanslar:

Nelder JA, Mead R. 1965. Fonksiyon minimizasyonu için simpleks bir yöntem. Bilgisayar Dergisi 7: 308-313.

O'Neill R. 1971. Algoritma AS 47: Bir simpleks prosedürü kullanarak fonksiyon minimizasyonu. Uygulamalı İstatistik 20: 338-345.


3

fmin(t)mintüm köşeler f(Xben,t)
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

n+1

  1. sorun: engebeli arazi, belki de kötü ölçeklendirme veya aptal kısıtlamalarla
  2. Algoritma, keşfetme ve taşıma (ve yazılım karmaşıklığı)
  3. durdurma kuralı uygun

görülmeye devam ediyor - gerçek test vakaları hoş geldiniz.

(Gerçek bir Stopitersınıfın birçok durma koşulu vardır, buna ek olarak patience; en basit olanı duvar saati süresidir.)

Ayrıca bakınız:
NLopt : Nelder-Mead dahil olmak üzere birçok algoritma, karşılaştırması kolay. Özellikle notlara bakın algoritmalarını karşılaştırılması
İniş : sabır ile durdurmamin_improvement

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.