Prax 2: lihtsa DPLL lahendaja realiseerimine: erinevus redaktsioonide vahel
Resümee puudub |
Resümee puudub |
||
| (ei näidata sama kasutaja üht vahepealset redaktsiooni) | |||
| 30. rida: | 30. rida: | ||
* disjunktidel on küljes counterid seni määramata positiivsete ja määramata negatiivsete literaalide kohta | * disjunktidel on küljes counterid seni määramata positiivsete ja määramata negatiivsete literaalide kohta | ||
Kui tahad teha eriti vinget tõestajat, tasub tutvuda Eugene Goldbergi loengutega [http://eigold.tripod.com/presentations/Lecture1.zip loeng1], [http://eigold.tripod.com/presentations/Lecture1.zip loeng2],[http://eigold.tripod.com/presentations/Lecture1.zip loeng3] ja/või googeldada ja otsida zChaffi ja SATO kohta artikleid. | Kui tahad teha eriti vinget tõestajat (ei ole kohustuslik), tasub tutvuda: | ||
* eriti soovitav: http://minisat.se/Papers.html | |||
* Eugene Goldbergi loengutega [http://eigold.tripod.com/presentations/Lecture1.zip loeng1], [http://eigold.tripod.com/presentations/Lecture1.zip loeng2],[http://eigold.tripod.com/presentations/Lecture1.zip loeng3] | |||
* ja/või googeldada ja otsida zChaffi ja SATO jne kohta artikleid. | |||
Valmis saadud lahendajaga tuleks veidi eksperimenteerida: | Valmis saadud lahendajaga tuleks veidi eksperimenteerida: | ||
Viimane redaktsioon: 12. märts 2015, kell 14:40
Ülesande sisuks on lihtsa DPLL lahendaja realiseerimine nullist.
Sisendiks oleks lahendajal triviaalses DIMACS formaadis CNF (conjunctive normal form ehk disjunktsioonide konjunktsioon) fail, näiteks:
c Example CNF format file c p cnf 4 3 1 3 -4 0 4 0 2 -3
Näiteid ja lisajuttu leiad: http://people.sc.fsu.edu/~jburkardt/data/cnf/cnf.html
Sinu programm peaks töötama lihtsalt käsurealt, võtma faili sisse, andma välja tulemuse ja soovitavalt veidi statistikat.
Tehnoloogia on vaba. Hea mõte on kasutada mõnda kiiremat, kompileeritud keelt a la C, C++, Java, C#.
Lahendaja peaks kindlasti sisaldama:
- unit clausede propageerijat (ühikresolutsiooni tegemine)
- rekursiivset splittijat (dpll põhiidee)
Mõistlik oleks realiseerida lahendaja nii, et ta ei genereeri füüsiliselt uusi disjunkte, vaid
- muutujate teadaolevad väärtused on integer massiivis
- muutujatel on küljes pointerite massiivid disjunktidele, kus ta esineb (eraldi negatiivsete ja positiivsete jaoks)
- disjunktidel on küljes counterid seni määramata positiivsete ja määramata negatiivsete literaalide kohta
Kui tahad teha eriti vinget tõestajat (ei ole kohustuslik), tasub tutvuda:
- eriti soovitav: http://minisat.se/Papers.html
- Eugene Goldbergi loengutega loeng1, loeng2,loeng3
- ja/või googeldada ja otsida zChaffi ja SATO jne kohta artikleid.
Valmis saadud lahendajaga tuleks veidi eksperimenteerida:
- loomulikult katsetada lihtsatel näidetel, et kas käib õieti
- katsetada keerukamate näidete peal, et millistega veel hakkama saab ntx 5 sek vältel ja millistega mitte