Regelbaserede ekspertsystemer Opgaver Henrik Bulskov Styltsvig Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk
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 2
Opgave 1 - produktionsregler strøm(batteri) benzin tænding defect(starter) starte Henrik Bulskov Styltsvig 3
Opgave 1 - produktionsregler strøm(batteri) benzin tænding defect(starter) starte tom(tank) benzitryk benzin Henrik Bulskov Styltsvig 4
Opgave 1 - produktionsregler strøm(batteri) benzin tænding defect(starter) starte tom(tank) benzitryk benzin defekt(benzinpumpe) stoppet(benzinfilter) stoppet(benzinslange) benzintryk Henrik Bulskov Styltsvig 5
Opgave 1 - produktionsregler 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) Henrik Bulskov Styltsvig 6
Opgave 1 - produktionsregler 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 7
Opgave 1 - produktionsregler 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(tændkabler) defekt(benzinpumpe) defekt(strømfordeler) tænding Henrik Bulskov Styltsvig 8
Opgave 1 - eksempel 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(tændkabler) defekt(benzinpumpe) defekt(strømfordeler) tænding Henrik Bulskov Styltsvig 9
Opgave 1 - eksempel 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(tændkabler) defekt(benzinpumpe) defekt(strømfordeler) tænding Henrik Bulskov Styltsvig 10
Opgave 1 - eksempel 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(tændkabler) defekt(benzinpumpe) defekt(strømfordeler) tænding Henrik Bulskov Styltsvig 11
Opgave 1 - eksempel 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(tændkabler) defekt(benzinpumpe) defekt(strømfordeler) tænding Henrik Bulskov Styltsvig 12
Opgave 1 - eksempel 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(tændkabler) defekt(benzinpumpe) defekt(strømfordeler) tænding Henrik Bulskov Styltsvig 13
Opgave 1 graffisk afbildning Henrik Bulskov Styltsvig 14
Opgave 1 eksempel Henrik Bulskov Styltsvig 15
Opgave 1 eksempel Henrik Bulskov Styltsvig 16
Opgave 1 eksempel Henrik Bulskov Styltsvig 17
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 18
Opgave 1 - repræsentation Henrik Bulskov Styltsvig 19
Opgave 1 - repræsentation Node { id = 2; parent = starte; desc = strøm(batteri); Henrik Bulskov Styltsvig 20
Opgave 1 - repræsentation Node { id = 2; parent = starte; desc = strøm(batteri); Node { id = 6; parent = strøm(batteri); question = Er der ikke strøm på batteriet? ; recommendation = Lad batteriet op eller køb et nyt. ; Henrik Bulskov Styltsvig 21
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 22
Opgave 1 - repræsentation PARENT RECOMMENDATION ID DESCRIPTION QUESTION Node PRIORITY * Node id : int parent : int desc : String question : String recommendation : String 1 strøm(batteri) benzin tænding defekt(starter) starte Henrik Bulskov Styltsvig 23
Opgave 1 dybde først søgning Henrik Bulskov Styltsvig 24
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(nextchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 25
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(netchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 26
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(netchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 27
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(netchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 28
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(netchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 29
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(netchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 30
Opgave 1 - inferensmaskine Function SHELL(parentId) { Select all childern where parent = parentid while(netchild) { if(childhasquestion) { answer = ask(question) if(answer = ja ) { print recommendation exit else SHELL(childId) Function ExpertSystem() { SHELL(0) print Kunne ikke løse problemet!!! ; Henrik Bulskov Styltsvig 31
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 32
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 33
Opgave 3 bredde først søgning Henrik Bulskov Styltsvig 34
Opgave 3 bredde/dybde søgning Henrik Bulskov Styltsvig 35