Pahalı objektif fonksiyonun küresel maksimizasyonu


12

Küresel olarak birçok ( ) gerçek parametrenin (karmaşık bir simülasyonun sonucu) işlevini maksimize etmekle ilgileniyorum . Bununla birlikte, söz konusu fonksiyonun değerlendirilmesi nispeten pahalıdır ve her bir parametre seti için yaklaşık 2 gün gerektirir. Farklı seçenekleri karşılaştırıyorum ve kimsenin önerileri olup olmadığını merak ediyordum.30

Bu tür bir işlem için yaklaşık işlevlerin geliştirilmesini ve sonra bunların en üst düzeye çıkarılmasını içeren bir dizi yöntem olduğunu biliyorum (örn. Jones ve diğerleri "Pahalı Kara Kutu İşlevlerinin Etkin Küresel Optimizasyonu" ). Bununla birlikte, bu kodlamaya nispeten ilgili gibi görünmektedir.

Paralel olarak çok sayıda simülasyon çalıştırabilirim (50+). Bu, bu optimizasyonu yapmak için genetik algoritmalar gibi bir şey kullanmayı öneriyor gibiydi - çünkü bir çözüm üretebildiğim kadar hızlı bir aday çözüm popülasyonu oluşturabilirim.

Benim sorularım şunlardır: 1) Herkes bu tür küresel çözücüler / öneriler serbestçe mevcut uygulamaları ile deneyimleri var mı? 2) Burada genetik algoritmaları tercih etmenin veya bunlardan kaçınmanın nedenleri var mı?

Bu fiziksel bir sorundur ve ilk deneyimlerim, parametreleri değiştirdikçe liyakat değişimlerini oldukça düzgün bir şekilde gösterdi.

GÜNCELLEME:

Yardım için teşekkürler! Birkaç ayrıntı daha: Maksimum konumun ötesinde herhangi bir bilgiye ihtiyacım yok. Simülasyon Monte Carlo değil deterministiktir, bu nedenle komplikasyon büyük bir sorun değildir. Parametrelerde açık sınırlar veya kısıtlamalar yoktur. Sahip olduğum (ve daha önce bahsetmediğim) diğer bir bilgi, gerekli olan maksimum boyutun bir duygusu. Küresel bir maksimum ararken, bu ölçekte veya daha büyük bir şeyden de memnun olurum - bunun herhangi bir yardım sağlayıp sağlamayacağını bilmiyorum. Umarım taramayı daha sistematik bir şekilde yaparsam (Brian Borchers tarafından önerilen Latin hiperküpler), bu ortaya çıkacaktır.


Nesnel işlevi değerlendirdiğinizde, ek bilgi üretir mi, esp. türevleri (veya yaklaşık değerleri)? Objektif fonksiyonun kendisi hesaplamak pahalı olduğundan, bu tür hesaplamaların ek bilgi için sağılması gerekebilir.
hardmath

(Bir yıl sonra), ne yaptın - 30 parametreden birkaçını değiştirerek, model ...?
denis

denis: En önemli parametreleri tahmin etmek için bazı fiziksel sezgi (ve şans) kullanabildim ve sonra bunları "yeterince iyi" bir sonuç elde etmek için değiştirdim. (Bu durumda, kesin optimum bulmak, yeterince büyük bir cevap bulmak kadar önemli değildi.) Bu tekniklerin tüm gücüne ihtiyaç duymadım, ancak onları kullanışlı hale getirmek iyi oldu.
AJK

Bu 2 1/2 yıl önce verildi, ancak objektif fonksiyon değerlendirmenizde (deterministik simülasyon) doğruluk seviyesi seçiminiz var mı ve doğruluk ile çalışma süresi arasında değiş tokuş yapabilir misiniz?
Mark L. Stone

Yanıtlar:


11

Objektif fonksiyonun değerlendirilmesi son derece pahalı olduğunda genetik algoritmalar çok kötü bir seçimdir - bu yöntemler her nesilde (paralelliğin yardımcı olabileceği) ve birçok nesilde (doğal olarak ardışık olan) birçok fonksiyon değerlendirmesi gerektirir. nesil başına, bu çok yavaş olurdu.

Bu sorunun nereden geldiğinden bahsetmedin. Bir olasılık yüzeyini istatistiksel olarak analiz ediyor musunuz (bu durumda sadece optimal parametrelerden ve objektif değerden daha fazlasını isteyeceksiniz) veya sadece objektif bir işlevi optimize ediyor musunuz?

Objektif fonksiyon hesaplamasının kesin veya yanlış olduğundan bahsetmediniz. Genellikle objektif fonksiyon Monte Carlo simülasyonu ile hesaplandığında, değerlerin oldukça gürültülü olduğu durumdur. Bu, birçok optimizasyon algoritmasını yanlış yönlendirebilir. Tepki yüzeyi yöntemleri gürültüyü düzelterek bu soruna yardımcı olur.

Parametrelerle ilgili herhangi bir kısıtlamadan bahsetmediniz. Sınırlılar mı? Parametreler arasında doğrusal veya doğrusal olmayan kısıtlamalar var mı?

Şansınız, 30 parametrenizin çoğunun sorun için gerçekten önemli olmamasıdır. Öncelikle optimizasyonda 30 parametreden hangisinin gerçekten önemli olduğunu belirlemek için deneysel bir tasarım tarama yaklaşımı kullanmanızı ve ardından önemsiz parametreler için makul değerleri ayarladıktan sonra önemli parametreler üzerinde optimize etmenizi öneririm. Latin Hiperküp Numune Alma gibi yöntemler, nispeten önemsiz parametrelerin taranmasında çok yardımcı olabilir. Bu tarama aşamasında yüzlerce işlemciyi kolayca kullanabilirsiniz.

Parametre sayısını daha makul bir boyuta düşürdükten sonra, kalan parametreleri optimize etmek için bir yanıt yüzeyi yöntemi kullanırdım. Yanıt yüzeyi gerçekten çok modluysa ve aşırı basit bir yanıt yüzeyi modeli kullanıyorsanız (genellikle insanlar sadece kuadratik bir modele uyar), o zaman kolayca yanıltıcı olabilir ve küresel maksimumda kaçırabilirsiniz. Dikkatli ol! Bu aşamada, parametre alanının çok iyi bir şekilde kapsanmasını sağlayan deneysel bir tasarım kullanarak birçok işlemciden tekrar yararlanabilirsiniz. Takılan modelin hesaplanan değerlerden uzak olduğu tasarım noktalarını arayın - bu, tepki yüzeyinin o bölgede iyi çalışmadığının bir göstergesidir. Parametre alanının ayrı bölgelerinde yanıt yüzeyleri oluşturmanız gerekebilir.

Son adım olarak, yanıt yüzeyi optimizasyonunuzdaki parametrelerle başlayabilir ve birer birer ayarlayarak (koordinat inişi) taranan parametrelerin değerlerini iyileştirmeye çalışabilirsiniz.

Bu tür bir optimizasyon için bir çerçeve olarak DAKOTA'nın tavsiyesini ikinci yapacağım. Bu optimizasyonu yalnızca bir kez yapacaksanız, hesaplamaları elle düzenlemek daha kolay olabilir, ancak tekrar tekrar yapacaksanız, DAKOTA çok yardımcı olacaktır.


4
  1. Bu tür çözücülerle ilgili hiçbir deneyimim yok; bazı çalışma arkadaşlarım bunları kullandı. DAKOTA bu tür görevler için önerilen yazılım paketi gibi görünmektedir. Bir kullanıcının tekrar tekrar bir gönderim kuyruğuna iş göndermesine ve çıktıyı parametre çalışmaları, duyarlılık analizi vb. İçin kullanmasına izin veren bir arayüz içerir. eşzamanlı.

  2. Parametrelerinizin sürekli olduğu varsayılarak, eğer değer değiştikçe liyakat değeri sorunsuz bir şekilde değişirse, vekil bir model liyakat rakamını takmak için makul bir iş yapmalı ve vekil türev bilgisi yakınsamanın rafine edilmesine yardımcı olmalıdır. 30 parametre için, deterministik türevsiz optimizasyon yöntemleri de yararlı olmalıdır; yine, pürüzsüzlük yardımcı olacaktır. Aksine, genetik algoritmalar türevsel bilgileri kullanmayacak ve iyi bir performans elde etmek için genellikle mutasyon hızı, rekombinasyon oranı ve seçim parametreleri gibi parametrelerin ayarlanmasını gerektirmektedir. Algoritmik bir seçim olarak, genetik algoritmaları bir geri dönüş olarak kullanacağım, çünkü daha iyi yakınsama davranışına sahip olmak için iyi tasarlanmış bir vekil optimizasyonu veya deterministik bir türevsiz optimizasyon yönteminin olmasını beklerdim.


Deterministik bir türev içermeyen optimizasyon yöntemi kullanmanın birkaç nedeni akıllıca olmayabilir. Birincisi, bunlar yerel maksimum değerleri bulma ve parametre alanında başka bir yerde çok daha iyi bir noktayı bulmayan yerel arama yöntemleridir. İkincisi, bu yöntemler tipik olarak, yineleme başına nispeten az fonksiyon değerlendirmesi ile çok sayıda yineleme gerektirir, bu nedenle iyi paralellik göstermezler.
Brian Borchers

Yerel arama yöntemleri konusunda haklısınız. Yedek modelleri oluşturmayan ve yerel arama yöntemlerinden daha iyi davranması gereken küresel arama yöntemleri (DIRECT, dal ve sınır, çok düzeyli koordinat araması) vardır. Bu yöntemleri paralelleştirmenin etkinliğinden söz edemem.
Geoff Oxberry

1

Kara kutu optimizasyonu için TOMLAB, DAKOTA ve OpenMDAO'ya göz atın.


Düzenleme # 3: Bayes optimizasyonu EGO'ya çok benzer:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

sınırlı lisanslar:

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


Düzenleme 2:

İlk yaklaşım, pahalı fonksiyon etrafında bir metamodel / vekil (kriging / GP kullanarak) oluşturmak ve bu ek bilgileri, küresel optimum noktayı daha hızlı ve daha az değerlendirmeyle (EGO) bulmak için kullanmaktır.

MDAS'ta olduğu gibi ikinci yaklaşım, çoklu düzeylerde bazı akıllı uyarlamalar ile doğrudan arama yapmaktır.

Sezgisel yaklaşımlar doğada ve herhangi bir teminat olmaksızın genetiktir / randomize edilmiştir.


Düzenleme # 1:

TOMLAB, Şahinidis gazetesine göre en iyi hız / kalite optimizasyonuna sahip MATLAB tabanlı bir araçtır. Ancak bu, önemli kurumsal kullanıma sahip ticari bir araçtır. Bunu kullanmıyorum.

DAKOTA, genel optimizasyonun yanı sıra Belirsizlik Ölçümü için daha uygun hale getirilmiştir. C ++ ve bazı eski Fortran kodlarına dayanmaktadır. LGPL lisansı ve indirilebilecek ikili dosyalar altında olsa da, en azından Win7'deki GCC veya MSVS / ifort ile yaşadığım deneyimden yeniden derlemek çok zor. Güçlendirme, lapack, yapı için cmake bağımlılıkları vardır. Temelde bu çok sayıda açık kaynak çözücü ve az sayıda ticari çözücü için bir sargıdır. Bu SNL ürünüdür ve Sandia NL'nin diğer projelerine sıkıca entegre edilmiştir. Bazı IMSL rutinleri yerine bunu başarıyla entegre edebildim. Şahinidis'in makalesi, DAKOTA ile mümkün olan büyük paralellikleri kaçırdı.

OpenMDAO, NASA tarafından APACHE Lisansı altında Python'da geliştirilen optimizasyon tabanlı tasarım yazılımıdır. Şu anda bunu deniyorum.


SciComp'a Hoşgeldiniz! Şu anda yazıldığı gibi, yayınınız TOMLAB veya OpenMDAO'ya bakmanın neden iyi bir fikir olacağını açıklamıyor (diğer cevaplar zaten DAKOTA'yı tartışıyor). Sadece öneriler sunmakla kalmayıp aynı zamanda bu önerilerin neden yararlı olduğunu, potansiyel tuzakları ve benzeri konuları da tartışıyoruz.
Geoff Oxberry

Önce cevabımla koştum ve şimdi açıklama ekledim.
denfromufa

0

Her biri bir parametre değişen 30 çalışmayı göze alamıyorsanız, bunları gruplar halinde değiştirin:
örneğin, 8 farklı 4 parametreyi birlikte çalıştırır, sonra en iyi 2 çalıştırma / 8 parametresini iyileştirir ...
(Nasıl sıralanacağımı bilmiyorum toplam çalışma süresine karşı bilgi kazancı; çok kollu haydut ?)


-3

İşte çok çekirdekli CPU'ları kullanarak pahalı kara kutu işlevlerini verimli bir şekilde optimize etmenizi sağlayan bir kod .

Kodun arkasındaki matematiğin açıklaması burada verilmiştir .


1
Bu sağlanan aynı cevaptır bu yazı . Ayrıca, bu sizin kendi işiniz gibi görünüyor. Bu doğruysa, lütfen cevabınızı açıkça belirtin.
nicoguaro

Makalede açıklanan ve yazılımda uygulanan yaklaşım hakkında ayrıntılı bilgi verebilir misiniz? Kullanılan yöntem nedir? Bu neden iyi? Bu yaklaşımda diğer cevapların kapsamadığı şeyler nelerdir?
nicoguaro

1
Ayrıca, lütfen bu yazılımın yazarı olduğunuzu belirtin , bu yüzden bunu okuyan herkes sizin a) ne hakkında konuştuğunuzu bildiğini ve b) biraz kısmi olabileceğini bilecektir.
Christian Clason
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.