Naprogramujte sat solver založený na algoritmu DPLL a vyhodnoťte jeho výkon na vhodném datasetu. Očekává se, že studenti se budou snažit o co nejefektivnější implementaci.
Použití programu je
solver input.cnf
kde solver je jméno spustitelného souboru a
input.cnf je soubor s formulí v DIMACS formátu.
Na standardní výstup vypíše program následující:
SAT nebo
UNSATSAT, obsahuje druhý řádek seznam
pravdivých literálů, uspořádaný vzestupně podle čísla proměnné. Pokud je
výsledek UNSAT, je druhý řádek prázdnýTextový formát. Řádky začínající c jsou komentáře. První
řádek je
p cnf <variables> <clauses>
kde <variables> a <clauses>
jsou celá čísla udávající počet proměnných a počet klauzulí. Na dalších
řádcích jsou klauzule. Každá klauzule je uložena jako posloupnost celých
čísel oddělených mezerami, která je ukončena 0 (Typicky je celá na
jednom řádku). Přitom se předpokládá, že proměnné jsou čísla 1,2,….
Negativní literály jsou záportná čísla. Formuli {{x, y, ¬z}, {¬y, z}}
můžeme uložit jako
p cnf 3 2
1 2 -3 0
-2 3 0
Adresáře n-vars obsahují formule s n
proměnnými, adresář coloring obsahuje formule získané z
barvení grafu rozdělené do podadresářů podle velikostí grafu, adresář
pigeon-hole obsahuje formule získané z formalizace
pigeonhole principu.
Podle splnitelnosti jsou soubory v adresářích sat a
unsat.
Termín odevzdání je 30. 6. Pokud se dostanete do časové tísně, a úkol nestihnete, můžete mi jej poslat i během prázdnin. Snažte se to ale stihnout dříve.
Odevzdávejte mailem. V příloze pošlete archiv obsahující:
Archiv nesmí obsahovat spustitelné soubory!! Volba jazyka je na studentech (zakázán je javascript), preferuji věci snadno spustitelné na unixovém systému.
Alternativně lze poslat link na repozitář, kde se nachází výše popsané.