SAT yerel araması için veri yapılarını destekleme


20

WalkSAT ve GSAT , Boole memnuniyetini çözmek için iyi bilinen ve basit yerel arama algoritmalarıdır. GSAT algoritması için sözde kod GSAT algoritmasını uygulama sorusundan kopyalanır - Döndürülecek değişmezi nasıl seçilir? ve aşağıda sunulmuştur.

procedure GSAT(A,Max_Tries,Max_Flips)
  A: is a CNF formula
  for i:=1 to Max_Tries do
    S <- instantiation of variables
    for j:=1 to Max_Iter do
      if A satisfiable by S then
        return S
      endif
      V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
      S <- S with V flipped;
    endfor
  endfor
  return the best instantiation found
end GSAT

Burada memnun cümle sayısını en üst düzeye çıkaran değişkeni çeviriyoruz. Bu nasıl verimli bir şekilde yapılır? Naif yöntem, her değişkeni çevirmek ve her adım için tüm cümleleri çevirmek ve kaç tanesinin tatmin olduğunu hesaplamaktır. Bir cümle sabit zamanda tatmin edilebilirlik için sorgulanabilse bile, saf yöntem hala zamanında çalışacaktır , burada değişken sayısı ve cümle sayısıdır. Eminim daha iyisini yapabiliriz, dolayısıyla soru:Ö(VC)VC

Birçok yerel arama algoritması, değişkenin atamasını tatmin edici cümleciklerin sayısını en üst düzeye çıkarır. Uygulamada, bu işlem hangi veri yapılarıyla verimli bir şekilde desteklenmektedir?

Bu ders kitaplarının sık sık atladığını hissettiğim bir şey. Bir örnek ünlü Russell & Norvig kitabı bile .


Eh, bu adamlar donanım inşa. Görünüşe göre olasılık ve sezgisel yaklaşımlar daha popüler; gerçekten de "en iyi" (her şeyden önce sadece açgözlü) değişkeni hızlı bir şekilde seçemeyeceğinizi veya bu seçimin genel olarak iyi olmadığını düşündürür.
Raphael

@ Raphael Belki çok hızlı bir şekilde seçim yapamayacağınız konusunda haklısınız, ama “seçim genel olarak iyi değil” demeye cesaret edemem. Belki senin fikrini yanlış anladım, ama eminim ki "doğru" değişkeni seçmenin büyük bir etkisi vardır. Teşekkürler, biraz daha derine ineceğim. Bağladığınız slaytların (Hoos) yazarlarından birinin konuyla ilgili bir kitabı olduğunu düşünüyorum.
Juho

"Doğru" olan en uygun olanıdır, ancak şimdi en üst düzeye çıkanın doğru olan olduğuna inanmak için bir neden var mı? Sonuçta, sorun değil açgözlü (kanoniği) tarafından çözülebilir.
Raphael

Yanıtlar:


9

Gerekli veri yapısı bir gerçekleşme listesidir , değişkenin bulunduğu cümleleri içeren her değişken için bir liste. Bu listeler CNF ilk okunduğunda bir kez oluşturulur. Bunlar, tatmin edici maddeleri saymak için CNF formülünün tamamını taramaktan kaçınmak için aşağıdaki 3. ve 5. adımlarda kullanılır.

Her değişkeni ters çevirmekten daha iyi bir algoritma:

  1. Yalnızca tatmin edici olmayan cümlelerde ortaya çıkan değişkenlerin bir listesini yapın.
  2. x
  3. x
  4. x
  5. x
  6. x
  7. x
  8. Adım 1'de bulunan değişkenlerin geri kalanı için 2-7. Adımları tekrarlayın.
  9. 7. adımda kaydedilen en yüksek numaralı değişkeni ters çevirin.

Veri yapısı için bir referans (çoğu zaman bitişiklik listesi olarak da bilinir), örneğin Lynce ve Marques-Silva, SAT çözümleyicileri Geri İzleme için Verimli Veri Yapıları, 2004'tü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.