Karışık tamsayı programlama problemini çözmek için en hızlı yazılım (açık kaynak) nedir


14

Karışık bir tamsayı programlama sorunum var. Ve şu anda çözücüm olarak GLPK kullanıyorum. Ancak GLPK'nın Doğrusal Programlama sorununa iyi geldiğini gördüm, ancak Karışık Tamsayı programlama için çok daha uzun zaman gerektiriyor, bu nedenle gereksinimimizi karşılamıyor. Başka yazılımlar arıyorum. Karışık tamsayı programlama problemini hızlı bir şekilde çözmek için başka iyi açık kaynak araçları var mı? Teşekkürler!


SCIP ile karşılaştırmalar gördünüz mü ?
Ali

Yanıtlar:


14

Açık kaynaklı bir şey istiyorsanız, muhtemelen COIN'in CBC kodunu denemek istersiniz (ayrıca bir şube ve fiyat çerçevesi veya SENFONİ gibi birkaç başka MILP çözücüsü de vardır).

Gurobi ve CPLEX çok daha hızlı olacak ve 2011 veya 2012 INFORMS toplantısı itibariyle Gurobi, CPLEX'ten daha hızlıydı (performans ölçümleri elbette probleme bağlı olsa da). Tezimde çözülen MILP'lerde, Gurobi CBC'den yaklaşık 15-100 kat daha hızlıydı ve CPLEX neredeyse Gurobi kadar hızlıydı, ancak çok yavaştı (12-80 kat daha hızlı).

En kötü durum performansı gerçekten üstel olsa da, yürütme süresi büyük ölçüde sorun yapısına bağlı olacaktır. Özel bir yapıdan yararlanmadıkça (belki de çok daha küçük sorunlara ayrılabilen stokastik bir programsa) milyonlarca değişkenli bir MILP'yi çözmeniz pek olası değildir, ancak binlerce olmayan önemsiz MILP'leri çözmek tamamen mümkündür. bir dakikadan kısa sürede değişkenler. (Elbette, bu sorunların çözülmesi bir saat veya daha fazla sürebilir.)

Brian Borchers'in belirttiği gibi, CPLEX ve Gurobi'nin bazı araştırmacılar için ücretsiz lisansları vardır, bu iki yazılım paketinden biri genel amaçlı bir MILP çözücü olarak kullanmak için en iyisi olacaktır.


6

Karma tamsayılı doğrusal programlama problemlerini çözmek doğrusal programlama problemlerinden çok daha zordur. Hesaplama karmaşıklığı açısından, LP'ler polinom zamanda çözülebilirken, MILP çözümü NP-Zor bir sorundur. MILP'leri çözmek için bilinen algoritmalar üstel en kötü durum karmaşıklığına sahiptir.

SCIP (akademik kullanım için ücretsiz), CPLEX (ticari ancak akademik lisanslama seçeneği vardır) ve GUROBI (ayrıca akademik lisanslama seçeneği ile ticari.) Dahil olmak üzere, karma tam sayı doğrusal programlama için bakabileceğiniz başka yazılım paketleri de vardır. Bu paketlerden biri sorunlarınızda GLPK'den önemli ölçüde daha hızlı olabilir, ancak bunların herhangi birinin benzer boyuttaki LP'leri çözerken olduğu gibi MILP'yi çözmede neredeyse hızlı olmasını beklemeyin.


4

Bir grup farklı çözücüyü denemek istiyorsanız, Julia'nın JuMP modelleme çerçevesini deneyin. Modelinizi bir JuMP modeli olarak yazmanıza ve ardından çözücüleri bir kod satırı ile kapatmanıza izin verir. Örneğin, MILP sorunları için Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi ve MOSEK çözücüleri arasından seçim yapabilirsiniz. Bu nedenle, JuMP'de yazarsanız, Geoff'un bahsettiği tüm çözücüleri deneyebilir ve bir grup kod yazmak zorunda kalmadan neyin işe yaradığını görebilirsiniz. Kendi kişisel testleriniz, problemleriniz için en hızlı algoritmaların ne olduğu konusunda en iyi bilgi kaynağı olacaktır.


JuMP çerçevesi fazla yük ekliyor mu?
naught101

1
Hayır, JuMP makrolar aracılığıyla yapılır, bu yüzden derleme zamanındadır. Aslında, JuMP'nin kodu yeniden yazmak için makroları kullandığı ve degradeler, Jacobianlar ve Hessen'ler için verimli işlevleri hesaplamak için otomatik farklılaştırma kullanması, bu nedenle degrade / Jakobyan / Hessian. @code_llvmYapıştırıcı kodunun temelde hiçbir şey olmadığını görmek için sonuçta oluşan montaj kodunu kontrol etmek için gerçekten kontrol edebilirsiniz (bunun nedeni, Julia'nın işlev işaretlerini ve C / Fortran ile aynı bit dizilerini kullanmasıdır).
Chris Rackauckas

@ChrisRackauckas Hangi çözücü, doğrusal olmayan kısıtlamalarla ilgili doğrusal olmayan sorunlar için daha iyi çalışır?
skan

Bu muhtemelen bir yorumda sorulmaması gereken tamamen farklı bir sorudur, ancak gerekli kısıtlamalara ve küresel veya yerel optimizasyona ihtiyacım olup olmadığına bağlı olarak JuMP'yi NLopt veya IPOPT ile kullanma eğilimindeyim.
Chris Rackauckas

3

Başkalarının önerilerini takip ederek , birçok proje için (ticari) GAMS kullandım . Çok düz ileri; tek yapmanız gereken probleminizin matematiksel formülasyonunu koymaktır. Değişkenleri, kısıtlamaları, objektif fonksiyonları ve tüm girdi verilerini alır. Daha sonra, her durum için bir dizi çözücü (optimize edici) sağlar. Durumunuza bağlı olarak, daha karmaşık çözücüler eklersiniz.

Kesinlikle, KOLAY bir göz atmaya değer. Açık kaynaklı çerçeve.

"Hızlı" terimi çok belirsiz! Daha spesifik olmalısınız; Yineleme sayısı açısından hızlı mı? değerlendirme sayısı? geçen zaman? bunların kombinasyonu?

Bununla birlikte, bir yazılım aramıyorsanız ve sadece sorunu çözmek istiyorsanız, çok yüksek itibar ve performansa sahip açık kaynaklı bir optimize edici olan küresel optimizatör NSGA-II'yi kullanmanızı önerebilirim.

Daha fazla bilgi verdiyseniz, tam olarak yol gösterebilirim.


1
NASA tarafından geliştirilen / desteklenen [openMDAO] [1] 'i ciddi olarak düşünmelisiniz ve oldukça esnektir!
2013
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.