Çok Çekirdekli SAT Çözücü


12

25k cümle 5k değişken SAT sorunu çözmeye çalışıyorum. Bir saattir koşuyor (precosat) ve daha sonra daha büyük olanları çözmek istiyorum, çok çekirdekli bir SAT Çözücü arıyorum.

Birçok SAT Çözücü olduğu için oldukça kayboldum.

Biri bana davam için en iyisini gösterebilir mi?

Birisi bana yaklaşık zamanı verebilirse de mutlu olurum (mümkünse).


1
Hazır programlar mı arıyorsunuz? O zaman bu sormak için en iyi site değil. SAT-çözme hakkında bilgi edinmek ister misiniz? Hoşgeldiniz! Arama yaptığınızı söylüyorsunuz; Ne buldun? Sizi ne karıştırıyor?
Raphael

Birkaç StackExchange forumunda SAT ile ilgili iş parçacığı sayısına baktım. Teorik CS ve CS arasında çok fazla seçim yaptım (ve daha sonra seçtim). Nerede hazır isim programı istemeliydim? Teşekkürler.
multsatsolv

Yanıtlar:


8

Bu yıl SAT 2013 yarışmasının sonuçlarına bir göz atın . Bu sonuçlara dayanarak, kesinlikle Lingeling'i deneyin. Plingeling bunun paralel varyantıdır.

Tatminkârlığı kanıtlamanıza gerek yoksa (belki de örneğin tatmin edilebilir olduğunu biliyorsunuz ve bunu SAT yapan bir atamayı bilmeniz gerekiyorsa), yerel arama yöntemlerini de deneyebilirsiniz.


Teşekkürler. (P) Lingeling'e bir göz atacağım. Ayrıca, tatmin edici olup olmadığı hakkında hiçbir fikrim yok (daha iyi olmasına rağmen, aksi takdirde sıkıştım).
multsatsolv

+1. Deneyimlerimize dayanarak, plingeling kesinlikle ilk önce denemeniz gereken şeydir (en azından birden fazla çekirdeğe ve bol miktarda belleğe sahip tek bir bilgisayarınız varsa). Daha da fazla performans için, mümkün olduğunca çok düğüme sahip bir bilgi işlem kümesi bulmaya çalışın ve farklı rasgele tohumlarla birden çok lingeling (veya plingeling) örneği çalıştırın.
Jukka Suomela

4

Pratik çok çekirdekli sat-çözücülerin varlığından emin değilim, ancak birkaç proje ve makale var:

Bu ilginç noktayı da buldum: çok çekirdekli bir etki elde etmek için aynı problem üzerinde farklı tohumlarla düzenli bir sat-çözücü birden çok kez çalıştırabilirsiniz.

Edit: vzn'ın fikri hakkındaki yorumlarımı buraya ekleyerek:

Benzer bir alternatif yöntem, tek bir değişken seçmek, değerini true olarak ayarlamak, bunu bir çözücü örneğine göndermektir. Değerini false olarak ayarlayın ve bunu başka bir çözücü örneğine gönderin. Bunu değişkenleri için yapabilir ve aynı anda işlemi çalıştırabilirsiniz . Ayarlanacak değişkenlerin seçilmesi biraz zor olabilir, yani. eğer doğrudan birbirlerine bağımlılarsa, o zaman birini ve sonra diğerini seçmek anlamsızdır. Birbirini izleyen / yinelenen seçimler yapmak için bir basitleştirme adımı gerekebilir.2 kk2k


(Birisi bana bir X cümlesi Y değişkenleri SAT problemini çözmek için yaklaşık zamanı (mümkünse) verebilirse de mutlu olurum.)

Kimse değişkenlerine, cümlesine göre size yaklaşık bir zaman veremez , çünkü bazı SAT problemlerini çözmek oldukça zordur (okuma: olmayacak), nispeten küçük bir ile bile ; diğer büyük örnekler nispeten hızlı bir şekilde çözülebilir (ve bu örnekler için oturmuş çözücüler yararlıdır).n m , nmnm,n


Bağlantılar için teşekkürler. Bazılarını okuyacağım. Umarım sorunumu çözmek çok zor değildir.
multsatsolv

@multsatsolv soruna bağlıdır. Ayrıca kodlamaya da bağlıdır. SAT çözücüler aynı sorunun farklı kodlamalarını farklı şekilde işleyebilir. Ve farklı SAT çözücüler bir kodlamada diğerinden daha iyi olabilir; bunun için bir bilim yoktur (iyi vardır, ancak SAT çözücülerin hızlı tempolu evriminde anlamaya çalışmanın ötesinde): yapılacak tek şey farklı kodlama ve çözücü kombinasyonlarını denemektir.
Realz Slaw

3

SAT'ın aşağıdaki anlamda utanç verici bir şekilde paralel olması nedeniyle, herhangi bir SAT çözümleyicisini paralel bir sürüme dönüştürmenin aslında çok basit bir yolu vardır .

Bölümlemek için iki güç seçin, . Sonra değişkenini seçin ve tüm olası boole değerlerini atayın. Orada olacak atamaları sonrasında SAT formülleri elde edilir. Her birini ayrı ayrı çözün (paralel olarak). Ayrı çözümlerden biri varsa genel bir çözüm vardır ve tam çözüm tam olarak tüm ayrı çözümlerin birleşmesidir. n 2 n2nn2n


kn genellikle oldukça büyüktür (yan tümce değişken grafiğindeki min-cut değeridir ve muhtemelen her zaman arka kapıdan daha büyüktür). Benzer bir alternatif yöntem, tek bir değişken seçmek, değerini true olarak ayarlamak, bunu bir çözücü örneğine göndermektir. Değerini false olarak ayarlayın ve bunu başka bir çözücü örneğine gönderin. Bunu değişkenleri için yapabilirsiniz . Ayarlanacak değişkenlerin seçilmesi biraz zor olabilir, yani. eğer doğrudan birbirlerine bağımlılarsa, o zaman birini ve sonra diğerini seçmek anlamsızdır. Birbirini izleyen / yinelenen seçimler yapmak için bir basitleştirme adımı gerekebilir. k
Realz Slaw

3
Bu yaklaşım pratikte çok işe yaramaz gibi görünüyor. Olumlu örnekler için , çok sayıda bilgisayarınız varsa , aşağıdaki yaklaşım genellikle çok daha iyidir: örn . Aynı örnek ancak farklı rastgele tohumlarla devam etmek ve çözücülerden biri bir çözüm bulana kadar bekleyin.
Jukka Suomela

@jukka hangi yaklaşım ve neden çok iyi çalışmıyor? iş yükündeki dengesizlikten mi kaynaklanıyor? rs, iş yükünü çok eşit olarak bölmediği bölme konusunda iyi bir noktaya sahiptir, ancak örnek yapısına bağlı olma eğiliminde olacaktır ve başlangıçta onu daha eşit olarak bölüştüğü düşünülen değişkenleri seçmenin kolay olduğuna dikkat çekmektedir. akşam sonuç olarak cümle # sonuçlanır. realz, vs arka kapı hakkında anlamadım ... arka kapılar gerçekten zor durumlarda prob nadir olduğunu düşünüyorum ...n
vzn

1
@vzn: Önerdiğiniz yaklaşım. Neden çok iyi çalışmadığını görmek için gerçek dünyadaki örneklerle deneyin ve önerdiğim ile karşılaştırın. :) Eğer saf bir geri izleme arama algoritması ile uğraşmak, ama modern SAT çözücüler saf geri izleme arama çok daha fazla yaklaşım yaklaşım çok mantıklı olacaktır.
Jukka Suomela

iyi ama sorunun ne olduğunu kelimelerle açıklayabilir misiniz ? Yaklaşımınız tatmin edici örnekler için işe yarayabilir, ancak kaç ayrı örnek çalıştırılırsa çalıştırılsın, tatmin edilemez bir örnek bulmak tam olarak aynı zaman almaz mı? değilse, belki subj alıntı yapmak için bir ref var ...
vzn
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.