Bir optimizasyon algoritmasının optimumluğunu değerlendirmek için genel bir yöntem var mı?


9

bir optimizasyon algoritmasının en uygunluğunu değerlendirmek için genel bir yöntem var mı?

Şimdiye kadar bulduğum tek yöntem, algoritmanın sonuçlarını zaten bilinen en uygun çözümlerle karşılaştırmak.

Değilse, bazı özel problemler için belirli yöntemler var mı?

DÜZENLEME Açıklığa kavuşturmak için: Optimality ile, sonucun optimum çözüm sonucuna ne kadar yakın olduğunu kastediyorum.


Belki de bir soru cstheory.stackexchange.com ?
Luciano

Bir optimizasyon algoritmasının 'en uygunluğunu' nasıl tanımlıyorsunuz? Kaynak kodu üzerinde analiz yapmak ve daha sonra yaklaşım faktörünün ne olduğunu rapor etmek ister misiniz?
Alex ten Brink

"Bir algoritmanın çeşitli kaynak türlerinin ne kadarını tükettiğine ilişkin özelliklerini tanımlamak için" kullanılan bir algoritmanın "verimliliği" demek isteyebilirsiniz. Algoritmalar da kesin ve sezgisel olarak ayrılır. Kesin algoritmalar, optimum çözümü bulmayı garanti eder, ancak sezgisel tarama küresel maksimuma yakın bir çözümü daha makul bir sürede bulabilirken, yüzyıllarca işlemci süresi (gerçekçi boyutta NP-zor problemler için) alabilir. (giriş boyutuna bağlı olarak dakika veya saat.
Florents Tselai

Yanıtlar:


3

Bu sorunun türüne bağlıdır.

Problem için bir polinom zamanı yaklaşım şeması (PTAS) varsa (örn. Öklid TSP), o zaman polinom zamanında keyfi olarak optimal çözüme yakın bir çözüm elde edebilirsiniz. Bu, her e > 0 için, probleminize yaklaşık bir çözüm bulan , optimal çözümün (1+ e ) içinde olduğu garanti edilen bir polinom zaman algoritması olduğu anlamına gelir . Bu durumda, aynı e değerleri için iki algoritma için çalışma zamanı / bellek karmaşıklığını karşılaştırmanız yeterlidir . Bir algoritma diğerinden daha "optimallik garantilerini" yapabilir, ancak daha düşük çalışma süresi / bellek maliyetiyle, muhtemelen daha iyi bir algoritmadır.

Sorun APX ise, ancak PTAS değilse , yani optimal çözümün sabit bir faktörü dahilinde çözümler üretme garantisi verilen polinom zaman yaklaştırma algoritmaları varsa, o sabit faktörü karşılaştırabilirsiniz. Daha düşük faktörlü olan daha iyi çözümler üretecektir (ancak genellikle daha yüksek çalışma süresi / bellek maliyetleri pahasına)

Sorun bu sınıfların hiçbirinde değilse, yapabileceğiniz en iyi çözümlerin bir dizi rastgele sorun için veya bilinen en iyi çözümlerle ilgili sorunlar için karşılaştırmak olduğunu düşünüyorum.


1

Genel olduğunu sanmıyorum yolu , ama kesinlikle bunu yapmanın yöntemleri var.

Örneğin, SET-COVER sorununu ele alalım. Sorunu bilmeyenler için aşağıdaki gibidir:

Sendikası olan B={1,2,...,m}bir dizi eleman ve alt küme verildi . Bu alt kümelerin minimum sayısını bulmaya çalışıyorsunuz, böylece birlik hala duruyor . Bu sorunun gerçek dünyadaki tipik bir örneği, size bir mahalle koleksiyonu verildiği ve her mahalleye en yakın okuldan biraz daha az mesafede hizmet verilecek şekilde okulları yerleştirmek için en uygun yerleri bulmaya çalıştığınız yerdir . Bu durumda, mahalle kümesidir ve şehir içindeki tüm kümelerden oluşur .S_1, S_2, ..., S_nBBdBS_xdx

Bu sorunun NP-COMPLETE olduğunu kanıtlıyorsunuz. Bununla birlikte, seti S_ien çok sayıda ortaya çıkarılan elemanla tekrar tekrar seçeceğiniz basit bir açgözlü çözüm var . Ve bu algoritmanın başarılı olduğunu kanıtlayabilirsiniz .

Optimal algoritma kkümelerden oluşuyorsa , açgözlü algoritma k ln(n)ln'nin doğal logaritma olduğu kümelerden fazlasını içermeyecektir.


1

Bir programın 'optimality performansının' herhangi bir tanımı için 'optimality performans' A veya 'optimality performans' B olup olmadığını belirleme sorunu genel olarak kararlaştırılamaz (aşağıdaki kanıt). Bu, bir algoritmanın her zaman ne kadar optimal olduğunu söyleyebilecek tek bir yöntem olmadığı anlamına gelir.

Bununla birlikte, yaklaşım algoritmalarını analiz ederken sıklıkla uygulanan yöntemler vardır. Çoğu zaman, yaklaşık algoritmalar, çözümünün optimum çözümden ne kadar uzakta olduğuna dair garantileri ile değerlendirilir. Oranları ispatlamak için yaygın olarak kullanılan bir yöntem olan 'alt sınır' yöntemini kullanarak kanıtlayacağım örnek bir problem ve yaklaşım vereceğim.

Söz konusu sorun 'Kamyon Yükleme' problemidir: her biri en fazla T ağırlığında bir yük taşıyabilen birçok özdeş kamyonumuz var (istediğimiz kadar). Bu kamyonlara yüklemek istediğimiz n nesnemiz var. Ulaşım. Her nesne i'nin ağırlığı w_i, burada w_i <= T'dir (bu nedenle tek başına bir kamyona sığamayan hiçbir öğe yoktur). Öğeler parçalara bölünemez. Mümkün olduğunca az kamyona ihtiyacımız olması için kamyonları doldurmak istiyoruz. Bu sorun NP-tamdır.

Bu sorun için çok kolay bir yaklaşım algoritması vardır. Kamyon bir sonraki öğe sığmayacak kadar dolu olana kadar, bir kamyonu öğelerle yüklemeye başlarız. Daha sonra başka bir kamyon alıp bu kamyona önceki kamyona uymayan bu ürünle yüklüyoruz. Bu kamyona daha fazla ürün yüklemiyoruz: bunun yerine, yeni bir kamyon alıyoruz, artık yerine oturana kadar tekrar birçok eşya ile dolduruyoruz, son öğeyi kendi kamyonuna tekrar koyduk.

Bu algoritma, sorun için 2 yaklaşım olarak adlandırılır: en uygun çözümün ihtiyaç duyduğundan iki kat daha fazla kamyon kullanır. 'En fazla' çok önemlidir: şanslı olabilir ve en uygun çözümü bulabiliriz, ama en azından çok kötü yapmayacağız.

Bunu kanıtlamak için, öncelikle ihtiyacımız olan en uygun kamyon sayısına bir alt sınır tanımlarız. Bunun için, parçaları parçalara ayırmamıza izin verildiğini hayal edin: daha sonra her kamyonu ancak sonuncuyu tamamen doldurabiliriz. Eğer yapsaydık, ihtiyacımız olan kamyon sayısı, asıl soru için ihtiyacımız olan kamyon sayısı için daha düşük bir sınırdır: 'en iyi' durumda en uygun çözüm her kamyonu tamamen doldurur, bu durumda kamyon sayısı eşittir, ancak eğer optimum çözümler kamyonları doldurmazsa, sadece daha fazla kamyona ihtiyaç duyabilir.

Şimdi yaklaşım algoritmamıza bakıyoruz. Her adımda, iki kamyonu (kısmen) doldurduğumuza dikkat edin. Ayrıca, algoritmanın nasıl çalıştığı ile, ilk kamyondaki ve ikinci kamyondaki ürünün birlikte ilk kamyona sığmayacağını unutmayın, bu nedenle toplamları en az T'dir. Bu, her adımda en az bir tam yük kamyon değerinde iki kamyon. Şimdi alt sınır için bu karşılaştırma: bu durumda, biz öğelerin tam kamyon değerinde yük bir kamyon. Başka bir deyişle, yaklaşım algoritmamız (doğrusal zamanda) alt sınır 'çözümümüze çok benzeyen ancak bir yerine iki kamyon kullanan bir çözümü hesaplar. Bu nedenle, optimal algoritmanın en fazla iki katı kamyon kullanıyoruz, çünkü optimal algoritmanın alt sınırının en fazla iki katı kamyon kullanıyoruz.


Bu algoritma sabit faktörlü bir yaklaşım sağlar: optimal çözümden en fazla 2 kat daha kötüdür. Diğer önlemlere bazı örnekler: en iyi C en uygun çözümden daha fazla (ilave hata, oldukça nadir), en çok c oturum açma zamanı en uygun çözüm kadar kötü, en fazla cn zaman en uygun çözüm kadar kötü, en fazla c 2 ^ (dn) kez en iyi çözüm kadar kötü (çok kötü; örneğin, genel TSP sadece bu tür garantili algoritmaları kabul eder).

Tabii ki, kanıtladığınız faktörün kanıtlayabileceğiniz en iyi faktör olduğundan emin olmak istiyorsanız, algoritmanızın verdiği çözümün gerçekten olabildiğince kötü olduğu örnekleri bulmaya çalışmalısınız.

Ayrıca NP-zor olmayan problemlerde bazen yaklaşım algoritmaları kullandığımızı da unutmayın.

Bunu üniversitemdeki yaklaşım algoritmaları dersinde öğrendim.


Kararsızlık kanıtı: P'nin bir sorun olmasına ve A ve B'nin, A ve B'nin 'duyarlılığın' mantıklı bir tanımı için aynı 'optimallik'e sahip olmadığı ve A ve B'nin çalışma süresinin hem omega olduğu P için yaklaşım algoritmaları olmasına izin verin (1) (sabit zamandan kesinlikle daha yavaş, yani daha büyük durumlar için daha yavaş olurlar) ve A ve B'nin her zaman durduğu yerler.

D, aşağıdakileri hesaplayabileceğini iddia eden bir program olsun: P için yaklaşık bir hesaplama hesaplayan bazı program C verildiğinde, yeterince büyük girdiler için A kadar iyi veya B kadar iyi olup olmadığına karar verin (bu nedenle programları kategorilere ayırmak için bunu kullanabilirsiniz iyimserliklerine göre).

Ardından durma problemini çözmek için D'yi kullanabiliriz. E bir program olsun ve F bu program için bir girdi olsun. D'yi E'nin F girişinde durup durmayacağına karar vermek için kullanacağız.

Aşağıdakileri yapan bir program G tasarlıyoruz: P problemi için S girişi verildiğinde, F'de E ve S'de paralel olarak çalışır: E'yi bir süre çalıştırır, sonra A, sonra E ve benzerlerini yürütür. E, F'de durursa, A çalışmasını durdurur ve bunun yerine S'yi B'de çalıştırır ve B'nin sonucunu döndürür. A, E durmadan önce durursa, A sonucunu döndürür.

D'de G kullanılması artık E'nin F üzerinde durup durmadığına karar verir: E F üzerinde durursa, yeterince büyük S girişleri için E, A üzerinde S durmadan önce F durur (çünkü E'nin durması için geçen süre, A'nın aksine giriş). Bu nedenle D, G'nin B'nin optimallik özelliklerine sahip olduğunu bildirir. E, F üzerinde durmazsa, D, G'nin A'nın optimallik özelliklerine sahip olduğunu bildirecektir.

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.