Karışık-tamsayılı ve dışbükey olmayan problemlerin global optimizasyonunu yapan bir laboratuarda çalışıyorum. Açık kaynak optimizasyon çözücülerindeki deneyimim, daha iyi olanların tipik olarak derlenmiş bir dilde yazılmış olmaları ve ticari optimizasyon paketleriyle kıyaslandığında zayıf olmaları oldu.
Sorununuzu açık bir denklem sistemi olarak formüle edebiliyorsanız ve ücretsiz bir çözücüye ihtiyacınız varsa, Aron'un dediği gibi en iyi bahis muhtemelen IPOPT. Diğer ücretsiz çözücüler COIN-OR web sitesinde bulunabilir. Bildiğim kadarıyla, doğrusal olmayan çözücüler geliştiriciler tarafından sağlanan Python bağlarına sahip değildir; Bulduğunuz tüm ciltler üçüncü taraf olacaktır. İyi çözümler elde etmek için, bulduğunuz herhangi bir doğrusal olmayan dışbükey çözücüyü uygun stokastik global optimizasyon sezgisine veya dal ve sınır gibi belirleyici bir global optimizasyon algoritmasına sarmanız gerekir. Alternatif olarak, her ikisi de en son teknolojiye sahip olan BARON ile kıyaslandığında iyi bir performans sergileyen deterministik dışbükey olmayan optimizasyon çözücü olan Bonmin veya Couenne kullanabilirsiniz .
Ticari bir optimizasyon çözücü satın alabilirseniz , birkaç doğrusal olmayan optimizasyon çözücü içeren GAMS modelleme diline bakmayı düşünebilirsiniz . Özellikle belirtmek gerekirse, CONOPT, SNOPT ve BARON çözücülerinin ara yüzleridir. (CONOPT ve SNOPT dışbükey çözücülerdir.) Geçmişte kullandığım kludgey bir çözüm, GAMS dosyasını yazmak ve GAMS'yi Fortran'dan (veya Matlab) hesaplamak için Fortran (veya Matlab) dil bağlantılarını kullanmaktır. optimizasyon probleminin çözümü. GAMS, Python dili bağlarına ve herhangi bir sorun olup olmadığını bildirmek isteyen çok duyarlı bir destek ekibine sahiptir. (Feragatname: GAMS ile bir bağlantım yok, ancak laboratuarımın bir GAMS lisansı var.) Ticari çözücülerden daha kötü olmamalıfmincon
; Aslında, daha iyi olmasalardı şaşırırdım. Sorunlarınızın boyutu yeterince küçükse, bir GAMS lisansı ve çözücüler için lisans satın almanız gerekmeyebilir, çünkü GAMS'nin değerlendirme kopyası web sitelerinden indirilebilir. Aksi takdirde, muhtemelen bir GAMS lisansıyla birlikte hangi çözücülerin satın alınacağına karar vermek istersiniz. BARON'un karma tamsayılı bir doğrusal programlama çözücüsü gerektirdiğini ve en iyi iki karma tamsayılı doğrusal programlama çözücüsünün CPLEX ve GUROBI lisanslarının akademisyenler için ücretsiz olduğunu, bu nedenle sadece GAMS arayüzlerini satın alarak kurtulabileceğinizi belirtmek önemlidir. Arayüzler ve çözücü lisanslardan daha çok para kazandırabilir.
Bu nokta tekrar ediyor: Yukarıda bahsettiğim deterministik dışbükey olmayan optimizasyon çözücülerinden herhangi biri için, modeli açık bir denklem seti olarak formüle edebilmeniz gerekir. Aksi takdirde, dışbükey olmayan optimizasyon algoritmaları işe yaramaz, çünkü hepsi dal ve sınır benzeri algoritmalar için dışbükey gevşemeleri oluşturmak için sembolik analizlere dayanır.
GÜNCELLEME: İlk başta başıma gelmeyen bir düşünce , daha kolay paralellik sağlama potansiyeli olan ve PETSc ile aşinalıktan yararlanma potansiyeline sahip olan tao4py ve petsc4py kullanarak Gelişmiş Optimizasyon için Araç Kiti'ni ( TAO ) ve PETSc'i de arayabileceğinizdir. ve ACTS araçları.
GÜNCELLEME # 2: Bahsettiğiniz ek bilgilere dayanarak, sıralı ikinci dereceden programlama (SQP) yöntemleri en iyi bahsiniz olacak. SQP yöntemleri genellikle iç nokta yöntemlerinden daha sağlam olarak kabul edilir, ancak yoğun doğrusal çözücüler gerektirme dezavantajına sahiptir. Sağlamlığı hızdan daha fazla önemsediğiniz için, SQP en iyi bahsiniz olacak. Python'da yazılmış iyi bir SQP çözücü bulamıyorum (ve görünüşe göre bu teknik raporda Argonne'da Sven Leyffer de yoktu ). SciPy ve OpenOpt gibi paketlerde uygulanan algoritmaların, uygulanan bazı SQP algoritmalarının temel iskeletine sahip olduğunu tahmin ediyorum, ancak daha gelişmiş kodların yakınsama sorunlarını aşmak için kullandığı uzman buluşsal bulgular olmadan. NLopt'ı deneyebilirsin, Steven Johnson tarafından MIT'de yazılmış. Bunun için yüksek bir umudum yok çünkü bildiğim hiçbir üne sahip değil, ama Steven Johnson iyi bir yazılım yazan harika bir adam (sonuçta FFTW'yi birlikte yazdı). SQP sürümünü uygular; Eğer iyi bir yazılımsa, bana bildirin.
TAO'nun kısıtlı bir optimizasyon çözücüsü şeklinde bir şeyi olacağını umuyordum, ama değil. Bir tanesini oluşturmak için kesinlikle ellerinden geleni kullanabilirsin; orada birçok parça var. Yine de belirttiğiniz gibi, bunu yapmanız sizin için çok daha fazla iş olacaktır ve eğer böyle bir sıkıntı yaşarsanız, bir TAO geliştiricisi olabilirsiniz.
Bu ek bilgilerle, Python'dan GAMS'ı (eğer bir seçenekse) arayarak ya da IPOPT Python arayüzünü eklemeye çalışarak daha iyi sonuçlar alabilirsiniz. IPOPT bir iç nokta yöntemi kullandığından, bu kadar sağlam olmayacaktır, ancak belki de Andreas'ın bir iç nokta yönteminin uygulanması, Matlab'ın SQP uygulamasından önemli ölçüde daha iyidir, bu durumda, hiçbir şekilde sağlamlıktan ödün vermeyebilirsiniz. Emin olmak için bazı vaka incelemeleri yapmanız gerekir.
Rasyonel eşitsizlik kısıtlamalarını polinom eşitsizliği kısıtlamaları olarak yeniden düzenlemenin püf noktasının farkındasınız (kitabınızda var); Bunun BARON'a ve diğer bazı dışbükey olmayan çözücülere yardım etmesinin nedeni, çözücü yakınsaklığını iyileştirmek ve hızlandırmak için kesintiler olarak kullanabileceği ek geçerli eşitsizlikler oluşturmak için analiz terimi kullanabilmesidir.
GAMS Python bağlamaları ve IPOPT'ye Python arayüzü hariç, cevap hayır, Python için henüz herhangi bir yüksek kaliteli doğrusal olmayan programlama çözücüsü yok. Belki @Dominique, NLPy ile bunu değiştirir.
GÜNCELLEME # 3: Python tabanlı bir çözücü bulmada daha fazla yabani bıçak, bir C ++ tabanlı global multiobjectif optimizasyon çözücüsü olan PaGMO'ya bir dizi Python bağlaması olan PyGMO vermiştir . Çoklu hedef optimizasyonu için yaratılmış olmasına rağmen, aynı zamanda doğrusal olmayan tek programlama için de kullanılabilir ve diğer çözücüler arasında IPOPT ve SNOPT ile Python arayüzleri vardır. Avrupa Uzay Ajansı içinde geliştirilmiştir , bu yüzden umarım arkasında bir topluluk vardır. Aynı zamanda nispeten yakın zamanda serbest bırakıldı (24 Kasım 2011).