İç nokta yöntemlerini kullanarak doğrusal programlamaya tam köşe çözümleri bulma


11

Simpleks algoritması, doğrusal programlama problemine en uygun çözümü bulmak için, bir polytopun köşelerinde hırsla yürür. Sonuç olarak, cevap her zaman politopun bir köşesidir. İç nokta yöntemleri politopun içinde yürür. Sonuç olarak, tüm bir politop düzlemi optimal olduğunda (objektif işlev düzleme tam olarak paralelse), bu düzlemin ortasında bir çözüm elde edebiliriz.

Bunun yerine politopun bir köşesini bulmak istediğimizi varsayalım. Örneğin, doğrusal programlamaya indirgeyerek maksimum eşleme yapmak istiyorsak, "eşleşme XY kenarının% 0.34'ünü ve AB ve% 0.89'unun% 0.89'unu içeren bir cevap almak istemiyoruz. 0'lar ve 1'ler ile bir cevap almak istiyoruz (tüm köşeler 0 ve 1'lerden oluştuğu için simpleks bize verecektir). Bunu polinom zamanında tam köşe çözümleri bulmayı garanti eden bir iç nokta yöntemi ile yapmanın bir yolu var mı? (örneğin, nesnel işlevi köşeleri destekleyecek şekilde değiştirebiliriz)


1
@JD: Bunu neden cevap vermiyorsun?
Raphael

Yanıtlar:


6

Makaleyi okumak isteyebilirsiniz:

Sanjay Mehrotra, İç nokta yöntemlerini kullanarak bir tepe noktası çözümü bulma üzerine, Lineer Cebir ve Uygulamaları, Cilt 152, 1 Temmuz 1991, Sayfa 233-253, ISSN 0024-3795, 10.1016 / 0024-3795 (91) 90277-4. Bilimsel makale bağlantısı


4

Genel olarak soru mantıklı olsa da, örnek olarak maksimum eşleştirmeyi seçmeniz tuhaftır, çünkü birçok algoritma vardır (maksimum kardinalite iki taraflı eşleştirme için maksimum akışlar, çift partik olmayan eşleştirme için Edmonds algoritması ve maksimum ağırlıktaki iki parçalı eşleştirme için Macar algoritması) hepsi soruna tamsayı köşe çözümleri verecektir.


Pratik olmaktan çok teorik bir ilgiydi. Yine de, çoğu zaman iç nokta yöntemleri simpleksten daha hızlıdır, bu yüzden bunun pratik bir sorun olduğu problemler olabilir;)
Jules

3

Detay eksikliği nedeniyle, bu sadece daha uzun bir yorumdur:

Karmarkar'ın polinom zaman algoritması sadece kenara yakın hareket eder. Sonunda, bir saflaştırma şeması using kullanılarak optimal olan uygun bir temel çözelti (örneğin köşe) bulur . Bir düzlemden köşeye gitmek için bunu veya benzer bir tekniği kullanabilirsiniz.


İt Karmarkar'ın orijinal belgesinde bulamıyorum . Referansım Hamacher ve Klamroth'un yan yana Almanca ve İngilizce metinleri olan "Lineare Optimierung und Netzwerkoptimierung" (İngilizce: Doğrusal ve ağ optimizasyonu).


1

Evet, basit bir yöntem var ve iç nokta yöntemlerinin hızını simpleks yöntemlerin doğruluğu ile birleştirmek için C ++ 'da uyguladım (temel matrisin tersinin yinelemeli iyileştirilmesini kullanarak 10 ^ 15'te 1 parçanın doğruluklarını elde edebilirim ve 1000'den fazla değişken ve kısıtlamaya sahip yoğun kısıtlama matrislerinde daha iyi).

Anahtar, kullandığınız simpleks yöntemindedir. Simpleks yönteminin bir temeli yeniden düzenleme için bir mekanizmaya sahip olduğunu (örneğin, kümülatif yuvarlama hatalarının gerekli kıldığından sonra) ve bu yeniden düzenleme yönteminin, istenen tüm temel değişken listesini içeren bir temel için basit bir temel ters matrisi yeniden oluşturduğunu varsayın. Ayrıca, istenen temel tam olarak yeniden oluşturulamasa bile, simpleks algoritmasının hedef tabanın% 95'ini içeren bir temelden devam edebildiğini varsayalım, cevap çok basittir.

Tek yapmanız gereken çözümü iç nokta yönteminizden almak, birincil çözüm değerlerinin tamamlayıcı gevşeklikle sıfır olduğu ima edilen değişkeni ortadan kaldırmak ve b simpleks probleminde temel bir boyut verilen iç mekandaki b değişkenlerini almak en büyük değerlere sahip nokta çözüm (veya b'den küçükse sıfır olmayan değerler olduğu kadar çok) ve bu b değişkenlerini içerecek şekilde simpleks temeli yeniden düzenleyin. Sonra çözülünceye kadar simpleks yöntemine devam edin. Tek taraflı problemi finisaja yaklaştırdığınız için bu genellikle çok hızlıdır.

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.