Toon posts:

[ALG] Vergelijken heterogene bomen

Pagina: 1
Acties:

Verwijderd

Topicstarter
In ons project krijgen we nu te maken met het vergelijken van heterogene bomen. We willen een rangordening tussen deze bomen aanleggen: de ene boom wordt boven de ander geprefereerd, de ene boom sluit de andere uit, etc.

Het domein dat door dit project beschreven wordt, is het rechtsdomein. We gaan er van uit dat er een paar feiten vaststaan (axioma’s) en dat er een hele set regels aanwezig is die toegepast kan worden op deze feiten, waardoor er een hele set verschillende opvattingen ontstaat (verschillende regels op dezelfde feiten leiden tot andere conclusies, maar dan iets genuanceerder). Deze opvattingen worden gerepresenteerd d.m.v. prooftrees. De prooftrees willen we met elkaar kunnen vergelijken.

Met behulp van een querie proberen we een waarde te bepalen voor een variabele (bijvoorbeeld schuldig: true of false). De afleiding van deze querie kan op veel verschillende manieren gebeuren. Ten eerste is de inferstage van belang: database, user, rules of default.

Afbeeldingslocatie: http://www.alarmnummer.net/images/1.JPG

Ten tweede zit er verschil in de regels die toegepast worden: schuldig kan bewezen zijn door (regel1: moord -> schuldig), wiens bron de rechtbank is, maar schuldig kan ook bewezen worden door (regel 2: moord -> schuldig) wiens bron het hooggerechtshof is. Maar er kan bijvoorbeeld ook afgeleid worden dat schuldig “false” is, maar dan door regel3 wiens bron de Hoge Raad is.

Afbeeldingslocatie: http://www.alarmnummer.net/images/2.JPG


En ten derde kan schuldig bepaald worden door bijvoorbeeld moord en op een
andere manier door aan te tonen dat mishandeling het geval was.

Afbeeldingslocatie: http://www.alarmnummer.net/images/3.JPG

De traversal door de boom willen we kunnen hergebruiken (zoals bijvoorbeeld in een visitor guide systeem, of de mapping function van Hascal). Want waarschijnlijk zullen we 10 bomen met elkaar moeten vergelijken.

Het vergelijken van de prooftrees is nu erg complex: er moet gekeken worden naar de soort regel, naar de eigenschappen van de regel, naar de condities en conclusies, etc. Dit kan soms leiden tot een erg grote boom. En daarbij komt nog dat alle bomen met alle bomen vergeleken moet worden. Hieronder een voorbeeld van een set programma regels:
//******** Sloten declaraties ******************
// ****

slot(afvalstof, prove_only, unknown ).

slot(gebruikt, prove_only, unknown).

slot(afval, prove_only, false).

slot(geen_afval, prove_only, false).

slot(spreekmond_afvalstof, prove_only, false).
//-----------------------------------------------
slot(uranium, prove_only, unknown).

slot(chocolade, prove_only, unknown).

slot(giftig, prove_only, false).

slot(niet_giftig, prove_only, false).


//******** Feiten ******************************
// ****

gebruikt(true, database).

afvalstof(true, database).
//----------------------------------------------
chocolade(true, database).

uranium(false, database).


//******** Regels ******************************
// ****

or_geenafval: ifthen(geen_afval, afval, false).

or_gebruikt: ifthen(gebruikt,geen_afval)
@bron('Hoge Raad')
@date(1938).

or_spreekmond: ifthen(afvalstof, spreekmond_afvalstof)
@bron('De Kroon')
@date(1864).


or_spreekmond1: ifthen(spreekmond_afvalstof, afval)
@bron('De Kroon')
@date(1864).

//----------------------------------------------
or_nietgiftig: ifthen(niet_giftig, giftig, false).

or_uranium: ifthen(uranium, giftig)
@bron('Star Trek')
@date(2435).

or_chocolade: ifthen(chocolade, niet_giftig)
@bron('Columbus')
@date(1624).

//********** Queries ***************************
// ****

?slot_value(afval, Afval, Afval_Proof).
?slot_value(uranium, Uranium, Uranium_Proof).
?slot_value(giftig, Giftig, Giftig_Proof).

De bomen zitten dan opgeslagen in de Proofs. Het antwoord op de eerste querie is:

-------------------------------
Solutions: 1
-------------------------------
slot_value(afval,Afval,Afval_Proof)=true
Proof'=proofed_by_if_then(or_spreekmond1,afval,true,proofed_by_if_then
(or_spreekmond,spreekmond_afvalstof,true,proof(afvalstof,true,database),ifthen
(afvalstof,spreekmond_afvalstof)),ifthen(spreekmond_afvalstof,afval))

Value'=true
Afval_Proof=Proof'
Afval=Value'
-------------------------------

We zouden graag meer informatie hebben over vergelijkingen tussen boomstructuren en misschien hebben jullie er nog een aantal leuke ideeen over. We hebben er zelf namelijk geen literatuur over gevonden, dus voor zover we haar hebben, we zitten er nu met onze handen in.