Karma tamsayılı doğrusal programların etkin çözümü


12

Birçok önemli problem karma bir tamsayılı doğrusal program olarak ifade edilebilir . Ne yazık ki bu sorun sınıfına en uygun çözümü hesaplamak NP-Complete'tir. Neyse ki, bazen sadece orta düzeyde hesaplama ile kaliteli çözümler sağlayabilen yaklaşım algoritmaları vardır.

Belirli bir karma tamsayı doğrusal programını, bu yaklaşım algoritmalarından birine ödünç verip vermediğini görmek için nasıl analiz etmeliyim? Böyle bir programın sahip olabileceği ilgili özellikler veya nitelikler nelerdir?

Günümüzde kullanılan ilgili algoritmalar nelerdir ve bu nitelikler bu algoritmalarla nasıl eşleşir?

Deneme için hangi yazılım paketlerine bakmalıyım?

Yanıtlar:


15

Karışık tamsayılı doğrusal programlama (MILP) gerçekten NP-tamamlanmış olmasına rağmen, karışık tamsayılı doğrusal programlamanın çözülebilir (önemsiz) örnekleri vardır.

NP-complete, karma tamsayılı doğrusal programlamanın:

a) Belirsiz bir Turing makinesi (NP kısmı) ile polinom zamanında çözülebilir

b) 3-SAT'a indirgenebilen polinom zamanı (tüm kısım; tartışmanın geri kalanı için bu bölüm gerçekten önemli değil)

O(2n)n

Bu ifade "küçük" örneklerin inatçı olduğu anlamına gelmez. Ne yazık ki, bir MILP örneği için ne anlama geldiğini kesin olarak ifade edemiyorum. 3.000 veya daha fazla ikili karar değişkenine sahip problemleri rutin olarak çözerim. Sorun formülasyonuna bağlı olarak, problemler 0,01 saniyeden daha az (nispeten kısıtlı olmayan problemler için durum budur) veya bir saatten fazla (birçok kısıtlamanın aktif olduğu problemler için durum) olabilir, çünkü problemler görünüyor uygun yapıya sahip olmak. Son teknoloji LP çözücülerinin milyonlarca sürekli karar değişkenine sahip LP'leri çözebileceğini söyleyebilirim ve özel bir yapı olmadan, 1.000 ila 10 civarında bir yerde bir sorun örneğinin,

Çözülebilir bir MILP örneğine sahip olduğunuzu düşünüyorsanız, dal ve bağlı veya dal ve kesme algoritması kullanmak isteyeceksiniz. En iyi uygulamalar CPLEX ve Gurobi'dir . Her ikisi de yeterince kazarsanız ücretsiz akademik lisansa sahip ticari ürünlerdir. Gerçekten açık kaynaklı bir çözücüye ihtiyacınız varsa, COIN-OR topluluğundaki projeler daha uygundur, ancak kaynak paketleri bazen titiz olabilir. En alakalı projeler CBC şube ve kesim çözücü , SYMPHONY çözücü , BCP şube kesme fiyatı çözücü ve ABACUS şube ve kesme çözücü olacaktır . Bu projelerin tümü için COIN-OR'dan birden fazla paket gerekir, modüler yapısı nedeniyle.

Birden çözücüleri denemek seçeneği istiyorsanız, en iyi bahis kullanmaktır Açık Çözücü Arabirimi dan COIN-VEYA . Bu arabirimin bazı bölümlerinin yalnızca temel çözücü seçeneklerini ayarlamanıza izin vereceğini ve çözücüler için gelişmiş seçenekler ayarlamak için, daha fazla ayrıntı için COIN-OR'in posta listelerine başvurmanız gerektiğini unutmayın . Ticari MILP çözücüleri, açık kaynak çözücülerinden çok daha hızlıdır (bazen bir büyüklük veya daha fazla sıra). Prototipleme için bir başka seçenek de GAMS veya AMPL gibi bir cebirsel modelleme dilinin kullanılmasıdır . Her iki yazılım paketi de ticari olmakla birlikte, küçük sorunlu durumlarda kullanılabilecek deneme sürümlerine sahiptir. Daha büyük sorunlu durumlar için GAMS veya AMPL dosyalarınıÇözülecek NEOS sunucusu ; bu sunucu herkese açıktır.

Yeterince büyük bir MILP örneğiniz varsa, bu çözücülerin hiçbiri iyi çalışmaz. Tamsayı değişkenlerini sürekli değişkenlere gevşetebilir, sorunu çözebilir ve ardından sorun örneğinizin uygulanabilir bir çözümü olan en yakın tamsayı değişkenleri koleksiyonuna yuvarlayabilirsiniz. MILP'nizin LP gevşemesinin optimal bir çözümü, MILP'nizin optimal objektif fonksiyon değeri üzerinde bir alt sınır verecektir (elbette minimizasyon olduğunu varsayarak) ve MILP'nizin uygulanabilir bir çözümü, optimum hedefe bir üst sınır verecektir. MILP'nizin işlev değeri.

Gerçekten şanslıysanız ve kısıtlama matrisiniz tamamen değişmezse, MILP'nize tamsayı çözümler üretmek için bir LP çözücü kullanabilirsiniz ve büyük boyutuna rağmen sorununuzu etkili bir şekilde çözebilirsiniz. Diğer sorun sınıfları sırt çantası problemleri ve kesim stok problemleri gibi hızlı yaklaşım algoritmalarına sahiptir . Özel bir yapıya sahip problemler için özel MILP ayrıştırma algoritmaları da mevcuttur, ancak ayrıntılara aşina değilim, çünkü bu konular biraz uzmanlaşmıştır ve tezimin kapsamı dışındadır.

MILP içeren bir sorun sınıfının FPTAS'sı olmasına rağmen, özellikle MILP için tamamen polinom zaman yaklaşım şemasının (FPTAS) farkında değilim ( bu makaleye bakın)). Benim önerim yukarıdaki karma-tam sayı doğrusal programlama çözücülerinden birini bir zaman sınırı ve iyimserlik boşluklarına uygun toleranslarla birlikte kullanmak olacaktır. Bunu yapmak, zaman sınırı içinde MILP'nize mümkün olan en iyi çözümü sağlayacaktır ve çözücü zaman sınırından önce başarılı bir şekilde sona ererse, uygulanabilir çözüm ayarladığınız optimum boşluk toleransları dahilinde en uygun olacaktır. Bu hareket tarzı size çözümün kalitesi konusunda sınırlar verecektir, çünkü uygulanabilir çözümünüz bir üst sınır olacaktır ve çözücü size uygun bir alt sınır verebilir. Bağlantının belirli bir faktör optimal çözümü içinde olması garanti edilmez, ancak daha sonra, yaklaşım daha iyi hale geldikçe herhangi bir FPTAS daha pahalı hale gelecektir.

Bir MILP formülasyonuna yerleşmeden önce yapabileceğiniz en önemli şey, bulabileceğiniz en güçlü formülasyonu seçmektir; Bertsimas ve Tsitsiklis'in Doğrusal Optimizasyona Giriş bölümünde güçlü formülasyonların nasıl seçileceği konusunda öneriler bulabilirsiniz . Ana fikir, kısıtlamaları formülasyonun dışbükey gövdesine olabildiğince yakın olan bir politopu tanımlayan bir formülasyon seçmektir (ayrıca bu ders notlarına bakın ). Güçlü bir formülasyon seçmek, bir sorunu çözmek için gereken sürede büyük bir fark yaratabilir.


Bahsettiğiniz elverişli yapının örnekleri nelerdir? Programım hakkında sormam gereken bazı sorular nelerdir?
MRocklin

Unimodularite, sırt çantası problemleri ve kesim stoku problemlerinin yanı sıra, probleminiz çok aşamalı stokastik bir programsa, bu yapıdan yararlanmak için ayrışma stratejileri vardır. Bükücülerin ayrışması, Dantzig-Wolfe ayrışması ve L-şeklinde ayrışma gibi yöntemleri (genelleştirilmiş) kullanabilirsiniz. Kısıtlamalarınızda blok açısal yapıdan da yararlanabilirsiniz. Dantzig-Wolfe ayrışması, Benders ayrışması ve genelleştirilmiş Benders ayrışması, ödev problemleri için geçmişte bir veya iki kez kullandığım yöntemlerdir.
Geoff Oxberry

Geoff'un bahsetmediği başka hileler ve tuzaklar da var, ancak kesin problemi veya sınıfı görmeden herhangi bir özel tavsiye bulmak zor.
Aron Ahmadia

NEOS sunucusu, ticari sunucuların bile bir sorunla size yardımcı olup olamayacağını anlamanın harika bir yoludur.
Ant6n
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.