Regelbaserede...

Preview:

Citation preview

Henrik Bulskov Styltsvig

Efterår 2003

Datalogiafdelingen, hus 42.1Roskilde Universitetscenter

Universitetsvej 1 Postboks 2604000 Roskilde

Telefon: 4674 2000Fax: 4674 3072

www.dat.ruc.dk

Regelbaserede ekspertsystemer

Opgaver

Henrik Bulskov Styltsvig 2Efterår 2003

Opgave 1

• Lav et regelbaseret ekspertsystem. Vidensbasen er et lille ”bilen kan ikke starte” eksempel. Systemet skal fungere ved at stille spørgsmål til brugeren der kan svare med enten ”ja” eller ”nej”.

Henrik Bulskov Styltsvig 3Efterår 2003

Opgave 1 - produktionsreglerstrøm(batteri) benzin tænding defect(starter) starte

Henrik Bulskov Styltsvig 4Efterår 2003

Opgave 1 - produktionsreglerstrøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

Henrik Bulskov Styltsvig 5Efterår 2003

Opgave 1 - produktionsreglerstrøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

Henrik Bulskov Styltsvig 6Efterår 2003

Opgave 1 - produktionsreglerstrøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

Henrik Bulskov Styltsvig 7Efterår 2003

Opgave 1 - produktionsreglerstrøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 8Efterår 2003

Opgave 1 - produktionsregler

defekt(tændkabler) defekt(strømfordeler) tænding

strøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 9Efterår 2003

Opgave 1 - eksempel

defekt(tændkabler) defekt(strømfordeler) tænding

strøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 10Efterår 2003

Opgave 1 - eksempel

defekt(tændkabler) defekt(strømfordeler) tænding

strøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 11Efterår 2003

Opgave 1 - eksempel

defekt(tændkabler) defekt(strømfordeler) tænding

strøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 12Efterår 2003

Opgave 1 - eksempel

defekt(tændkabler) defekt(strømfordeler) tænding

strøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 13Efterår 2003

Opgave 1 - eksempel

defekt(tændkabler) defekt(strømfordeler) tænding

strøm(batteri) benzin tænding defect(starter) starte

tom(tank) benzitryk benzin

defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk

klikker(starter) kører(starter) defekt(starter)

(elektrisk(benzinpumpe) (strøm(benzinpumpe) stel(benzinpumpe)) ) (mekanisk(benzinpumpe) kører(benzinpumpe)) defekt(benzinpumpe)

Henrik Bulskov Styltsvig 14Efterår 2003

Opgave 1 – graffisk afbildning

Henrik Bulskov Styltsvig 15Efterår 2003

Opgave 1 – eksempel

Henrik Bulskov Styltsvig 16Efterår 2003

Opgave 1 – eksempel

Henrik Bulskov Styltsvig 17Efterår 2003

Opgave 1 – eksempel

Henrik Bulskov Styltsvig 18Efterår 2003

Opgave 1 – eksempel

Kontroller tændkabler. Modstanden skal blive større, jo længere de er: Modstanden ligger typisk mellem 0,2 Kohm og 1,5 Kohm. Er tændkablerne i orden?

Henrik Bulskov Styltsvig 19Efterår 2003

Opgave 1 - repræsentation

Henrik Bulskov Styltsvig 20Efterår 2003

Opgave 1 - repræsentation

Node { id = 2; parent = starte; desc = strøm(batteri);}

Henrik Bulskov Styltsvig 21Efterår 2003

Opgave 1 - repræsentation

Node { id = 6; parent = strøm(batteri); question = ”Er der ikke strøm på batteriet?”; recommendation = ”Lad batteriet op eller køb et nyt.”;}

Node { id = 2; parent = starte; desc = strøm(batteri);}

Henrik Bulskov Styltsvig 22Efterår 2003

Opgave 1 - repræsentation

Node { id = 2; parent = starte; desc = strøm(batteri); question = null; recommendation = null;}

Node { id = 6; parent = strøm(batteri); desc = ”Spørgsmål om strøm på batteriet”; question = ”Er der ikke strøm på batteriet?”; recommendation = ”Lad batteriet op eller køb et nyt.”;}

Henrik Bulskov Styltsvig 23Efterår 2003

Opgave 1 - repræsentation

Node

ID

PARENT

DESCRIPTION QUESTION

RECOMMENDATION

Node

id : intparent : intdesc : Stringquestion : Stringrecommendation : String

*

1

PRIORITY

strøm(batteri) benzin tænding defekt(starter) starte

Henrik Bulskov Styltsvig 24Efterår 2003

Opgave 1 – dybde først søgning

Henrik Bulskov Styltsvig 25Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(nextChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 26Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(netChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 27Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(netChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 28Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(netChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 29Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(netChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 30Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(netChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 31Efterår 2003

Opgave 1 - inferensmaskineFunction SHELL(parentId) {

Select all childern where parent = parentIdwhile(netChild) {

if(childHasQuestion) {answer = ask(question)if(answer = ”ja”) {

print recommendationexit

}}else

SHELL(childId)}

}Function ExpertSystem() {

SHELL(0)print ”Kunne ikke løse problemet!!!”;

}

Henrik Bulskov Styltsvig 32Efterår 2003

Opgave 2

• Udvid funktionaliteten i ekspertsystemtet fra opgave 1, således at der også udskrives information om hvordan løsningen blev fundet. Det vil sige de knuder der er involveret for at bevise hypotesen starte.Eksempel:

Svar: Bilen kan ikke starte fordi tændkablerne er defekte.

(defekt(tændkabler) tænding starte)

Henrik Bulskov Styltsvig 33Efterår 2003

Opgave 3

• En dybde først søgning direkte op mod databasen betyder at der åbnes en cursor for hvert niveau i bevistræet. Dette kan være problematisk hvis dybden i bevistræet er meget stor.Derfor kan der benyttes en søgning der er en blanding mellem dybde først og bredde først, således at der kun benyttes én cursor, uanset dybden.

• Tilføj denne ændring til ekspertsystemet fra opgave 2 (1).

Henrik Bulskov Styltsvig 34Efterår 2003

Opgave 3 – bredde først søgning

Henrik Bulskov Styltsvig 35Efterår 2003

Opgave 3 – bredde/dybde søgning