36 PAA - Problémy a algoritmy

Úloha 6: Řešení problému vážené splnitelnosti booleovské formule simulovaným ochlazováním

Jan Dohnal (dohnaj1@fel.cvut.cz)



Zadání

Řešte problém vážené splnitelnosti booleovské formule některou z následujících metod: lokální metoda pomocí záměn, simulované ochlazování, genetický algoritmus, tabu prohledávání. Je dána booleovská formule F proměnnných X=(x 1, x2, ... , xn) v konjunktivní normální formě (tj. součin součtů). Dále jsou dány celočíselné kladné váhy W=(w 1, w2, ... , wn). Najděte ohodnocení Y=(y 1, 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).

Použitá metoda

Pro řešení této úlohy jsem zvolil metodu simulovaného ochlazování. Jedná se o jednu z pokročilých iterativních metod pro řešení NP problémů. Využívá se postupného „snižování teploty“, kdy teplota ovlivňuje pravděpodobnost přijmutí nového stavu zhoršujícího optimalizační kritérium současného řešení. Pokud je teplota vysoká, pravděpodobnost přijmutí stavu, který má horší optimalizační kritérium než současný stav, je vyšší, než v případě nízké teploty. Tedy pokud je teplota vysoká, pravděpodobnost akceptace stavu, který má horší optimalizační kritérium než současný stav je vyšší, než pokud je teplota nízká.

Řešení

Omezil jsem se na řešení takových formulí, 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). Program má uloženou formuli s odpovídajícím ohodnocením jednotlivých proměnných, na které poté provádí algoritmus simulovaného ochlazování. Pro ochlazování se využívá multiplikativní koeficient alfa. Ve vnitřním cyklu se testuje podmínka na maximální počet iterací.

Nastavení parametrů

Parametry simulovaného ochlazování ovlivňující běh algoritmu a výsledek jsou tyto:
Ochlazování T = T * α, kde α ə {0.80, 0.82, ... 0.98}
Počáteční teplotaTp = {0.2,0.6,1,1.4,1.8,2.2,2.6,3,3.4,3.8}
Koncová teplota Tk = 0.1
Equilibrium Když počet iterací 1000
Práh iterace 1


Popis kostry algoritmu

ohodnoceni = new int[n]; 
nove_ohodnoceni = new int[n]; 
temp = start_temp; 
cena = gen_init(ohodnoceni); 
printf("Initial state: "); 
print_conf(ohodnoceni); 
//simulovane ochlazovani 
while ((temp > stop_temp) && (iter_nochange < prah_iter)) 
{ 
minula_cena=cena; 
for (unsigned int i=0;i<max_iter;i++) 
{ 
tmp_cena = try_state(temp,cena,ohodnoceni,nove_ohodnoceni); 
if (tmp_cena) 
{ 
tmp=ohodnoceni; 
ohodnoceni=nove_ohodnoceni; 
nove_ohodnoceni=tmp; 
cena=tmp_cena; 
} 
} 
//ochlazeni 
temp*=alfa; 
//zjstime jestli se zmenila cena 
iter_nochange = (minula_cena == cena) ? iter_nochange + 1 : 0; 
} 
Algoritmus pracuje se statickým dvourozměrným polem pro uložení celé formule, kde v jedné dimenzi jsou uloženy jednotlivé literály a v druhé dimenzi pak podformule. V dalším poli jsou pak uložena ohodnocení proměnných.

Naměřené hodnoty

Měření probíhalo na počítači Intel Pentium IV Dual Core 2Ghz, 1.5GB RAM, operační systém Mac OS X Tiger 10.4.10. Program je napsán v jazyce C++ a kompiloval se v g++.
t0αkonečná cenanavštíveno stavůakceptováno stavůakceptováno zhoršení t0αkonečná cenanavštíveno stavůakceptováno stavůakceptováno zhoršení
0,20,80140919512606202,20,801682020580484014
0,82138969013766770,821661939584654223
0,841381036515067430,841672152593784679
0,861351083016328060,8616623700105355258
0,881361224018519140,8816524945116285805
0,9013512795202710020,9016128650139056944
0,9213113890235211660,9216033570169148448
0,9412814970281113950,94159373502024710116
0,9612716575337216760,96158454052580612896
0,9812120445459822890,98153590103773118860
0,60,8014513020316215692,60,801721923085584269
0,8214414055356417700,821722040093264653
0,8414414760385819190,8417023865106135295
0,8614116095434321620,8617025215117545867
0,8814016590473023550,8817129970140467013
0,9014118735565728190,9017129565150027491
0,9214021720661532970,9216832400172988640
0,9414024315796139710,94166458702415912071
0,96137287551037951800,96161498452954914766
0,98135316801308265330,98159701254547322730
10,80155143404638230930,801782011590604520
0,8215616110510325410,8217421870102365108
0,8415118795596029700,8417423250112055592
0,8615018480625831190,8617327045130736527
0,8815021960747837290,8817328935146187299
0,9015122155830341420,9017233120167798381
0,9214525485947747300,9217135010192719627
0,94145283651164658140,94171440252504912516
0,96147351751531176470,96170535353323716611
0,981424180521140105620,98169652054413022059
1,40,8016416125581128953,40,801852080597924886
0,8216318375656332720,8218322365106855331
0,8416518960710935450,8418224360119405961
0,8615920340788339320,8618227510137666873
0,8815524885954947640,8818130150159567968
0,90155272851111155440,9018033435182499116
0,92154312151310165420,92180394652168710835
0,94151359851613080550,94179476402763613811
0,96150393301965098180,96179524703320916598
0,981475316029025145050,98179682654791623952
1,80,8017016470658832853,80,8019221015101165049
0,8216818930764638130,8219123820116635822
0,8416821090854942650,8419125980129366458
0,8616622155939346860,8619027780143227152
0,88163245851089554380,8819030045160988040
0,90162266851209360380,9019033885190689525
0,92161323701507875290,92189381602170210842
0,94161344851762788040,94189493952913914562
0,961554173022658113210,96189592203808119032
0,981456279037187185850,98189703805107725532

Grafy




Předchozí graf ilustruje závislost výsledné ceny na počáteční teplotě. Je zde patrný konstantní strmý nárůst se zvyšující se počáteční teplotou. Za zmínku také stojí lokální maximum mezi teplotními body 1,8 a 2,2.




Z předcházejícího grafu, který ukazuje vliv koeficientu ochlazování na cenu řešení, je pro změnu patrný pokles se zvyšující se hodnotou koeficientu.




Další graf ukazuje závislost iterací na koeficientu ochlazování. Čím větší je tento koeficient, tím více iterací je potřeba.

Závěr

Z vizuální reprezentace výsledků pomocí grafů plynou následující závěry:
Nejoptimálnějších výsledků bylo dosaženo při následujících hodnotách parametrů:

Příloha

Ke stažení je k dispozici zabalená celá úloha, nebo jen zdrojový kód vytvořený v programovacím jazyku C: