Prax 2: lihtsa DPLL lahendaja realiseerimine: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Uus lehekülg: ' Ülesande sisuks on lihtsa DPLL lahendaja realiseerimine nullist. Sisendiks oleks lahendajal triviaalses DIMACS formaadis CNF (conjunctive normal form ehk disjunktsioonide konj...'
 
Resümee puudub
29. rida: 29. rida:
* muutujatel on küljes pointerite massiivid disjunktidele, kus ta esineb (eraldi negatiivsete ja positiivsete jaoks)
* 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
* disjunktidel on küljes counterid seni määramata positiivsete ja määramata negatiivsete literaalide kohta
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

Redaktsioon: 14. veebruar 2013, kell 18:54

Ü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

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