Python için yüksek kaliteli bir doğrusal olmayan programlama çözücü var mı?


77

Çözülmesi gereken birkaç dışbükey olmayan küresel optimizasyon problemim var. Şu anda , oldukça etkili olan MATLAB's Optimizasyon Araç Kutusu'nu (özellikle, fmincon()algoritma = ile 'sqp') kullanıyorum . Ancak, kodumun çoğu Python'da ve optimizasyonu Python'da da yapmak isterim. Rekabet edebilecek Python bağlarına sahip bir NLP çözücü var mı fmincon()? O olmalı

  • Doğrusal olmayan eşitlik ve eşitsizlik kısıtlarını kaldırabilir
  • kullanıcının bir Jacobian sağlamasını gerektirmez.

Küresel bir optimum garanti etmiyorsa (tamam fmincon()değil) sorun değil. Zorlu problemler için bile en iyisine göre biraz daha yavaş olsa bile, sağlam bir şekilde yerel optimumya dönüşen bir şey arıyorum fmincon().

OpenOpt aracılığıyla mevcut olan birçok çözücüyü denedim ve onları MATLAB'lerden daha düşük buldum fmincon/sqp.

Sadece vurgu için zaten izlenebilir bir formülasyona ve iyi bir çözücüye sahibim. Amacım sadece daha düzenli bir iş akışına sahip olmak için dilleri değiştirmektir.

Geoff, sorunun bazı özelliklerinin alakalı olabileceğine dikkat çekiyor. Onlar:

  • 10-400 karar değişkeni
  • 4-100 polinom eşitlik kısıtlaması (polinom derecesi 1 ile 8 arasında değişmektedir)
  • Karar değişkenlerinin sayısının yaklaşık iki katı olan bir miktar rasyonel eşitsizlik kısıtı
  • Amaç işlevi karar değişkenlerinden biridir

Eşitlik kısıtlamalarının Jacobian'ı, eşitsizlik kısıtlamalarının Jacobian'ı gibi, yoğundur.


2
David, bu şimdi ne yazık ki tamamen farklı bir sorudur :) Yerel asgari ve küresel arasındaki fark, potansiyel olarak sınırsız sayıda doktora konusudur ve No Free Lunch Teoremi, genel bir genel optimizasyon problemi için iyi olan herhangi bir çözücüdür. başkaları için kesinlikle kötü. Formülasyon seçeneklerini düşünerek başlamanızı önerebilirim (Karışık bir tamsayı formu var mı? Dışbükey bir yaklaşım var mı?)
Aron Ahmadia

David, Aron iyi bir noktaya değindi. Formülasyon kesinlikle dışbükey olmayan NLP'lerin sayısal çözümlerini elde etmek için çok önemlidir; hızlı bir şekilde iyi çözümler elde etmek bile. Alternatif formülasyonları göz önünde bulundurup ardından bu formülasyonların yapısını, çözücü seçiminize yönlendirmek için kullanmak faydalı olabilir. Sorununuzda uyandırabileceğiniz her türlü yapıdan yararlanan (çözücü, çok aşamalı stokastik programlama, kesim yapmak için kısıtlamalar kullanmak gibi) bir çözücü kullanmak, iyi çözümler elde etmenin anahtarıdır.
Geoff Oxberry

@DavidKetcheson: Kullanmak istediğiniz bir formülasyonunuz olduğundan, en azından formülasyonunuzun özellikleri hakkında yorum yapabilir misiniz? Lagrangiyenli Jacobyanlar yoğun mu yoksa seyrek mi? Kabaca kaç tane değişken var? Sorununuz için uygun olmayan çözüm yöntemleri uygulayan bir yazılım önermek bizim için iyi bir şey değil ve insanların ilk etapta formülasyonlar hakkında konuşmasının tek nedeni bu.
Geoff Oxberry

coopr asl kullanarak ipopt'a bağlanma sağlar: ipopt
denfromufa 12:14

Yanıtlar:


32

fmincon()Sizin de belirttiğiniz gibi, doğrusal olmayan optimizasyonda iyi bilinen ve küresel optimumun bulunup bulunmadığına bakılmaksızın yerel bir minimum bulmaya çalışan birkaç strateji kullanıyor. Bu konuda sorun yaşarsanız, soruyu doğru ifade ettiğinizi düşünüyorum (doğrusal olmayan optimizasyon).

Genel doğrusal olmayan optimizasyon için bildiğim en iyi paket IPOPT [1]. Anlaşılan Matthew Xu, IPOPT'a bir dizi Python bağları tutuyor , bu yüzden bu başlangıç ​​için bir yer olabilir.

[1]: Andreas Wachter kişisel bir arkadaş, bu yüzden biraz önyargılı olabilirim.


Andreas iyi işler yapıyor ancak çözücüsü ayrıca Jacobian matris bilgisi (veya en azından, Jacobian matrisi için azlık bilgisi) gerektiriyor. Jacobian matrisi gerektirmeyen bir çözücü istediğinizi söylerken, Jacobian matrisini analitik olarak vermenizi gerektirmeyen bir çözücü istediğinizi mi demek istiyorsunuz? hiç Jacobian matris bilgisi gerektirmeyen bir çözücü (sizi türevsiz optimizasyon yöntemleriyle sınırlar)?
Geoff Oxberry

İyi yakalama. Eski demek istiyorum; Soruyu güncelledim.
David Ketcheson

Sonunda sage.openopt.org kullanarak sorunuma IPOPT uygulayabildim . Bu harika!
David Ketcheson

4
Bugün (2017), IPOPT'yi Python yalak Pyomo'da da kullanabilirsiniz . Jacobian ve kendir için bir cebirsel modelleme dili ve otomatik fark olsun.
Antonello

@Antonello düzeltilmiş bağlantı pyomo.org'dur
Moonwalker

37

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).


PaGMO'nun GPL lisanslı olduğunu lütfen unutmayın
denfromufa

14

APM Python

Güncelleme: az önce yayınladığımız yeni GEKKO paketini görün .

APM Python , APOPT, BPOPT, IPOPT ve diğer çözücülere arayüzleri olan ücretsiz bir optimizasyon aracıdır. Çözücülere birinci (Jacobian) ve ikinci (Hessian) bilgileri sağlar ve sonuçları görüntülemek için isteğe bağlı bir web arayüzü sağlar. APM Python istemcisi pip ile yüklenir:

 pip install APMonitor

Ayrıca bir Python betiğine şu şekilde de yüklenebilir:

try:
    from APMonitor.apm import *
except:
    # Automatically install APMonitor
    import pip
    pip.main(['install','APMonitor'])
    from APMonitor.apm import *

Birkaç benchmark testi yaptık ve APOPT (aktif set metodu) ve IPOPT (interior point metodu) kombinasyonunun büyük oranda benchmark problemlerini çözebileceğini gördük. İndirme zip dosyasında yer alan bir takım örnek problemler vardır. Muhtemelen başlamak isteyeceğiniz şey Hock Schittkowski # 71 problemi. Bu en basit örnektir ve kısıtlanmış optimizasyon problemlerinin nasıl çözüleceğini gösterir.

Python / MATLAB için bir tarayıcı arayüzü ve bir API var. Python'un API'si apmonitor.com ana sayfasından indirilebilen tek bir komut dosyasıdır (apm.py). Komut dosyası bir Python koduna yüklendiğinde, aşağıdaki sorunları çözme yeteneği verir:

  • Doğrusal olmayan denklemler
  • Karışık tamsayılı doğrusal olmayan programlama
  • Diferansiyel ve cebirsel denklemler
  • En küçük kareler model fitingi
  • Hareketli ufuk tahmini
  • Doğrusal olmayan model kestirim kontrolü
  • vb.

Yeni kullanıcı için, APM Python yazılımı, kullanıcının soru gönderebileceği bir Google Grupları forumuna sahiptir. Yöneylem araştırması ve mühendisliğinde optimizasyon problemlerini gösteren web seminerleri vardır.

Aşağıda bir optimizasyon problemi örneği bulunmaktadır (hs71.apm).

Model
  Variables
    x[1] = 1, >=1, <=5
    x[2] = 5, >=1, <=5
    x[3] = 5, >=1, <=5
    x[4] = 1, >=1, <=5
  End Variables

  Equations
    x[1] * x[2] * x[3] * x[4] > 25
    x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40

    minimize  x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]
  End Equations
End Model

Optimizasyon problemi aşağıdaki Python betiği ile çözüldü:

from APMonitor.apm import *
server = 'http://byu.apmonitor.com'

# Application name
app = 'eqn'

# Clear previous application
apm(server,app,'clear all')

# Load model file
apm_load(server,app,'hs71.apm')

# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)
apm_option(server,app,'nlc.solver',3)

# Solve on APM server
solver_output = apm(server,app,'solve')

# Display solver output
print(solver_output)

# Retrieve results
results = apm_sol(server,app)

# Display results
print('--- Results of the Optimization Problem ---')
print(results)

# Display Results in Web Viewer 
url = apm_var(server,app)
print("Opened Web Viewer: " + url)

APM Python, optimizasyon için ücretsiz bir web hizmetidir. Optimizasyon problemleri uzak sunucularda çözülmüş ve sonuçlar yerel Python betiğine döndürülmüştür. İnternet bağlantısı gerektirmeyen bir APMonitor yerel sunucusu da indirilebilir ( İndirme sunucusu ). Son zamanlarda MATLAB ve Python için paralel işleme desteği ekledik. Python modülü Python 2.7 veya Python 3+ ile uyumludur.


2
John, APM Python'un serbestçe erişilebilir olduğunu görüyorum, ancak yerel olarak kullandığı çözücüleri içerip içermediğini veya hesaplamaları yapmak için AP Monitor web sitesine bağlanmayı gerektirip gerektirmediğini anlayamıyorum. Hangisini merak ediyorum.
Aron Ahmadia

3
Aron, MATLAB veya Python scriptleri optimizasyon problemlerini çözmek için APM sunucularına internet bağlantısı gerektirir. Bunun bir takım avantajları ve dezavantajları vardır. Olumlu tarafı, optimizasyon için bir web servisi platformlar arası uyumluluk, bazı ticari çözücülere ücretsiz erişim ve kullanıcıya şeffaf olan yazılım yükseltmeleri sağlar. Aşağı yönde, APM bazı açık kaynaklı alternatifler kadar esnek değil, optimizasyon uygulamaları için anahtar teslimi bir çözüm arayan endüstriyel kullanıcılar için tasarlanmıştır.
John Hedengren,

@ JohnHedengren Optimizasyon probleminin kendisini oluşturmak için MATLAB'da başka bir kütüphaneyi kullanarak, özellikle bu dış çağrıları içeren kısıtlamaları içeren bazı ön hesaplamalar var. APM'nin hala bu amaç için uygun olduğunu düşünüyor musunuz?
gpavanb

Bunun için ortak terimin blackbox optimizasyonu olduğunu düşünüyorum.
gpavanb

@gpavanb APMonitor paketi, denklemlerin modelleme dilinde yazılmasını gerektirir. Harici kodu yüklemek için bir seçenek artıkları ve en azından analitik birinci türevleri sağlayan bir nesne oluşturmaktır. Bu nesneleri genellikle burada listelenen hızlar için F90'da kodlar : apmonitor.com/wiki/index.php/Main/Objects APMonitor'un kara kutu optimizasyonuna sahip bir uygulama için en iyi seçenek olduğunu sanmıyorum.
John Hedengren

7

Bu, sorunuza tamamen cevap vermese de, NLPy adlı doğrusal olmayan programlama için bir Python paketi hazırladım. En yeni sürüm https://github.com/dpo/nlpy adresinden alınabilir.

NLPy'nin araştırma sınıfı olduğunu ve içerdiği çözücülerin IPOPT gibi daha deneyimli kodlar kadar güçlü olmadıklarını vurgulamalıyım. Dahası, şu anda Jacobian'ların sağlanmasını istiyorlar. Bununla birlikte, NLPy'nin amacı, araştırmacıların ihtiyaç duymaları halinde özel çözücüleri bir araya getirmeleri için gereken araçları sağlamaktır. Her halükarda, bir denemeyi yaparsanız yorumlarınızı çevrimdışı olarak duymak isterim. Ayrıca, ilgili paketleri https://github.com/dpo/pykrylov ve https://github.com/dpo/pyorder adresinde yararlı bulabilirsiniz. Şu anda, NLPy'nin dokümantasyonu kesinlikle yoksundur. Diğer ikisi makul olmalı.


7

pyomo , python'da optimizasyon için eksiksiz bir GAMS / AMPL benzeri modelleme ortamıdır. Son derece güçlüdür, AMPL tarafından desteklenen tüm çözücülere arayüzleri vardır ve otomatik olarak Jacobian vb. Üretir. Bununla birlikte, bir 'sanal python ortamında' çalıştığından, onu mevcut koda bağlamak önemsiz olmayabilir.


5

GEKKO Python

Yakın zamanda (2018) GEKKO Python paketini piyasaya sürdük.Aktif küme ve iç nokta yöntemleri ile IPOPT, APOPT, BPOPT, MINOS ve SNOPT gibi çözücülerle doğrusal olmayan programlama için. Bu çözücüleri kullanmakla ilgili sorunlardan biri normalde en az birinci türevleri ve isteğe bağlı olarak ikinci türevleri sağlamanız gerektiğidir. Diğer cevaplarda da belirtildiği gibi, bunu sizin için yapabilecek birkaç güzel modelleme dili vardır. GEKKO, denklemleri bayt koduna göre hazırlar, böylece modeli Fortran veya C ++ 'da hız cinsinden yazdığınız gibi yapar. Otomatik farklılaşma, 1. ve 2. türevlerini gradyan bazlı çözücülere seyrek olarak sağlar. GEKKO'yu optimal kontrol problemleri için tasarladık, ancak fmincon'a benzer problemleri de çözebilir. Aşağıda eşitlik ve eşitsizlik sınırlamaları ile doğrusal olmayan bir programlama probleminin hızlı bir örneği verilmiştir. İlk sen'

pip install gekko

Hock Schittkowski sorun 71. amaç fonksiyonu, eşitsizlik kısıtlaması, eşitlik kısıtlaması, ve üst ve alt sınırları ile dört değişken bir örnek olarak aşağıda gösterilmiştir.

from gekko import GEKKO
m = GEKKO() # Initialize gekko
# Initialize variables
x1 = m.Var(value=1,lb=1,ub=5)
x2 = m.Var(value=5,lb=1,ub=5)
x3 = m.Var(value=5,lb=1,ub=5)
x4 = m.Var(value=1,lb=1,ub=5)
# Equations
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Obj(x1*x4*(x1+x2+x3)+x3) # Objective
m.options.IMODE = 3 # Steady state optimization
m.solve() # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))    

GEKKO tüm platformlarda (Windows, MacOS, Linux, ARM işlemciler) ve Python 2.7 ve 3+ ile çalışır. "Remote = False" seçeneğini ayarlayarak internet bağlantısı olmadan tamamen yerel bir seçenek kullanılabilir. Yerel seçenek şu anda yalnızca Windows için geçerlidir ve Internet bağlantısı olmadan yerel olarak çalışmak için Linux, MacOS, ARM işlemciler gibi diğer sürümlerde çalışıyoruz. Yerel sürüm yalnızca lisans gerektirmeyen ücretsiz çözücüler içerir. Varsayılan olarak, sorun çözümün hesaplandığı ve Python'a döndürüldüğü ortak bir sunucuya gönderilir.

Her ne kadar bu soru özellikle Python'da doğrusal olmayan programlamayı çözmekle ilgili olsa da, GEKKO'nun çözebileceği başka problemleri ve öğrenme optimizasyonu için bazı kaynakları da vurgulayacağım. GEKKO ayrıca karma tamsayılı ve diferansiyel cebirsel denklemleri çözer ve gelişmiş kontroller için önceden programlanmış birkaç nesneye sahiptir (DMC, RMPCT, vb. Gibi). Çalışma modları veri uzlaştırma, gerçek zamanlı optimizasyon, dinamik simülasyon ve doğrusal olmayan öngörücü kontrolü içerir.

Optimizasyon üzerine iki ders ( tasarım optimizasyonu ve dinamik optimizasyon ) öğretiyorum ve kurs materyalini çevrimiçi olarak yayınladım. Dinamik optimizasyon kursu her yıl Ocak ayından itibaren sunulmaktadır ve kurs için GEKKO Python paketini (ve MATLAB) kullanıyoruz. GEKKO, APMonitor Optimization Suite'in bir uzantısıdır ancak modelleme ve çözüm görselleştirmesini doğrudan Python'a entegre etmiştir. APMonitor ve GEKKO referansları bu pakette çözülebilecek uygulamaların bir örneğini verir. GEKKO, Ulusal Bilim Vakfı Araştırma Hibe No. 1547110 altında geliştirilmiştir .


Yazılımınızın postada belirtilen belirli gereksinimleri nasıl ele aldığını açıklamak için cevabınızı düzenler misiniz? Aksi halde, bu sorunun cevabından ziyade bir battaniye reklam ilanı gibi görünür (ve muhtemelen kapanacaktır).
Christian Clason

Christian, cevabı, soruya daha spesifik olacak şekilde düzenledim. GEKKO ve çevrimiçi kurslar hakkında ek bilgileri sonuna kadar taşıdım, ancak gerekirse kaldırabilirim.
John Hedengren

4

1
Teşekkürler, ama denedim bu (buna ek bir arayüz sağlayan OpenOpt aracılığıyla). Fmincon / sqp'den daha iyi olmadı ve ikincisinin başarılı olduğu birçok durumda başarısız oldu.
David Ketcheson

1
Güncelleme: Bunu doğrudan SciPy'den denedim. Birkaç dakika içinde fmincon'un sürekli olarak global optimum bulduğu problemlerde bile başarısız oluyor.
David Ketcheson

4

PyGMO , onlara aynı arayüzü sağlayan birkaç çözücü içerir. IPOPT ve scipy slsqp, kodu derlemeniz ve üçüncü taraf kodunu bağımsız olarak indirmeniz / yüklemeniz durumunda dahil edilir.

Bir bonus olarak, çözücünün paralel kullanımı takımada sınıfı üzerinden gerçekten çok kolay (çoklu çalıştırma)!


3

Stephen Boyd'un dışbükey optimizasyon yazılımı etrafında Python sarmalayıcısı olan cvxmod var. Sage paketinin bir parçası .


Ancak OP, dışbükey olmayan bir optimizasyon problemi hakkında soruyor.
Alejandro

1
OP, dışbükey olmayan bir optimizasyon problemi hakkında sorular soruyor, ancak şimdiye kadar sözü edilen tüm çözücülere, ek meta-teknik (multistart veya deterministik olarak adlandırılan diğer stokastik global optimizasyon algoritmaları olmadan dışbükey optimizasyon problemleri için epsilon-optimal çözümler bulmaları garanti edilmektedir. doğrusal olmayan, dışbükey optimizasyon çözücüleri) veya objektif fonksiyon ve kısıtlamaların gevşetilmesini gerektiren dal ve sınır benzeri algoritmalar (dal ve sınır, dal ve kes ve dal ve azalt gibi). Bu cevap, 11 Aralık’ta belirtilen diğerlerinden daha kötü değil.
Geoff Oxberry

Geoff, cvxmod'u dışbükey olmayan bir soruna nasıl uygulayabilirim?
David Ketcheson

Yazılımı kullanmadım, ancak teoride, diğer herhangi bir dışbükey çözücü gibi, şimdi de fmincon kullandığınız gibi yerel olarak en uygun çözümleri bulmak için kullanacaksınız (ki bu bir dışbükey çözücüdür). Bunu kullanmanın bir yolu çoklu başlangıç ​​olacaktır. Dışbükey çözücünüz için başlangıç ​​tahminleri olarak kullanılacak noktaların bir listesini oluşturun. Tahmin olarak kullanılan her nokta için, çözücü tarafından döndürülen çözümü kaydedin. Döndürülen tüm çözümler üzerinde asgari objektif işlev değerine karşılık gelen nokta, global optimum için en iyi yaklaşımdır.
Geoff Oxberry

1
@Geoff: Evet, multistart kullanıyorum. CVXMOD ise sadece disiplinli dışbükey programlama anlamında ifade edilebilecek sorunları kabul eder. Genel doğrusal olmayan programlama problemleri yapamaz. Dediğiniz gibi, sorunumu belirten art arda dışbükey gevşemeler arayabilirim, ancak buradaki tüm amaç benim için daha az çalışmam.
David Ketcheson


3

Python-matlab-bridge veya benzerini kullanarak Python'dan Matlab'ı aramaya ne dersiniz ?
Bu, test durumlarından ve doktordan bahsetmek yerine, kod aktarma kodlarından çok daha kolay görünüyor.
Ve genel: Herhangi bir Python herhangi bir Matlab'a veya en fazla en fazla. ( SO'daki A-tool-to-matlab-code-to-python kodları kaynak-kaynak çevirmenleri de listeler: zor.) Bu tür köprüleri kullananlardan gelen yorumlar memnuniyetle karşılanacaktır.


2014b Sürümünden itibaren, bu şimdi doğrudan Matlab tarafından desteklenmektedir; bkz mathworks.de/help/matlab/matlab-engine-for-python.html
Christian Clason

@Hristian Clason, bu kadar Matlab uyuşmuş gibi görünüyor? python-matlab köprüsü gibi. (Yine de kullanmadım.)
denis

Doğrudan değil (özel bir matlab dizi sınıfına sahip görünüyor), ancak bununla numpy arasında dönüşüm yapmanın bir yolu var. Tabii ki, veri kopyalama nedeniyle bir miktar ek yük olacak, ancak OP'nin belirttiği sorun boyutları için muhtemelen daha az sorun olacaktır. (Kendim kullanmadım; sadece seçeneği işaret edeceğimi düşündüm.)
Christian Clason


2

Peki ya CMA-ES? Python bağları vardır ve konveks olmayan, doğrusal olmayan optimizasyon problemlerine çok uygundur ve biraz kullandım: https://www.lri.fr/~hansen/cmaesintro.html

Pip aracılığıyla kurulum:

pip install cma

İşte kendi web sitesinden bazı örnek kod:

import cma
help(cma)  # "this" help message, use cma? in ipython
help(cma.fmin)
help(cma.CMAEvolutionStrategy)
help(cma.CMAOptions)
cma.CMAOptions('tol')  # display 'tolerance' termination options
cma.CMAOptions('verb') # display verbosity options
res = cma.fmin(cma.Fcts.tablet, 15 * [1], 1)
res[0]  # best evaluated solution
res[5]  # mean solution, presumably better with noise

Bu eniyileyici, OP'nin istediğinden çok uzak. Örneğin, CMA-ES ile eşitlik veya eşitsizlik kısıtlamalarının nasıl ele alınacağı konusunda net bir yol yoktur.
haziran

1

MATLAB bir JIT derleyicisine sahip olduğundan CPython henüz yok (en azından pypy tam numpy desteği alana kadar). Ticari olarak üretilmiş olandan daha iyi bir serbest çözücü istiyor gibisiniz fmincon. Çok fazla değil mi?

Ticari NLP çözücüler arasında IIRC, sadece snopt şu ana kadar bir Python API sağlamıştır (oldukça çirkin olsa da).

Hangi OpenOpt çözücülerini denediniz? Konveks olmayan görevinizde ne kadar değişken ve kısıtlama var?

OpenOpt Sage sunucusuna kurulmadan OpenOpt / Funcdesigner API üzerinden IPOPT'yi deneyebilirsiniz ("adaçayı python'a çevir " resmine dikkat edin).

OpenOpt'a da bağlı Algencan, konveks olmayan probları oldukça iyi çözdüğünü söylüyor (ne yazık ki OO adaçayı sunucusunda yok). Öte yandan, konveks olmayan problemler için garantili bir çözüm sağlayabilen degrade tabanlı bir çözücü yoktur. Makine değişmesi hataları nedeniyle herhangi bir çözücünün başarısız olacağı yerlerde 2 değişkenli bazı dışbükey NLP'ler bile oluşturulabilir, örn. ile başlar gibi tahmin . ( x , y ) = ( 1 , 1 )10300(x0.1)2+10300(y0.2)2(x,y)=(1,1)


2
Dikkatlice okursanız, sadece fmincon'a benzer sağlamlıkta bir şeyler istiyorum. Daha iyi olması gerekmez ve daha yavaş olabilir.
David Ketcheson


1

Google Ceres çözücünün aslında birçok projede kullanılan doğrusal olmayan bir optimizasyon aracı olduğunu belirtmek güzel.

Burada mevcut bir python sarıcı da var: https://github.com/rll/cyres


Levenbeg-Marquardt değil mi? güzel olsa da, OP'nin istediğinden çok uzak
denis

Seriler gerçekten iyi bir çözücü olsa da, eşitlik kısıtlamalarını hiç desteklemiyor ve sadece parametrelerin üst / alt sınırları olarak eşitlik sınırlamalarını destekliyor (mevcut sürüm 1.12'den itibaren).
orzechow

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.