Bazı yorumları temel alarak cevabımı radikal bir şekilde düzenlemeye karar verdim.
TAO'yu kullanmadım. Belgeleri incelerken itibaren, kullanarak bir varyasyon eşitsizlik haline sorunu dönüştürülmesidir TAO (sadece kutu kısıtlamaları özel bir durum hariç) kısıtlı optimizasyon problemlerini işleyebileceği tek yol gibi görünüyor Karush-Kuhn-Tucker (KKT) koşulları , hangi kısıtlama yeterliliği altında (genellikle gördüğüm tip Slater noktası şartıdır ) şarttır ve amaç ve kısıtlamaların (daha genel olarak Tip 1 yatırımcılığın) taşınması altında yeterlidir. Eğerfkonveks değildir, KKT koşullarını kullanan değişken eşitsizlik formülasyonu, orijinal optimizasyon problemine eşdeğer değildir, bu nedenle, kesinlikle, optimizasyon problemi için global bir optimum istiyorsanız, bunu değişken eşitsizlik olarak ifade etmemelisiniz. Yine de PDE kısıtlı optimizasyon için küresel bir optimum bulmak zor olurdu (aşağıya bakınız), bu yüzden belki de bu ayrıntıyı gözardı etmek iyi. Wolfgang'ın söylediklerini göz önüne alındığında, TAO kullanmaya şüpheci olurdum; Zaten şüpheliyim çünkü doğrusal olmayan programları (NLP'ler) değişken eşitsizliklerden ziyade NLP'ler olarak çözmek için yöntemler uygulamıyor.
PDE kısıtlı optimizasyon konusunda uzman değilim; Çalışma arkadaşlarım ve ortaklarım ODE kısıtlı optimizasyon sorunları üzerinde çalışıyor. Müthiş formülasyonlar için, Larry Biegler'in (ve diğerlerinin) PDE'yi ayrıştırmak ve onu çok büyük, seyrek bir NLP yapmak için sıralama yöntemlerini kullanacağını ve daha sonra iç nokta yöntemlerini kullanarak çözeceğini biliyorum. Sorunu gerçekten küresel iyimserlikle çözmek için dışbükey gevşemeler de yapmanız gerekecektir, ancak bildiğim kadarıyla bu yaklaşım benimsenmemelidir, çünkü PDE kısıtlı optimizasyon problemleri o kadar büyük NLP'lerin çözülmesini zorlaştıracaktır: küresel iyimserlik. Bu ayrıntılardan sadece, problem formülasyonunun çözücü paket seçimini büyük ölçüde etkilediğinden bahsettim. İzinsiz olmayan formülasyonlar için, tekrarlanan PDE çözücüleri, optimizasyon algoritmaları için gradyan bilgisi verir.
ODE kısıtlı optimizasyon problemlerini inceleyen bazı insanlar, problemi bir sıralama ve sayısal yöntem kullanarak ayrıştırma ve daha sonra global bir optimizasyon algoritmasında kullanılan dışbükey bir formülasyon elde etmek için ortaya çıkan NLP'yi gevşetmek için benzer bir yaklaşım kullanır. ODE kısıtlı optimizasyona alternatif bir yaklaşım, problemi gevşetmek ve daha sonra laboratuarımda benimsenen yaklaşım olan ODE'yi ayrıştırmaktır. Bazı PDE kısıtlı optimizasyon problemleri sınıflarını gevşetmek mümkün olabilir, ancak bu problem üzerinde yapılan mevcut herhangi bir çalışmayı bilmiyorum. (Bir noktada laboratuvarımda potansiyel bir projeydi.)
Sonuçta, asıl önemli olan, orijinal PDE'nin farklılığı değil, karar değişkenlerine göre takdir yetkisinin farklılaşmasıdır.
Eğer ayrıklaştırılmış problem karar değişkenlerine göre iki kere farklılaştırılabilirse, aşağıdaki paketler yerel bir çözümü hesaplar:
- IPOPT , Andreas Wächter tarafından IBM'de geliştirilen açık kaynaklı bir iç nokta çözücüdür. Çok kaliteli bir kod. İç nokta çözücüsü olarak, büyük, seyrek Jacobian matrislerine sahip objektif fonksiyonlar için daha iyidir ve PDE kısıtlı optimizasyon için faydalı olacaktır.
- SNOPT , bir başka yüksek kaliteli kod olan ticari sıralı ikinci dereceden bir programlama çözücüsüdür. Küçük, yoğun Jacobian matrisleri olan objektif fonksiyonlar için daha iyidir, bu yüzden PDE kısıtlı optimizasyon için faydalı olmasını beklemem ama denemelisin.
- NLopt , Steven Johnson tarafından MIT'de yazılmış, çok sayıda doğrusal olmayan optimizasyon algoritmasının temel uygulamalarını içeren küçük ve açık kaynaklı bir koddur. Tüm algoritmalar sınırlı kısıtlı problemleri çözmek için yeterli olmalıdır.
fmincon
Matlab'da doğrusal olmayan optimizasyon için bir dizi algoritma (iç nokta ve sıralı ikinci dereceden programlama dahil) uygulanır
- GAMS ve AMPL , optimizasyon problemlerini formüle etmek için kullanılan ticari modelleme dilleridir ve çok sayıda doğrusal olmayan programlama çözücüsüne arayüzler içerir. GAMS'ın daha küçük problemler için kullanılabilecek bir deneme sürümü olduğunu ve problem örnekleri de çözüm için NEOS sunucusuna gönderilebileceğini biliyorum .
Bununla birlikte, karar vermenin karar değişkenlerine göre sadece bir kez farklılaştırılması mümkündür, bu durumda, yerel bir çözümü hesaplarken öngörülen en dik iniş veya diğer bazı birinci dereceden optimizasyon yöntemini kullanmanız gerekir. Birçok çalışma, ikinci dereceden yöntemlerin kullanılabileceği sorunlara odaklandığından (ve bunları kullandığınızda, üstün yakınsama özellikleri onları daha iyi bir seçenek yapar), çözüm olmayan en dik iniş uygulamalarını bulamadım. ev ödevi problemlerine. GNU Bilimsel Kütüphane bir uygulama var, ama gösteri amaçlıdır var. Muhtemelen kendi uygulamanızı kodlamanız gerekecektir.
Sorun sadece karar değişkenleriyle ilgili olarak sürekli ise, yerel olarak çözmek için doğrudan yöntemleri kullanabilirsiniz. Kolda, Lewis ve Torczon'un doğrudan yöntemleri üzerine mükemmel bir anket var . Bu yöntemlerden en bilinenleri Nelder-Mead simplex algoritmasıdır . Birden fazla boyutta yerel bir asgari seviyeye yakınlaşmanın garantisi yoktur, ancak yine de oldukça pratik bir kullanım bulmuştur.
Paket seçimi, sorunu kısıtlamak için kullanmak istediğiniz dilin temeline bağlıdır, eğer sınırlandırılmış problemi çözmek, uygulamak istediğiniz algoritmanın sadece bir parçasıysa (veya algoritmanızdaki tek adım ise, bu durumda modelleme dilleri) üretim kodu için daha uygun hale gelir), sorunun türü ve boyutu ve herhangi bir paralelliğe ihtiyacınız varsa.