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