Neden SAT ve diğer karar problemleri için yaklaşım algoritmaları yok?


18

NP-eksiksiz bir karar sorunum var. Sorunun bir örneği göz önüne alındığında, sorun uygulanabilirse EVET ve başka bir şekilde HAYIR çıkaran bir algoritma tasarlamak istiyorum. (Elbette, algoritma optimal değilse, hatalar yapacaktır.)

Bu tür problemler için yaklaşık bir algoritma bulamıyorum. SAT için özel olarak bakıyordu ve ben yaklaşık Vikipedi sayfasında bulunan Yaklaşım Algoritma aşağıdaki: yaklaşımın diğer bir sınırlama genellikle mümkündür rağmen, sadece optimizasyon problemlerine değil Gerçeklenebilirlik gibi "saf" karar problemlerine uygular olmasıdır .. .

Örneğin, yaklaşık oranı algoritmanın yaptığı hata sayısıyla orantılı bir şey olarak tanımlamıyoruz? Karar sorunlarını gerçekten açgözlü ve optimal olmayan bir şekilde nasıl çözebiliriz?


5
MAX-SAT için yaklaşık algoritmalar vardır.
Yuval Filmus

2
MAX-SAT bir karar sorunu değil, değil mi?
Ribz

15
Yaklaşım algoritmaları her zaman optimizasyon problemleri içindir.
Yuval Filmus

4
Temel olarak hızlı bir şekilde biten ancak zaman zaman yanlış cevap vermesine izin verilen bir algoritmaya sahip olmak istiyorsunuz. Burada "yaklaşım algoritması" ve "optimal" gibi iyi tanımlanmış terimleri kullanarak sorunları büyük ölçüde karıştırdığınızı düşünüyorum. Bunların çok belirgin anlamları var. Bunun yerine sezgisel bir arama arıyorsunuz - sorunuzu bu terimle güncellerseniz (veya daha fazla karışıklıktan kaçınmak için sıfırdan yeni bir soru ile başlarsanız), daha iyi sonuçlara sahip olabilirsiniz.
AnoE

Bu tam bir cevap olmasa da, bunun nedenini açıklıyor: sadece düşük biti yanlış olan bitlerin yanlış olmasının yarısı kadar iyi olmayan önemli SAT problemleri var.
Joshua

Yanıtlar:


33

Yaklaşım algoritmaları, karar problemleri için değil, sadece optimizasyon problemleri içindir.

Neden yaklaşım oranını, bazı karar problemlerini çözmeye çalışırken bir algoritmanın yaptığı hataların oranı olarak tanımlamıyoruz? Çünkü "yaklaşıklık oranı" iyi tanımlanmış, standart anlamı olan, başka bir şey anlamına gelen bir terimdir ve aynı terimi iki farklı şey için kullanmak kafa karıştırıcı olacaktır.

Tamam, bazı karar problemleri için bir algoritmanın yaptığı hataların sayısını ölçen başka bir oran tanımlayabilir miyiz (buna başka bir şey diyelim - ör. "Det-rate")? Bunu nasıl yapacağınız belli değil. Bu kesirin paydası ne olurdu? Ya da başka bir deyişle, sonsuz sayıda problem örneği olacak ve bazıları için algoritma doğru cevabı verirken, diğerleri yanlış cevabı verecektir, bu yüzden "sonsuzluğa bölünen bir şey" ve bunun anlamı anlamsız veya tanımlanmamıştır.

Alternatif olarak, tanımlayabilir boyutu problemi örneklerine, hatalar algoritması hatalar fraksiyonu olarak n . Sonra, r n'nin sınırını hesaplayabilirizrnnrn böyle bir sınır varsa, olarak . Bu olurniyi tanımlanmış olmalıdır (sınır varsa). Bununla birlikte, çoğu durumda, bu çok yararlı olmayabilir. Özellikle, dolaylı olarak sorunlu örnekler üzerinde tekdüze bir dağılım varsaymaktadır. Bununla birlikte, gerçek dünyada, sorunlu örnekler üzerindeki gerçek dağılım üniform olmayabilir - genellikle üniform olmaktan çok uzaktır. Sonuç olarak, bu şekilde elde ettiğiniz sayı genellikle umduğunuz kadar yararlı değildir: algoritmanın ne kadar iyi olduğuna dair yanıltıcı bir izlenim verir.

İnsanların zorlukla (NP-sertlik) nasıl başa çıktığı hakkında daha fazla bilgi edinmek için, : NP-tamamlama problemlerine bakınız .


3
+1. Ancak son nokta sağlam değil, yaklaşık olarak n'nin uzunluk n girişinde n uzunluğunun girişinde yaptığı hata sayısının sonsuzluğuna gitmesi olarak, yaklaşıklık oranını limit olarak tanımlayabileceğiniz iddia edilebilir. Bu elbette yararlı değildir, çünkü genellikle "EVET" (veya "HAYIR") çıktısı veren basit bir program iyi bir oran (bazen 1!) Elde eder.
aelguindy

1
@det, bu ayrı bir soru, ayrıca sormanız gereken (standart ders kitaplarında veya çevrimiçi kaynaklarda okuduktan sonra). Her gönderi için yalnızca bir soru sormanızı tercih ediyoruz.
DW

1
@aelguindy, iyi bir nokta. Cevabımı buna göre güncelledim.
DW

2
@det Neden açgözlü? Bir karar sorununu "neredeyse" çözmek ne anlama gelir?
Raphael

2
@Mehrdad: Bir yaklaşım algoritmasını genellikle en kötü durum hatasıyla değerlendirirsiniz: ne kadar optimal olmadığı konusunda bir üst sınır. Örneğin, belirli bir yaklaşım algoritmasının her zaman en iyi sonucun en az beşte biri olan bir sonuç bulduğunu söyleyebilirsiniz. Bunu bir karar sorununa çevirmenin gerçek bir yolu yoktur; algoritmanız bazen 0,1 yayıyorsa (diyelim), ya bazen 0,9 kapalıdır (bu durumda en kötü durumda, her zaman 0,5 yaymak için daha iyisini yaparsınız) ya da "yaklaşık" -lık bir sahte ve "0,1 "aslında sadece" 0 "anlamına gelir.
ruakh

14

Karar verme problemlerinde yaklaşım oranları gibi şeyleri görmemenizin nedeni, genellikle karar verme problemleri hakkında sorduğu sorular bağlamında genellikle anlamlı olmamalarıdır. Bir optimizasyon ayarında mantıklıdır çünkü "yakın" olmak yararlıdır. Birçok ortamda mantıklı değil. Ayrık bir logaritma probleminde ne kadar sık ​​"yakın" olduğunuzu görmek mantıklı değildir. Bir grafik izomeri bulmaya ne kadar yakın olduğunuzu görmek mantıklı değil. Aynı şekilde, çoğu karar verme probleminde, doğru karara "yakın" olmak mantıklı değildir.

Şimdi, pratik uygulamalarda, sorunların hangi kısmının "hızlı" ve hangi kısmın belirlenemeyeceğini bilmenin yararlı olduğu birçok durum vardır. Bununla birlikte, optimizasyondan farklı olarak, bunu ölçmenin tek bir boyutu yoktur. Önerdiğiniz gibi istatistiksel olarak yapabilirsiniz, ancak yalnızca girdilerinizin istatistiksel dağılımını biliyorsanız. Çoğu zaman, karar sorunlarıyla ilgilenen insanlar bu tür dağılımlara sahip oldukları için çok şanslı değildir.

Bir vaka çalışması olarak, durma problemini düşünün. Durdurma probleminin kararsız olduğu bilinmektedir. Bu bir utanç, çünkü bir derleyici yapıyorsanız çözmeniz gerçekten yararlı bir problem. Bununla birlikte, uygulamada, çoğu programın durma problemi perspektifinden analiz edilmesi aslında çok kolaydır. Derleyiciler, bu durumlarda en uygun kodu üretmek için bundan yararlanır. Belirli bir kod bloğu olduğunu Ancak, derleyici bir olasılık olduğunu fark etmelidir değil Karar verilebilen. Kodun "büyük olasılıkla karar verilebilir" olmasına dayanan herhangi bir program sorun yaşayabilir.

Bununla birlikte, derleyiciler tarafından durdurma probleminin bu özel durumlarını çözmede ne kadar iyi olduklarını belirlemek için kullanılan metrik, belirli bir çift primerin saldırılara karşı kabul edilebilir bir şekilde sertleştirilip sertleştirilmediğini test etmek için bir şifreleme programı tarafından kullanılan bir metrikten çok farklıdır. Tüm çözümlere uyan tek bir boyut yoktur. Böyle bir metrik istiyorsanız, bunu belirli sorun alanınıza ve iş mantığınıza uyacak şekilde uyarlamak istersiniz.


Anladığım kadarıyla, bir karar sorununu çözmenin tek yolu, çok verimsiz olabilecek en uygun algoritmayı tasarlamaktır? Çünkü bir karar problemim var (NP-complete) ve bir çözüm bulmak için açgözlü (hızlı) bir algoritma bulmam istendi. Bunu Nasıl Çözebilirim? Bu tür sorunlara odaklanan herhangi bir kağıt biliyor musunuz?
Ribz

1
@det Geri itin ve sorunun yeniden çözülmesini sağlayın. NP-tam bir sorununuz varsa, oldukça sıkışmışsınızdır, ancak aslında bir tane çözmeniz gerekmez. Örneğin, her zaman mükemmel cevaba ihtiyacınız yoktur. Belki yakın olmak yeterince iyidir. Ya da belki kolay olan bir alt grup için sorunu çözebilir ve zor olanlara punt yapabilirsiniz. Örnek olarak, paketleme algoritmaları genellikle NP-tamamlayıcıdır, ancak olasılıksal yaklaşımlar kullanılarak optimal olarak% 5'in içine güvenilir bir şekilde ulaşan algoritmalar yaygındır.
Cort Ammon - Monica'yı eski haline

2
Dürüst olmak gerekirse, NP-tam bir programı çözmek için açgözlü bir algoritma bulması, kelimenin tam anlamıyla tüm bilgisayar bilimi / matematik topluluğunu tek başına almakla görevlendirilmekle aynıdır. En P sürede NP-tam program için bir algoritma, bulursanız çok azından P = NP çözümü için 1 milyon $ Kil ödülü kazanmak istiyorum. Gerçekte, keşfinizin etkileri bilişim teknolojisini bildiğimiz gibi yeniden şekillendirir ve tüm güvenlik / şifreleme endüstrisini bir gecede tamamen yıkar. Görevin ifadelerinin NP-tamamlanmış olmayacak şekilde ayarlanması daha iyidir.
Cort Ammon - Monica'yı eski haline

NP-tam bir problem için açgözlü bir tam algoritma kullandım. Sadece küçük bir kasayı çözmem gerekiyordu ve bir hafta sonu için 64 işlemcili bir sunucu alabilirim.
Patricia Shanahan

8

Mevcut cevaplara ek olarak, bir karar problemi için yaklaşık bir çözüme sahip olmanın mantıklı olduğu, ancak düşündüğünüzden farklı çalıştığı durumlar olduğunu belirtmeme izin verin.

Bu algoritmalarla, iki sonuçtan sadece biri kesin olarak belirlenirken diğeri yanlış olabilir. Örneğin asal sayılar için Miller-Rabin testine katılın : Eğer test bir sayının asal olmadığını belirlerse , sonuç kesindir. Ancak diğer durumda bu sadece sayının muhtemelen asal olduğu anlamına gelir . Ne kadar hesaplama zamanı yatırdığınıza bağlı olarak, sonuca olan güveninizi artırabilirsiniz, ancak asal olmayan durum için olduğu gibi% 100 olmayacaktır.

Bu özellikle kararsız problemlerle başa çıkarken güçlüdür: Belirli bir kod parçası için durma problemini çözmeye çalışan bir araç yazabilirsiniz. Programın sonsuz döngü yapmayacağına dair bir kanıt bulabilirse, bunu% 100 kesin olarak talep edebilirsiniz. Böyle bir kanıt bulamazsanız, program kontrol akışının aracınızın analiz etmesi için çok kıvrık olması olabilir, ancak sonsuza kadar döngü yapacağının bir kanıtı değildir. Kontrol yapılarını basitleştirerek, aracın kesin olarak duracağını kanıtlayacak kadar basit bir eşdeğer program oluşturabilirsiniz.


Olasılıksal (cevabınız) ve yaklaşım (soru) algoritmaları arasında büyük bir fark vardır. Özellikle, her ikisinin kombinasyonu çok özel bir cins.
Raphael

Ayrıca, bu bağlamda terimin makul bir yorumunu varsayarak, durma problemi için olasılık algoritmalarının mevcut olmadığını biliyoruz .
Raphael

@ Raphael Cevabımı olasılıksal algoritmalara özgü olmaya niyet etmedim. Verilmiş, Miller-Rabin için durum bu, ama kendinizden bahsettiğiniz gibi, bu artık durma problemi örneği için geçerli değil ve sanırım bu davranışı bulduğunuz vakaların çoğu için de doğru olmayacak. Karşılaşmak istediğim nokta, basitçe sadece bir sonuç üzerinde kesinlik kazanacaksınız, diğerinde değil.
ComicSansMS

Bazı sorunların sadece yarı hesaplanabilir olduğunu söylemiyorsanız, soruyu cevapladığınızı sanmıyorum.
Raphael

@ Raphael Cevabım ayrıca yarı hesaplanabilir sorunlara özgü değil. Aslında tarif ettiğim yaklaşımın yarı hesaplanabilir problemler için bile geçerli olduğunu düşünmüyorum. Orada şimdi fonksiyonun tanımlanmamış dalına inip inmediğinizden emin olacaksınız, böylece sonuç olmadığını kesin olarak iddia edebilirsiniz. Açıkladığım şeye dayanıyor: Bir cevap olabilir, ancak algoritma bunun üzerinde yanılmak için yeterince sert görünmemiş olabilir.
ComicSansMS
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.