36PAA - Probl�m v�en� splnitelnosti booleovsk� formule - simulovan� ochlazov�n�

Zad�n�

Je d�na booleovsk� formule F prom�nn�ch X=(x1, x2, ... , xn) v konjunktivn� norm�ln� form� (tj. sou�in sou�t�). D�le jsou d�ny celo��seln� kladn� v�hy W=(w1, w2, ... , wn).  Najd�te ohodnocen� Y=(y1, y2, ... , yn) prom�nn�ch x1, x2, ... , xn tak, aby F(Y)=1 a sou�et vah prom�nn�ch, kter� jsou ohodnoceny jedni�kou,  byl maxim�ln�.

Je p��pustn� se omezit na formule, v nich� m� ka�d� formule pr�v� 3 liter�ly (probl�m 3 SAT). Takto omezen� probl�m je stejn� t�k�, ale mo�n� se l�pe programuje a l�pe se posuzuje obt�nost instance (viz Selmanova prezentace v odkazech).

Popis algoritmu

Z pokro�il�ch iterativn�ch metod jsem si vybral algoritmus simulovan� ochlazov�n�. Je pops�n "v�vojov�mi diagramy" na n�sleduj�c�ch obr�zc�ch.

Pokus�m se algoritmus popsat slovn�. Jedn� se o 2 vno�en� cykly. Na za��tku je nastaveno n�jak� �e�en� a po��te�n� teplota, kter� se ve venkovn�m cyklu postupn� sni�uje. Teplotou je d�na ochota algoritmu p�ijmout hor�� �e�en�. T�m se m��e algoritmus vymanit z lok�ln�ho minima. Ve vnit�n�m cyklu se hled� nov� �e�en�. To je pops�no na obr�zku jako funkce "try". N�hodn� vygenerujeme nov� �e�en� (oproti �loze "Batoh" p�ij�m�me i �e�en�, kdy je formule nespln�n�). Pokud je lep�� ne� doposud nalezen�, toto �e�en� p�ijmeme. Pokud je hor�� tak jej p�ijmeme s ur�itou pravd�podobnost�, kter� je d�na aktu�ln� teplotou a velikost� zhor�en� ceny. Algoritmus kon�� pokud se teplota sn�� na �rove� teploty tuhnut�. Pro spr�vnou funkci algoritmu je velice d�le�it� nastavit parametry (po��te�n� teplota, teplota tuhnut�, rychlost tuhnut�, velikost equilibria).

Implementace

Form�t vstupn�ho souboru

Form�t vstupn�ho souboru jsem p�evzal od Martina Prchl�ka. Oproti DIMACS CNF form�tu obsahuje v�hy prom�nn�ch a nejlep�� �e�en� dodan� BruteForcem. Popis form�tu (��dk�):

Zdrojov� k�dy (C#)

Ohodnocovac� funkce getGrant

N�vrh t�to funkce je velice d�le�it� pro spr�vnou funkci cel�ho algoritmu. Jsou na n� kladeny tyto po�adavky:

Implementoval jsem ji tak, �e se�te v�hy prom�nn�ch nastaven�ch na true a od nich ode�te maxim�ln� v�hu prom�nn� pro ka�dou nespln�nou klausuli. Z toho vypl�v�, �e pokud je formule spln�n� vrac� sou�et vah prom�nn�ch.

Nam��en� hodnoty a v�sledky

Aby bylo mo�n� spr�vn� nastavit parametry algoritmu je nutn� experimentovat. P�i experimentech jsem sledoval graf pr�chodu stavov�m prostorem, �asovou n�ro�nost a relativn� chybu. Pro v�po�et relativn� chyby jsem pou�il hodnoty ze vstupn�ho souboru. Z d�vodu �asov� n�ro�nosti m�m k dispozici data pro 20 prom�nn�ch a 50, 75 a 90 klausul�. Experimenty jsou shrnuty v n�sleduj�c�ch tabulk�ch a grafech.

Pro p�ehlednost jsem pou�il tyto zkratky:

T0 = po��te�n� teplota
Tf = teplota tuhnut�
dT = zm�na teploty
equ = equilibrium
NF = �e�en� nenalezeno
time = �as v ms
Avg (AvgErr) = pr�m�rn� relativn� chyba v�sledku z k m��en�
Best (BestErr) = nejni��� relativn� chyba vybran� z k m��en�

Pokud nen� uvedeno jinak, jsou nastaveny toto hodnoty: T0_k = 0.1,Tf = 1,dT = 0.9, equ_k = 1. Algoritmus byl na ka�d� instanci spu�t�n 5x a v�sledn� relativn� chyba a �as je pr�m�r z v�sledk� algoritmu. Takto bylo postupov�no pro ka�dou instanci (50 instanc� pro ka�dou velikost probl�mu).

Teplota tuhnut� (Tf) a rychlost zm�ny (dT) jsou zad�ny absolutn�. Naproti tomu po��te�n� teplota (T0) a velikost equilibria (equ) jsou vzta�eny k velikosti instance (m�n�me pouze multiplikativn� konstantu) takto:

T0 = T0_k * var_count * maxW;
equ = equ_k * var_count;

kde var_count je po�et prom�nn�ch a maxW je maxim�ln� v�ha prom�nn�.

M��il jsem na NTB s procesorem Centino 1.4GHz, nastaven� max Performance p�i nap�jen� z adapt�ru. Pou�it� OS: Windows XP SP2 s .net Framework 2.

Nastaven� rychlosti ochlazov�n�

P�i tomto experimentu jsem m�nil dT od 0.5 do 0.995

Tabulka �.1

dT50 klausul�75 klausul�90 klausul�
NFtimeAvgErrBestErrNFtimeAvgErrBestErrNFtimeAvgErrBestErr
0,9950,00%223,71,70%0,20%0,00%275,92,90%0,20%0,80%316,21,90%0,80%
0,9450,00%17,34,40%0,60%0,40%25,74,20%1,80%4,80%27,71,50%0,50%
0,8980,00%9,54,20%0,70%2,40%13,64,20%1,70%5,20%14,91,30%2,10%
0,8530,00%6,36,50%1,40%1,60%8,74,40%3,70%7,20%10,11,30%0,90%
0,810,00%4,66,60%2,70%3,20%6,43,80%4,00%9,60%7,50,90%0,70%
0,770,00%47,20%3,90%5,20%5,23,30%4,30%10,00%6,20,50%0,80%
0,7310,00%3,16,90%4,30%5,60%4,43,60%6,00%11,60%4,80,60%3,50%
0,6950,40%2,95,50%4,70%6,80%3,82,80%4,70%12,00%4,10,70%3,00%
0,660,00%2,47,70%5,00%4,80%3,33,50%7,40%13,20%3,81,60%6,20%
0,6270,40%2,39,00%4,00%6,80%2,83,40%5,90%13,20%3,40,90%3,30%
0,5960,80%25,30%4,30%8,00%33,30%4,70%14,40%3,20,10%0,60%
0,5662,80%1,95,90%3,30%9,20%2,82,90%6,90%12,00%2,80,90%2,30%
0,5382,00%1,68,90%8,00%10,80%2,32,70%6,10%12,80%2,40,50%2,20%
0,5111,60%1,510,10%10,60%10,80%1,92,30%9,00%12,40%2,41,00%3,00%

Grafy �.1

relativn� chyba # nenalezen�ch stav� �asov� slo�itost pr�chod stavov�m prostorem

Nastaven� velikosti equilibria

P�i tomto experimentu jsem m�nil equ_k od 1 do 10. Pouze p�ipomenu, �e velikost equilibria je vzta�en� k velikosti instance a to takto: equ = equ_k * var_count.

Tabulka �.2

equ_k50 klausul�75 klausul�90 klausul�
NFtimeAvgErrBestErrNFtimeAvgErrBestErrNFtimeAvgErrBestErr
10,00%10,94,60%0,50%1,20%13,13,30%1,70%6,00%15,21,50%0,90%
20,00%19,53,40%0,20%0,00%26,24,50%3,00%2,40%30,12,00%2,10%
30,00%28,92,90%0,20%0,00%39,24,50%1,30%2,40%452,30%1,40%
40,00%38,83,10%0,40%0,00%52,33,90%1,10%2,80%601,80%0,50%
50,00%47,82,80%0,30%0,40%65,13,40%0,70%3,20%76,91,90%1,10%
60,00%57,42,00%0,10%0,00%79,83,30%1,10%0,80%90,61,80%1,30%
70,00%68,92,30%0,20%0,40%93,13,60%0,20%1,20%105,42,30%0,80%
80,00%77,52,40%0,40%0,00%104,83,50%1,20%1,20%122,32,30%0,70%
90,00%85,72,20%0,30%0,00%119,63,50%0,70%2,80%139,41,90%0,50%
100,00%97,92,00%0,20%0,40%132,63,40%0,80%2,40%157,52,00%0,50%

Grafy �.2

relativn� chyba # nenalezen�ch stav� pr�chod stavov�m prostorem

Nastaven� teploty tuhnut�

P�i tomto experimentu jsem m�nil Tf od 1 do 10.

Tabulka �.3

Tf50 klausul�75 klausul�90 klausul�
NFtimeAvgErrBestErrNFtimeAvgErrBestErrNFtimeAvgErrBestErr
10,00%10,54,50%0,90%1,20%13,64,00%1,30%5,20%15,81,50%1,20%
20,00%8,65,60%1,00%1,60%133,30%2,30%5,20%13,31,80%1,70%
30,00%7,75,50%1,00%1,20%11,93,20%2,30%6,00%12,61,20%1,40%
40,00%75,00%0,90%1,20%10,43,50%0,70%6,00%11,71,40%1,20%
50,00%7,24,00%0,50%1,60%9,85,00%2,30%5,20%11,31,20%0,40%
60,00%6,54,60%1,00%2,00%8,94,00%1,90%6,00%10,31,70%3,70%
70,40%65,40%2,40%3,20%9,43,30%0,70%5,60%9,71,30%1,00%
80,00%5,67,10%1,40%2,00%8,24,70%2,30%5,20%9,41,30%1,50%
90,00%5,86,30%1,90%1,20%8,54,70%2,90%5,60%9,31,30%1,20%
100,40%5,66,60%1,40%2,00%8,43,80%1,50%5,60%9,21,40%3,20%

Graf �.3: Z�vislost relativn� chyby na teplot� tuhnut�

Nastaven� po��te�n� teploty

P�i tomto experimentu jsem m�nil T0 od 0,1 do 1. Pouze p�ipomenu, �e velikost po��te�n� teploty je vzta�ena k velikosti instance a to takto: T0 = T0_k * var_count * maxW.

Tabulka �.4

T0_k50 klausul�75 klausul�90 klausul�
NFtimeAvgErrBestErrNFtimeAvgErrBestErrNFtimeAvgErrBestErr
0,10,00%9,94,90%1,00%1,20%134,40%2,00%4,40%15,11,30%0,80%
0,20,00%114,80%0,40%0,40%15,13,60%1,30%5,60%171,10%2,80%
0,30,00%11,35,40%0,60%0,80%15,94,10%1,80%4,00%18,11,50%1,70%
0,40,00%11,84,90%1,00%1,20%16,43,70%0,40%6,40%19,31,50%1,00%
0,50,00%11,95,00%1,20%2,80%16,33,90%1,70%6,00%19,51,40%1,00%
0,60,00%12,35,40%0,60%1,60%17,64,70%1,10%5,60%20,41,40%0,90%
0,70,00%12,65,00%0,80%2,00%17,94,00%2,20%4,40%21,41,50%0,70%
0,80,00%12,95,40%0,80%0,80%17,34,70%2,60%5,20%20,71,10%1,00%
0,90,00%12,95,00%0,40%1,20%18,14,10%1,30%5,20%21,11,80%0,70%
10,00%13,65,00%0,40%1,20%18,53,90%2,60%5,20%21,11,50%1,80%

Grafy �.4

relativn� chyba # nenalezen�ch stav� pr�chod stavov�m prostorem

Sledov�n� po�tu nalezen�ch �e�en� a relativn� chyby na po�tu spu�t�n� algoritmu

Jeliko� algoritmus simulovan� ochlazov�n� je randomizovan�, d�v� p�i ka�d�m spu�t�n� jin� v�sledky. Pokud chceme zlep�it v�sledky, spust�me algoritmus v�cekr�t a z v�sledk� vybereme to nejlep��.

Graf �.5: Z�vislost relativn� chyby na po�tu spu�t�n� algoritmu

Graf �.6: Z�vislost # nenalezen�ch �e�en� na po�tu spu�t�n� algoritmu

Z�v�r

Algoritmus simulovan� ochlazov�n� je pom�rn� snadn� na implementaci. Jako nejd�le�it�j�� krok vid�m ve spr�vn�m navrhnut� ohodnocovac� funkce, tak aby algoritmus nutila ke spr�vn�mu �e�en�.
Vzta�en� parametr� k po�tu prom�nn�ch a maxim�ln� v�ze se uk�zalo spr�vn�. Pro instance, kter� byly k dispozici (20/50, 20/75, 20/91 - po�et prom�nn�ch / po�et klausul�), se uk�zalo toto nastaven� jako optim�ln�: Pro tyto hodnoty se nepoda�ilo nal�zt �e�en� maxim�ln� ve 14% p��pad� a chyba oproti nejlep��mu �e�en� dodan�ho ze vstupu byla 2%. K t�mto v�sledk�m velkou m�rou p�isp�v� opakov�n� v�po�tu ka�d� instance 5x.
U tohoto algoritmu (stejn� jako u dynamick�ho programov�n�) dop�edu zn�me po�et iterac� cyklu, tud� m��eme odhadnout �asovou n�ro�nost. Proto u n�kter�ch m��en� chyb� �asov� z�vislost (ch�pav� �ten�� ji z popisu algoritmu snadno odvod�). D�le z proveden�ch experiment� m��eme ud�lat tyto z�v�ry: