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.
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.