Sınırlı optimizasyon için yazılım paketi?


21

Bazı değişkenlerin sınırlarını bildiğim (özellikle kutulanmış bir kısıtlama) kısıtlı bir optimizasyon problemi çözmek istiyorum.

argminuf(u,x)

tabi

a d ( u , x ) b

c(u,x)=0
ad(u,x)b

burada u , özellikle değişken bir vektördür, x bir durum değişkenlerinin vektörü ve bir c(u,x) bir eşitlik kısıtlaması (genellikle bir PDE) 'dir. Alt ve üst kısıtlamalar a ve b uzaysal olarak değişken olabilir.

Bu formdaki sistemleri hangi paketler kullanabilir?


1
Düzenlenen sürüm, kutu kısıtlı bir optimizasyon problemi gibi gözükmüyor. Kutu kısıtlı bir optimizasyon problemi, kısıt olarak aub . Is u bir fonksiyonu olması gerekiyordu x ? Mı c lineer içinde u ? Değilse, iki kez farklılaştırılabilir mi? Mı f içinde dışbükey u ? İçeri ikinci türevi mi u ? Son olarak, argminu noktaların dizi gösterir u minimum değeri hangi f elde edilir. Bunun yerine \ min_ {u} demek istiyorsun minu?
Geoff Oxberry

d(u,x)=u özel bir durumdur, ancak bu daha genel biçim uygulamada gerçekten yaygındır. Metodunuz yalnızca doğrudan u üzerindeki kısıtlamalarla başa çıkabiliyorsa her zaman ekstra değişkenler ekleyebilirsiniz u. Biz genellikle değeri daha fazla ilgilenen u minimum asgari değerden daha elde edildiği f . Sean, [pde] etiketini ekledi, bundan biraz düzenlilik elde edebiliyorsun. Sistemin hiperbolik olup olmadığını söylemedi, bu yüzden varsaymayalım. En farz etmeyelim f genellikle olmadığından, dışbükey olduğunu.
Jed Brown

İçin oldukça yaygındır f dahil etmek L1 veya W1,1 düzenlenmesine iki türevleri düşünmemelidir yüzden.
Jed Brown

@JedBrown: Bu mantıklı; Açık bir kutu kısıtlaması olmadan, "kutu kısıtlaması" nı belirtmek kafa karıştırıcıydı. (Tasarım sorunları, denetim sorunları) bahsediyoruz sen sorunların türleri için, u kesinlikle daha ilginç, ama optimizasyon problemleri genellikle kullanılarak belirtilmiştir min gösterimi ve bunların çözüm setleri kullanılarak anlatılmıştır argmin gösterimi.
Geoff Oxberry

PDE'leri hangi dilde / ortamda modelleyeceğinizi belirlemek yararlı olabilir. En iyi duruma getiricilerin seçimini kısıtlayabilir.
Dominique

Yanıtlar:


18

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.


4

TAO'yu denedik ancak eşitsizlik kısıtlı problemler için çok kullanışlı olmadığını gördük. Ayrıca, yalnızca bakım modunda olduğundan, en azından 2003'ten beri, PETSc'deki üzerine inşa edilen değişiklikleri takip etmek için yapılan güncellemeler dışında gerçek bir yeni özellik bulunmuyor.


3

Başka bir alternatif OPT ++ . Etkili doğrusal olmayan bir iç nokta çözücü ile doğrusal ve doğrusal olmayan kısıtlamaları destekler, fonksiyon doğruluğu için kontrol sağlar (sayısal farklılaştırma gerekiyorsa), adım boyutları için kontrol vb. kontroller faydalı olabilir.


OPT ++ 'nın neden kullanması için iyi bir paket olduğunu açıklayabilir misiniz? Siz (veya meslektaşlarınız) bu konuda herhangi bir deneyiminiz var mı?
Geoff Oxberry

Açıkçası, OPT ++ 'nın daha önce listelediklerinizden daha üstün olduğunu söylemem için hiçbir nedenim yok, çünkü bunlarla ilgili deneyimim yok (bir kaçını işaretlemek için yer işareti verdiğim halde). Ancak OPT ++ ile deneyimim var ve bunları ihtiyaçlarım için uygun buldum. Etkili doğrusal olmayan bir iç nokta çözücü ile doğrusal ve doğrusal olmayan kısıtlamaları destekler, fonksiyon doğruluğu için kontrol sağlar (sayısal farklılaşma gerekiyorsa), adım boyutları için kontrol vb. kontroller faydalı olabilir.
Barron

2
@Barron: Başlamak için cevabını buna yazmalıydın. :)
JM

2

Sorun bir tamamlayıcılık sorunu olarak formüle edilirse, TAO'yu (Gelişmiş Optimizasyon için Araç Takımı ) kullanabilirsiniz. Azaltılmış alan yöntemi (aktif set yönteminin bir değişkeni) gibi TAO'daki yöntemlerin bazıları şu anda PETSc'deki ( SNESVI ) SNES'in bir parçası olarak mevcuttur .


1

DAKİKA modülü CERNLIB (taşınır çoktan ROOT ) bir kullanan giriş alanı dönüşümü çalıştırmaları bir alana, kutu, kısıtlarını işlemek için ve dolayısıyla maliyet (özel durumlarda işlem görmesini Elbette, biraz hız.[,+]

MINUTE'nin ihtiyaçlarınız için iyi çalışacağını sanmıyorum, ancak dönüşüm kodun bir kısmını veya tamamını kendiniz yazmak zorunda kalırsanız olabilir.


Bu dönüşüm kötü görünüyor; Birkaç paragrafla eşlik etmesi şaşırtıcı değil.
Geoff Oxberry

1

@Geoff Oxberry'in belirttiği gibi, birkaç paket yerel bir çözüm bulmanıza izin veriyor. Bu farklı NLP çözücülerini aynı problem için karşılaştırabilmek istiyorsanız RobOptim'i kullanabilirsiniz .

RobOptim başlangıçta robotik optimizasyon problemleri düşünülerek geliştirilse de, lineer olmayan optimizasyon problemleri için uygundur. Birden fazla NLP çözücü için eklentileri olan basit bir C ++ arayüzü sağlar (örn. Ipopt, NAG). Degradeler sağlayamazsanız, sonlu farklar hesabı otomatik olarak yapılabilir.

Açık kaynak kodudur, GitHub'daki kaynak kodunu kontrol edebilirsiniz: https://github.com/roboptim/

Not: Bu projenin geliştiricilerinden biriyim.


1
Diğer cevapların , çerçeveleri değil , çözücüleri tanımladığını belirtmek gerekir . İyi bir çözücüye göre kabul edilebilir bir çerçeve ( sürücü ) bulmak daha kolaydır ,
Deer Hunter

@DeerHunter Belirli bir problemi çözmek için bir çözücü ararken, hangi çözücünün en iyi çözümü hesaplayacağını ve / veya en hızlı olanı önceden tanımlamak zordur. “İyi bir çözücü” hakkında konuşuyorsun, ama bu gerçekten ne çözdüğüne bağlı: bir “en iyi genel” çözücü yok. Üstelik, çözücü API'leri genellikle oldukça farklıdır, bu nedenle bir çözücüden diğerine kolayca geçmenizi sağlayan iyi bir çerçeve kullanmak gerçekten yararlı olabilir. Soru “sınırlı optimizasyon için yazılım paketleri” ile ilgiliydi ve çerçeveler de bu kategoriye giriyor.
BenC,

1

PDE kısıtlı optimizasyon paketlerinin kısmi bir listesi.

Dolfin Adjoint, FEniCS FEM'in bir parçasıdır:

http://dolfin-adjoint.org/

ROL, MOOCHO, Sundance Trilinos'un bir parçasıdır:

https://github.com/trilinos/trilinos/tree/master/packages/rol/

https://github.com/trilinos/trilinos/tree/master/packages/Sundance/

http://trilinos.org/packages/moocho/

PDE kısıtlı optimizasyon için PYOMO örneği:

https://software.sandia.gov/trac/pyomo/browser/pyomo/trunk/examples/dae

TAO kılavuzu, PDE kısıtlı optimizasyon problemlerini çözme örnekleri verir:

http://www.mcs.anl.gov/petsc/petsc-3.5/docs/tao_manual.pdf


1
SciComp.SE'ye Hoşgeldiniz! Sadece bir bağlantı sağlamak (olabildiğince yararlı) gerçekten iyi bir cevap değil; bkz. meta.stackexchange.com/questions/8231 . Bunu biraz genişletebilir misiniz (bilgisayar dili, ne tür kısıtlamalar işlenebilir, hangi yöntemler uygulanır, vb.)?
Christian Clason

@ ChristianClason ile aynı fikirdeyim. PDE kısıtlı optimizasyon yazılımı için çözücülerde önemli gelişmeler oldu; ancak, bu cevap aslında bu paketlerin gerçekte hangi algoritmaları uyguladıklarına dair bir arka plan sağlamaz.
Geoff Oxberry

0

APM MATLAB ve APM Python paketleri Karma Tamsayı Diferansiyel Cebirsel denklem sistemlerinin büyük ölçekli (100.000 değişkenler) çözebilir. Yazılım, ticari veya akademik kullanım için bir web servisi olarak kullanılabilir. Bir PDE sistemini çözüyorsanız, bir kez DAE veya ODE formuna almak için APMonitor modelleme diline koymak için bir kereye mahsus hale getirebilirsiniz. Modelleme dili, APOPT , BPOPT, IPOPT, SNOPT ve MINOS çözücülerini kullanır.


1
Lütfen, yazılımınızı belirten bu ve gelecekteki cevaplarda üyeliğinizi bir APMonitor geliştiricisi olarak açıklayın. Bilgilendirme politikamız hakkındaki detaylar için SSS bölümüne bakınız.
Geoff Oxberry

Geoff, bahşiş için teşekkürler. 2004'te APMonitor platformunda Austin Üniversitesi Texas Üniversitesi'nde yüksek lisans öğrencisi olarak çalışmaya başladım. Şimdi onu Brigham Young Üniversitesi'ndeki araştırma grubumuzda biyolojik, kimyasal, havacılık ve diğer uygulamaların proses kontrolü ve optimizasyonu ( apm.byu.edu/prism ) için kullanıyoruz. Ticari veya akademik kullanıcılar için serbestçe kullanılabilir hale getiririm.
John Hedengren,
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.