Kunskapsbaserade system, *38

 

HT 2001

 

Kursens hemsida

 

Inlämningsuppgift 1p:

 

Söktekniker

 

Inlämningsuppgift 2p:

 

Expertsystemet Hemdoktorn

 

Gruppens Arbete

 

Startmodul

CBSmodul

Modul B

1. Inledning

 

Hemdoktorn är ett system som bygger på ett så kallat fallbaserat resonerande (Case-Based-Reasoning-System). Detta innebär att det slutresultat som fås kan användas för en intuitivare form av resonerande och går i huvudsak ut på att med att en matchning av nuvarande kunskap med redan lagrad sådan i en kunskapsmodul (kunskapsbas). I Hemdoktorn skall en slutmodul därför innehålla fallbeskrivningar i form av avpersonifierade journaler som köpts från olika sjukhus.

 

2. Syfte och problemformulering

 

Det först framarbetade förslaget byggde på konstruktion av ett rådfrågningssystem som föräldrar kan använda sig av för att få råd och tips om vad deras barn kan ha för sjukdom. Problemet man då stöter på är ansvarsfrågan, det vill säga ett expertsystem kan aldrig ersätta de kunskaper och erfarenheter som en läkare har. Slutversionen är därför ett system som kan användas som komplement till en redan ställd diagnos, ett så kallat "second-opinionsystem". Som exempel kan nämnas en förälder som på barnklinikens akutmottagning fått veta att barnet har kikhosta och vid hemkomsten undrar vad som egentligen blev sagt under läkarbesöket.

 

3. Systembeskrivning

 

Jag arbetade fram två förslag på systemlösning, det ena bestämde vi att använda gemensamt i storgruppen och det andra tänkte jag presentera individuellt nedan. De olika lösningarna skiljer sig inte nämnvärt åt, lösningen nedan visar hur systemet kan se ut då man tar hand om alla allmänna frågor på ett annat sätt. Exempel på allmänna frågor kan vara barnets ålder, hur hög feber det har samt hur länge det varit sjukt. Vilket lösningsförslag man än väljer behövs en startmodul, ett antal sjukdomsspecifika moduler samt någon form av slutmodul som tar hand om systemets output, det vill säga de färdiga diagnoserna. Skillnaden ligger nu i modulernas inre utformning dit allmänna frågor flyttats.

 

Under seminariet strax innan jul diskuterades realiserbarheten i de olika system och Hemdoktorn fick påpekandet att detta inte skulle vara möjligt att genomföra, just på grund av ansvarsfrågan som nämns ovan. I kursen Kognitionsvetenskap skrev jag en uppsats om svårigheten med att konstruera ett system som innehåller "sunt förnuft" samt den förmåga till resonemang och dragandet av slutsatser som bygger på tidigare förvärvad kunskap, det vill säga egenskaper som gör oss människor unika (Varför representation av naturligt språk som bakgrundskunskap begränsar möjligheten att skapa komplexa intelligenta system, Föreläsning 7, i kursen Kognitionsvetenskap).

 

Valet av systemstruktur var enkel, konstruktionen bygger på lagrade fallbeskrivningar. Användaren har redan fått en diagnos men vill nu antingen få den bekräftad, har glömt bort vad den hette eller bli påmind om vad som egentligen sades under läkarbesöket.

 

Allmänna frågor har tagits bort från startmodulen och användaren skall nu mata in namnet på den diagnos denne fått eller välja symtom ur en tabell. Möjligheten att välja ur en symtomtabell finns kvar då det kan underlätta användarens valmöjlighet. Naturligtvis fungerar även en lösning med allmänna frågor, exempelvis kan man ju tänka sig att det kan vara enklare för invandrare som kanske inte alltid uppfattat eller förstått vad barnets läkare sagt men inte vågat be denne upprepa sig.

 

Eftersom de inmatade värdena skall matchas med redan inlagda fall viktas svaren direkt till de respektive modulerna. Uppgifter som huruvida barnet har feber samt hur hög kan istället läggas in i de sjukdomsspecifika modulerna. Viss redundans uppstår då men den borde vara överkomlig. Barn kan ju vara ordentligt sjuka utan att för den skull vara särskilt allmänpåverkade vilket understryker möjligheten och nyttan av allmänna frågeställningar i de olika undermodulerna.

 

3.1 Flödesschema

 

Flödesschema över informationen genom systemet.

 

 

Mage / Tarmåkommor

·        CBS = output

 

Hudåkommor

·        Modul H               

·  CBS = output

 

Förkylningsbesvär

·                    Modul F

·           CBS = output

 

Barnsjukdomar

·        Modul B

·  modul M (Mässling)

·        CBS = output

 

·  modul T (Tredagarsfeber)

·        CBS = output

 

·  modul K (Körtelfeber)

·        CBS = output

 

·  modul V (Vattkoppor)

·        CBS = output

 

·  modul S (Scharlakansfeber)

·        CBS = output

 

·   modul R (Röda Hund)

·        CBS = output

 

3.2 Input

 

Då användaren startar systemet kan denne välja att fylla i ett eller flera symtom eller via en rullgardinsmeny gå direkt till de olika modulerna. Beroende på vilka symtom som angetts viktas svaren som skickas till respektive modul och på samma sätt sker kopplingen mellan diagnosnamn och modul. Startmodulen kommer då att se lite annorlunda ut än tidigare och så även de övriga modulerna som nu fått ett tillskott av de allmänna frågorna. De moduler som skall finnas är som tidigare modul F för förkylningsåkommor, modul B för barnsjukdomar, modul H för hudåkommor, modul M för mage/tarmbesvär samt CBSmodulen som lagrar alla slutresultat.

 

I samtliga moduler utom slutmodulen får användaren även svara på mer sjukdomsspecifika frågor och i varje modul görs sökning genom frågeträdet både på djupet och på bredden. Då tillräckligt många sjukdomsspecifika frågor har besvarats, viktas dessa och skickas till slutmodulen.

 

Modul B för barnsjukdomar är i sin tur uppdelad i sex undermoduler för sjukdomarna Mässling, Röda Hund, Vattkoppor, Körtelfeber; Tredagarsfeber samt Scharlakansfeber.

 

För information om hur de olika modulerna kan fungera, se respektive modul nedan eller gå direkt till önskad modul.

 

3.3 Output

 

I slutmodulen matchas frågorna mot ett antal lagrade diagnoser och en metod som heter showDiagnos() skriver ut resultatet på skärmen. Användaren får ett svar av typen "Ditt barn har diagnosen Mässling!".

 

4. Skärmlayout

 

Dialogen med användaren kan se ut som på bilden nedan. En förklaring till hur systemet är tänkt att användas måste givetvis finnas tillgänglig så fort systemet startas. Användaren kan bland annat välja att avsluta, ångra val eller köra programmet en gång till. Val till de olika modulerna görs som redan nämnts ovan. Inläggning respektive uppdatering görs av den underhållsansvarige och är därför inte synligt för användaren.

Välkommen till Hemdoktorn!

 

 

 

1. Vilket / vilka symtom har barnet?  

·         kräks            

·         diarré            

·         buksmärta    

·         förstoppning 

·         snuva             

·         hosta             

 

2. Vet du vilken diagnos ditt barn har fått?  

(Lägg in nya fallbeskrivningar  Ny diagnos: Tillgänglig för den som sköter och underhåller systemet)

 

 

5. Startmodul

 

I startmodulen ligger givetvis huvudprogrammet. Metoden startSystem() anropas varje gång användare börjar köra programmet samt då denne önskar fortsätta. Slutmodulen har som nämnts tidigare endast system underhållare tillgång till för uppdatering eller revidering.

 

void main()

{

 

 /* Huvudprogrammet */

 

IF ("Starta system") THEN start_module.weight = 1000;

IF ("Lägga in ny diagnos") THEN CBS.weight := 900;

 

WHILE (getNextExpertModule());

 

weight :=0;

 

/*Returnerar och kör den modul med högst vikt. Är vikten 0 returneras NULL och villkoret := FALSE*/

 

ångraVal();

 

/* Metod som anropas då användaren ångrar ett eller flera val. Rensar fälten och går tillbaka ett steg.*/

 

fortsättSystem();

 

/* Metod som anropas då användaren valt att fortsätta.*/

 

exitSytem()

 

{ /*exitSystem() är en metod som avslutar systemet.*/}

 

5.1 Regelbas (Start)

 

systemStart()

 

/*Variablerna kräkning, diarré med mera väljs på skärmen då användaren startat systemet (Se bild ovan). Man kan välja att ange ett, fler eller inget alternativ (AND/OR), gå direkt till en viss modul, avsluta, ångra val med mera.*/

 

private Boolean prickar, diarré, hosta, snuva, klåda, magsmärtor, blåsor, halsont, utslag, fläckar, förstoppning;

private String barnsjukdomar, hudåkommor, förkylningsåkommor, magtarmåkommor, nydiagnos, ångra;

{

 

/*Välj symtom nedan.*/

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ställ_frågor(Frågamage1)=True) THEN kräks:=True;

IF (ställ_frågor(Frågamage 2)=True) THEN diarré:=True;

IF (ställ_frågor(Frågamage 3)=True) THEN buksmärta:=True;

IF (ställ_frågor(Frågamage 4)=True) THEN förstoppning:=True;

IF (kräks, diarré, buksmärta, förstoppning,) THEN ModulM.weight :=900

 

} ELSE {

 

IF (ställ_frågor(Frågaförkylning1)=True) THEN snuva:=True;

IF (ställ_frågor(Frågaförkylning2)=True) THEN hosta:=True;

IF (ställ_frågor(Frågaförkylning3)=True) THEN halsont=:True;

IF (snuva, hosta, halsont) THEN ModulF.weight :=800;

 

} ELSE {

 

IF (ställ_frågor(Frågahud1)=True) THEN klåda := True;

IF (ställ_frågor(Frågahud2)=True) THEN utslag := True;

IF (ställ_frågor(Frågahud3)=True) THEN blåsor := True;

IF (ställ_frågor(Frågahud4)=True) THEN fläckar := True;

IF (ställ_frågor(Frågahud5)=True) THEN prickar := True;

IF (klåda, prickar, blåsor, fläckar, utslag) THEN ModulH.weight :=700;

 

} ELSE {

 

IF NOT (kräks, diarré, förstoppning) AND (ställ_fråga (Frågabarnsjukdom1)=True) THEN barnsjukdom:=True;

IF (barnsjukdom) THEN ModulB.weight :=600;

 

} ELSE DO {

 

/*Välj åkomma för att starta respektive modul M, F, H eller B direkt vid start*/

 

IF (magtarmåkommor) THEN ModulM.weight :=500;

ELSE

IF (hudåkommor) THEN ModulH.weight :=400;

ELSE

IF (förkylningsåkommor) THEN ModulF.weight :=300;

ELSE

IF (barnsjukdomar) THEN ModulB.weight :=200;

ELSE

IF (nydiagnos) THEN ModulCBS.weight :=100;

ELSE

IF (avsluta) THEN GOTO exit_system(); /*Avslutar systemet*/

ELSE

IF (fortsätt) THEN GOTO startSystem(); /*Repeterar hela tiden till användaren väljer att sluta*/

ELSE

IF (ångra) THEN ("Rensa fältet och gå tillbaka ett steg");

weight :=0;

}}

 

5.2 Frågeträd (Start)

 

I frågeträdet skall förutom nedanstående frågor finnas med avsluta program, ångra val med mera. Här har jag endast tagit upp de specifika frågorna.

 

 

·        Frågamage 1: Kräks barnet? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågamage 2: Har barnet diarré? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågamage 3: Har barnet ont i magen? : alternativ (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågaförkylning 3: Har barnet ont i halsen? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågaförkylning 1: Är barnet snuvigt? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågaförkylning 2: Hostar barnet? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågahud 1: Har barnet klåda? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågamage 4: Är barnet förstoppat? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågahud 2: Har barnet utslag? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågahud 3: Har barnet blåsor? : alternativ (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Fågahud 4: Har barnet fläckar? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågahud 5: Har barnet prickar? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

·        Frågabarnsjukdom 1: Har barnet en barnsjukdom? : alternativ: (Välj ett alternativ nedan);

·        Ja (True)

·        Nej (False)

 

6. ModulB (Barnsjukdomar)

 

/* Denna modul är uppdelad i en huvudmodul och sex stycken undermoduler motsvarande olika barnsjukdomar. Dessa är mässling, röda hund, scharlakansfeber, vattkoppor, körtelfeber samt tredagarsfeber. Viss redundans är oundviklig eftersom exempelvis feber ingår som symtom i samtliga diagnoser. Reglerna i de olika modulerna kommer att bestämma vilka frågor som triggas. Dessa kan väljas slumpmässigt och sökningen i frågeträdet kan ske både på djupet och på bredden. Då ett visst antal frågor (eller alla) valts ur trädet görs en sökning i CBSmodulen efter den diagnos som stämmer in på svarssymtomen. Innan sökning i slutmodulen kan ske skall ett tillräckligt antal symtomspecifika frågor ha valts ut för att sökningen skall lyckas.

 

Sökning skall fungera för alla lagrade fallbeskrivningarna, det vill säga användaren får alltid upp ett svarsalternativ då slutmodulen innehåller redan lagrad kunskap som fallbeskrivningar. De enskilda modulerna innehåller enbart de symtom som gäller för respektive sjukdom. Frågorna kan vara specade och då väljer användaren ett av två alternativ, Ja (True) eller Nej (False), vid skalsvar väljs svar ur ett intervall och detta sker på samma sätt i alla moduler. Givetvis kan man tänka sig att lägga alla allmänna frågor direkt i denna modul innan man går vidare, på det sättet undviker man en del av redundansen.*/

 

startBarnsjukdomar()

{

private String mässling, vattkoppor, scharlakansfeber, röda_hund, körtelfeber, tredagarsfeber;

 

6.1 Start av Modul B

{

IF (mässling) THEN moduleM.weight := 600;

} ELSE /* Starta modul M */

IF (scharlakansfeber) THEN moduleS.weight := 500; /* Starta modul S */

} ELSE

IF (vattkoppor) THEN moduleV.weight := 400; /* Starta modul V */

} ELSE

IF (röda_hund) THEN moduleR.weight := 300; /* Starta modul R */

} ELSE

IF (körtelfeber) THEN moduleK.weight := 200; /* Starta modul K */

} ELSE

IF (tredagarsfeber) THEN moduleT.weight := 100; /* Starta modul T */

}

weight := 0;

 

6.2 Arbetsminne

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Variabler:

 

 

6.3 Modul M (Mässling)

 

6.3.1 Regelbas

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ålder) THEN ställ_fråga (Fråga1);

IF (feber) THEN ställ_fråga (Fråga2);

IF (Fråga2) = True THEN ställ_fråga (Fråga3);

IF (Fråga3) AND/OR (Fråga2)=True THEN ställ_fråga (Fråga4);

IF (allmänpåverkan) THEN ställ_fråga (Fråga 5);

IF NOT (allmänpåverkan) THEN ställ_fråga (Fråga 6);

IF (smärttillstånd) AND (ögon) THEN ställ_fråga (Fråga 13);

IF (ögon) AND (irriterad) THEN ställ_fråga (Fråga 14);

IF (ögon) AND (röda) THEN ställ_fråga (Fråga 15);

IF (ögon) AND (ljuskänslig) THEN ställ_fråga (Fråga 16);

IF (rethosta) THEN ställ_fråga (Fråga 12);

IF (snuva) THEN ställ_fråga (Fråga 11);

IF (prickar) AND (insidan av kind) AND (vita) THEN ställ_fråga (Fråga 10);

IF (fläckar) AND (små) AND (röda) AND (upphöjda) THEN ställ_fråga (Fråga 9);

IF (fläckar) AND (börjat) AND (små) AND (upphöjda) AND (bakom öron) THEN ställ_fråga (Fråga 7);

IF (fläckar) AND (spridning) AND (ansikte) THEN ställ_fråga (Fråga 8);

 

6.3.2 Fallbeskrivning

 

/*Frågeträdet gås igenom. Efter fråga 15 görs ett anrop till modulen med fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills inga diagnoser finns kvar*/

 

mässling:=False;

m:=0;

IF ((Fråga2)=True THEN (m :=m+1) AND

IF (Fråga 3)=True THEN (m :=m+2) AND

IF (Fråga 5)=True THEN (m := m+2) AND

IF (Fråga 7)=True THEN (m:=m+1) AND

IF (Fråga 8)=True THEN (m:=m+1) AND

IF (Fråga 9)=True THEN (m:=m+1) AND

IF (Fråga 10)=True THEN (m:=m+1) AND

IF (Fråga14) =True THEN (m:=m+1)

IF (Fråga 15))=True THEN mässling:=True;

IF (mässling) THEN moduleCBS.weight:=1000;

 

6.3.3 Frågeträd

 

 

·        0-3 månader

·        3-6 månader

·        6-12 månader

·        1-2 år

·        2-3år

·        3-6 år

·        6-10 år

·        10-13 år

·        13-16 år

 

·        Fråga 2: Har barnet feber? : alternativ: (Välj ett alternativ nedan);

·        Ja (T)

·        Nej (F)

 

·        >= 38.5 grader (T)

·        < 38.5 grader (F)

 

·        < 1 dygn

·        1 dygn

·        2-3 dygn

·        3-5 dygn

·        5 dygn

 

·        Fråga 5: Verkar barnet allmänpåverkat? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 6: Verkar barnet opåverkat trots feber? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 7: Har barnet små röda upphöjda fläckar? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 8: Började dessa bakom öronen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 9: Har dessa spridit sig till ansiktet, och/eller bål och/eller armar respektive ben? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 10: Har barnet vita prickar på kindernas insida? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 11: Är barnet snuvigt? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 12: Har barnet rethosta? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 13: Har barnet ont i ögonen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 14: Är barnet irriterat i ögonen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 15: Har barnet röda ögonvitor? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 16: Är barnet extra ljuskänsligt? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

6.3.4 Arbetsminne

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Exempel på variabler:

 

 

6.4 Modul S (Scharlakansfeber)

 

6.4.1 Regelbas

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ålder) THEN ställ_fråga (Fråga1);

IF (feber) THEN ställ_fråga (Fråga2);

IF (Fråga2) = True THEN ställ_fråga (Fråga3);

IF (Fråga3) AND/OR (Fråga2) =True THEN ställ_fråga (Fråga4);

IF (feber) AND NOT (allmänpåverkad) THEN ställ_fråga (Fråga6)

IF (allmänpåverkan) THEN ställ_fråga (Fråga 5);

IF (utslag) AND (finprickiga) AND (sammanflytande) THEN ställ_fråga (Fråga 7);

IF (utslag) AND (ansikte) THEN ställ_fråga (Fråga 9);

IF (utslag) AND (börjat) AND ((hals) OR (rygg) OR (bakom öron)) THEN ställ_fråga (Fråga 10);

IF (utslag) AND (spridning) AND (snabb) THEN ställ_fråga (Fråga 11);

IF (utslag) AND (hudveck) THEN ställ_fråga (Fråga 12);

IF (fläckar) AND (lätt upphöjda) THEN ställ_fråga(Fråga 8);

IF (hud) AND (torr) AND (fnasig) THEN ställ_fråga (Fråga 13);

IF (hud) AND (blek) AND (runt mun) THEN ställ_fråga (Fråga 15);

IF (ansiktsrodnad) THEN ställ_fråga (Fråga 14);

IF (smärttillstånd) AND (mun) THEN ställ_fråga (Fråga 16);

IF (smärttillstånd) AND (hals) THEN ställ_fråga (Fråga 21);

IF (tunga) AND (beläggning) THEN ställ_fråga (Fråga 17);

IF (tunga) AND ((beläggning) AND (börjat lossna)) THEN ställ_fråga (Fråga 18);

IF (tunga) AND (starkt röd) THEN ställ_fråga (Fråga 19);

IF (tunga) AND (starkt röd) AND (bleka fält) THEN ställ_fråga (Fråga 20);

 

6.4.2 Fallbeskrivning

 

/*Frågeträdet gås igenom. Efter fråga 19 görs ett anrop till modulen med fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills inga diagnoser finns kvar*/

 

scharlakansfeber:=False;

sf:=0;

IF ((Fråga2)=True THEN (sf :=sf+1) AND

IF (Fråga 3)=True THEN (sf :=sf+2) AND

IF (Fråga 5)=True THEN (sf := sf+2) AND

IF (Fråga 7)=True THEN (sf:=sf+1) AND

IF (Fråga 8)=True THEN (sf:=sf+1) AND

IF (Fråga 9)=True THEN (sf:=sf+1) AND

IF (Fråga 10)=True THEN (sf:=sf+1) AND

IF (Fråga 11)=True THEN (sf:=sf+1) AND

IF ((Fråga12)=True THEN (sf :=sf+1) AND

IF (Fråga 13)=True THEN (sf :=sf+3) AND

IF (Fråga 16)=True THEN (sf := sf+3) AND

IF (Fråga 19))=True THEN scharlakansfeber:=True;

IF (scharlakansfeber) THEN moduleCBS.weight:=1000;

 

6.4.3 Frågeträd

 

 

 

·        0-3 månader

·        3-6 månader

·        6-12 månader

·        1-2 år

·        2-3år

·        3-6 år

·        6-10 år

·        10-13 år

·        13-16 år

 

·        Fråga 2: Har barnet feber? : alternativ: (Välj ett alternativ nedan);

·        Ja (T)

·        Nej (F)

 

 

·        >= 38.5 (T)

·        < 38.5 grader (F)

 

·        < 1 dygn

·        1 dygn

·        2-3 dygn

·        3-5 dygn

·        5 dygn

 

·        Fråga 5: Verkar barnet allmänpåverkat? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 6: Verkar barnet opåverkat trots feber? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 7: Har barnet finprickiga, sammanflytande utslag? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 8: Har utslagen inslag av lätt upphöjda fläckar? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 9: Har barnet utslag i ansiktet? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 10: Började dessa på halsen, ryggen eller bakom öronen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 11: Har utslagen spridit sig snabbt? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 12: Har barnet dessa utslag huvudsakligen i hudveck? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 13: Är huden torr och fnasig? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 14: Har barnet en stark rodnad i ansiktet? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 15: Är barnet blekt om munnen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 16: Har barnet ont i munnen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 17: Har barnet en vit beläggning på tungan? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 18: Har beläggningen börjat lossna från tungan? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 19: Är barnets tunga starkt rödfärgad? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 20: Har barnet bleka fält på tungan ("smultrontunga")? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 21: Har barnet ont i halsen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

6.4.4 Arbetsminne

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Exempel på variabler:

 

 

6.5 Modul V (Vattkoppor)

 

6.5.1 Regelbas

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ålder) THEN ställ_fråga (Fråga1);

IF (feber) THEN ställ_fråga (Fråga 2);

IF (Fråga2) = True THEN ställ_fråga (Fråga3);

IF ((Fråga2) AND/OR (Fråga3)) =True THEN ställ_fråga (Fråga 4);

IF (allmänpåverkan) THEN ställ_fråga (Fråga5);

IF (feber) AND NOT (allmänpåverkan) THEN ställ_fråga (Fråga 6);

IF (smärttillstånd) AND (huvud) THEN ställ_fråga (Fråga 13);

IF (utslag) AND (blåsformiga) THEN ställ_fråga (Fråga 7);

IF (utslag) AND (klåda) THEN ställ_fråga (Fråga 8);

IF (utslag) AND (delvis fallit av) AND (lämnat skorpor) THEN ställ_fråga (Fråga 9);

IF (utslag) AND (börjat) AND (ansikte) THEN ställ_fråga (Fråga 10);

IF (utslag) AND (spridning) AND ((hårbotten) AND (armar) AND (ben)) THEN ställ_fråga (Fråga 11);

IF (utslag) AND (spridning) AND ((munslemhinnan) AND (könsorganen)) THEN ställ_fråga (Fråga 12);

 

6.5.2 Fallbeskrivning

 

/*Frågeträdet gås igenom. Efter fråga 9 görs ett anrop till modulen med fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills inga diagnoser finns kvar*/

 

vattkoppor:=False;

v:=0;

IF ((Fråga2)=True THEN (v :=v+1) AND

IF (Fråga 3)=True THEN (v :=v+3) AND

IF (Fråga 6)=True THEN (v :=v+1) AND

IF (Fråga 7)=True THEN (v:=v+1) AND

IF (Fråga 8)=True THEN (v:=v+1) AND

IF (Fråga 9))=True vattkoppor:=True;

IF (vattkoppor) THEN moduleCBS.weight:=1000;

 

6.5.3 Frågeträd

 

 

·        0-3 månader

·        3-6 månader

·        6-12 månader

·        1-2 år

·        2-3år

·        3-6 år

·        6-10 år

·        10-13 år

·        13-16 år

 

·        Fråga 2: Har barnet feber? : alternativ: (Välj ett alternativ nedan);

·        Ja (T)

·        Nej (F)

 

·         Fråga 3: Om ja, hur hög är temperaturen? : skal_svar (Välj ett alternativ ur intervallet);

·        >= 38.5 grader (T)

·        < 38.5 grader (F)

 

·        < 1 dygn

·        1 dygn

·        2-3 dygn

·        3-5 dygn

·        5 dygn

 

·        Fråga 5: Verkar barnet allmänpåverkat? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 6: Verkar barnet opåverkat trots feber? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 7: Har barnet blåsformiga utslag? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 8: Kliar de? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 9: Har utslagen delvis fallit av och lämnat skorpor? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 10: Började utslagen i ansiktet? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 11: Har utslagen spridit sig till hårbotten, armar och ben? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 12: Har utslagen spridit sig till munnen och / eller könsorganen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 13: Har barnet huvudvärk? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

6.5.4 Arbetsminne modul V

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Exempel på variabler:

 

 

6.6 Modul R (Röda Hund)

 

6.6.1 Regelbas

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ålder) THEN ställ_fråga (Fråga1);

IF (feber) THEN ställ_fråga (Fråga 2);

IF (Fråga 2)=True THEN ställ_fråga (Fråga 3);

IF ((Fråga2) AND/OR (Fråga3))=True THEN ställ_fråga (Fråga4);

IF (allmänpåverkan) THEN ställ_fråga (Fråga 5);

IF (smärttillstånd) AND (hals) THEN ställ_fråga (Fråga 7);

IF (smärttillstånd) AND (nacke) THEN ställ_fråga (Fråga 8);

IF NOT (allmänpåverkan) THEN ställ_fråga (Fråga 6);

IF (smärttillstånd) AND ((led) OR (leder)) THEN ställ_fråga (Fråga 9);

IF (smärttillstånd) AND (huvud) THEN ställ_fråga (Fråga 10);

IF ((utslag) AND (blekröda)) AND ((fläckar) AND (lätt upphöjda)) THEN ställ_fråga (Fråga 11);

IF (utslag) AND (börjat) AND (ansikte) THEN ställ_fråga (Fråga 12);

 

6.6.2 Fallbeskrivning

 

/*Frågeträdet gås igenom. Efter fråga 11 görs ett anrop till modulen med fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills inga diagnoser finns kvar*/

 

röda_hund:=False;

r:=0;

IF ((Fråga2)=True THEN (r :=r+1) AND

IF (Fråga 3)=True THEN (r:=r+21) AND

IF (Fråga 5)=True THEN (r :=r+2) AND

IF (Fråga 7)=True THEN (r:=r+1) AND

IF (Fråga 8)=True THEN (r:=r+1) AND

IF (Fråga 9)=True THEN (r:=r+2) AND

IF (Fråga 11)=True THEN röda_hund:=True;

IF (röda_hund) THEN moduleCBS.weight:=1000;

 

6.6.3 Frågeträd

 

 

·        0-3 månader

·        3-6 månader

·        6-12 månader

·        1-2 år

·        2-3år

·        3-6 år

·        6-10 år

·        10-13 år

·        13-16 år

 

·        Fråga 2: Har barnet feber? : alternativ: (Välj ett alternativ nedan);

·        Ja (T)

·        Nej (F)

 

·        >= 38.5 grader (T)

·        < 38.5 grader (F)

 

·        < 1 dygn

·        1 dygn

·        2-3 dygn

·        3-5 dygn

·        5 dygn

 

·        Fråga 5: Verkar barnet allmänpåverkat? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 6: Verkar barnet opåverkat trots feber? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 7: Har barnet ont i halsen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 8: Har barnet ont i nacken? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 9: Har barnet ont i en eller flera leder? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 10: Har barnet huvudvärk? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 11: Har barnet blekröda utslag, med inslag av lätt upphöjda fläckar? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 12: Började utslagen i ansiktet? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

6.6.4 Arbetsminne modul R

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Exempel på variabler:

 

 

6.7 Modul K (Körtelfeber)

 

6.7.1 Regelbas

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ålder) THEN ställ_fråga (Fråga1);

IF (feber) THEN ställ_fråga (Fråga 2);

IF (Fråga 2)=True THEN ställ_fråga (Fråga 3);

IF (Fråga2) AND/OR (Fråga3) = True THEN ställ_fråga (Fråga 4);

IF (allmänpåverkan) AND (trött) THEN ställ_fråga (Fråga 7);

IF (allmänpåverkan) THEN ställ_fråga (Fråga 5);

IF NOT (allmänpåverkan) (trött) THEN ställ_fråga (Fråga 6);

IF (smärttillstånd) AND (hals) THEN ställ_fråga (Fråga 9);

IF (smärttillstånd) AND (huvud) THEN ställ_fråga (Fråga 8);

IF (smärttillstånd) AND (halsont) AND (förstorade mandlar) AND (vit beläggning) THEN ställ_fråga (Fråga 10);

IF (smärttillstånd) AND (muskler) THEN ställ_fråga (Fråga 12);

IF (snuva) THEN ställ_fråga (Fråga 13);

IF (lymfkörtlar) AND (svullna) AND ((ljumskar) OR (hals) OR armhålor)) THEN ställ_fråga(Fråga 11);

IF ((utslag) AND (blekröda)) AND ((fläckar) AND ((fläckar) AND (lätt upphöjda)) THEN ställ_fråga (Fråga 15);

IF (fläckar) AND (små) AND (röda) AND (upphöjda) THEN ställ_fråga (Fråga 14);

 

6.7.2 Fallbeskrivning

 

/*Frågeträdet gås igenom. Efter fråga 15 görs ett anrop till modulen med fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills inga diagnoser finns kvar*/

 

körtelfeber:=False;

k:=0;

IF ((Fråga2)=True THEN (k :=k+1) AND

IF (Fråga 3)=True THEN (k :=k+2) AND

IF (Fråga 5)=True THEN (k := k+3) AND

IF (Fråga 8)=True THEN (k:=k+2) AND

IF (Fråga 10)=True THEN (k:=k+1) AND

IF (Fråga 11)=True THEN (k:=k+3) AND

IF (Fråga 14)=True THEN (k:=k+1) OR

IF (Fråga 15))=True THEN körtelfeber:=True;

IF (körtelfeber) THEN moduleCBS.weight:=1000;

 

6.7.3 Frågeträd

 

 

·        0-3 månader

·        3-6 månader

·        6-12 månader

·        1-2 år

·        2-3år

·        3-6 år

·        6-10 år

·        10-13 år

·        13-16 år

 

·        Fråga 2: Har barnet feber? : alternativ: (Välj ett alternativ nedan);

·        Ja (T)

·        Nej (F)

 

·        >= 38.5 grader (T)

·        < 38.5 grader (F)

 

·        < 1 dygn

·        1 dygn

·        2-3 dygn

·        3-5 dygn

·        5 dygn

 

·        Fråga 5: Verkar barnet allmänpåverkat? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 6: Verkar barnet opåverkat trots feber? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 7: Verkar barnet onormalt trött? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 8: Har barnet huvudvärk? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 9: Har barnet ont i halsen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 10: Har barnet förstorade halsmandlar med vita beläggningar? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 11: Har barnet svullna lymfkörtlar i armhålorna, ljumskar eller på halsen? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 12: Har barnet muskelsmärtor? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 13: Är barnet snuvigt? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 14: Har barnet små röda upphöjda fläckar (Se mässling)? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 15: Är dessa blekröda, med inslag av lätt upphöjda fläckar (Se röda hund)? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

6.7.4 Arbetsminne modul K

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Exempel på variabler:

 

 

6.8 Modul T (Tredagarsfeber)

 

6.8.1 Regelbas

 

IF (first_time) THEN ställ_fråga (initiering);

IF (ålder) THEN ställ_fråga (Fråga1);

IF (feber) THEN ställ_fråga (Fråga 2);

IF (Fråga 2)=True THEN ställ_fråga (Fråga 3);

IF (Fråga2) AND/OR (Fråga3) = True THEN ställ_fråga (Fråga4);

IF (allmänpåverkad) THEN ställ_fråga (Fråga5);

IF (feber) AND NOT (allmänpåverkan) THEN ställ_fråga (Fråga 6);

IF (utslag) AND ((småflammiga) AND (blekröda)) THEN ställ_fråga (Fråga 7);

IF (utslag) AND ((bål) AND (överarmar)) THEN ställ_fråga (Fråga 8);

 

6.8.2 Fallbeskrivning

 

/*Frågeträdet gås igenom. Efter fråga 8 görs ett anrop till modulen med fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills inga diagnoser finns kvar*/

 

tredagarsfeber:=False;

t:=0;

IF ((Fråga2)=True THEN (t :=t+1) AND

IF (Fråga 3)=True THEN (t:=t+3) AND

IF (Fråga 6)=True THEN (t :=t+1) AND

IF (Fråga 7)=True THEN (t:=t+1) AND

IF (Fråga 8))=True THEN tredagarsfeber:=True;

IF (tredagarsfeber) THEN moduleCBS.weight:=1000;

 

6.8.3 Frågeträd

 

 

·        0-3 månader

·        3-6 månader

·        6-12 månader

·        1-2 år

·        2-3år

·        3-6 år

·        6-10 år

·        10-13 år

·        13-16 år

 

·        Fråga 2: Har barnet feber? : alternativ: (Välj ett alternativ nedan);

·        Ja (T)

·        Nej (F)

 

·        >= 38.5 grader (T)

·        < 38.5 grader (F)

 

·        < 1 dygn

·        1 dygn

·        2-3 dygn

·        3-5 dygn

·        5 dygn

 

·        Fråga 5: Verkar barnet allmänpåverkat? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 6: Verkar barnet opåverkat trots feber? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 7: Har barnet blekröda och småflammiga utslag? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

·        Fråga 8: Sitter de huvudsakligen på bål samt överarmar? : alternativ: (…);

·        Ja (T)

·        Nej (F)

 

6.8.4 Arbetsminne

 

Variablerna I arbetsminnet lagras i en hashtabell samt matchas med liknande variabler i modulerna. En formel räknar ut ett specifikt värde som skickas till hashtabellen.

 

Exempel på variabler:

 

 

7. Modul CBS

 

/* I slutmodulen finns som nämnts tidigare alla de fallbeskrivningar som matchar de olika symtomen. Här kan information lagras i exempelvis en array, vilket underlättar sökning som då kan ske binärt. Detta håller nere söktiden samt kostnaden för varje sökning. Variabler i modulernas arbetsminne matchas mot motsvarande variabler i fallbeskrivningarna. Variablerna friställs då de olika metoderna körts färdigt.

 

 showDiagnos()

 

{ /*showDiagnos är en metod som går igenom slutmodulen med alla fallbeskrivningar och matchar dessa med svarsalternativen i de olika symtommodulerna. Skriver ut namnet på den diagnos som satts till TRUE.*/ }

 

7.1 Fallbeskrivningar

 

Innehåller endast ett exempelfall per sjukdom.

 

·        Fall 1

·        Pojke 8 månader

·        opåverkat trots feber

·        hög feber

·        blekröda, flammiga utslag

·        sitter i huvudsak på bålen

 

showDiagnos(Tredagarsfeber);

 

·        flicka 15 år

·        feber

·        allmänpåverkan

·        snuva

·        muskelvärk

·        huvudvärk

·        förstorade halsmandlar med vita beläggningar

·        svullna lymfkörtlar i armhålor och ljumskar

·        blekröda utslag med inslag av lätt upphöjda fläckar (röda hundliknande)

 

showDiagnos(Körtelfeber);

 

·        pojke 5 år

·        låg allmänpåverkan

·        hög feber

·        blåsformiga utslag som kliar

·        dessa har delvis fallit av och lämnat skorpor

 

showDiagnos(Vattkoppor);

 

·        flicka 10 år

·        allmänpåverkad

·        halsont

·        nackont

·        hög feber

·        ont i en eller flera leder

·        blekröda utslag med inslag av lätt upphöjda fläckar

·        början i ansikte

 

showDiagnos(Röda Hund);

 

·        pojke 8 år

·        hög feber

·        allmänpåverkad

·        snuva

·        ont i ögon

·        irriterad i ögonen

·        röda ögonvitor

·        små röda upphöjda fläckar

·        vita prickar på kindernas insida

 

showDiagnos(Mässling);

 

 

·        flicka 9 år

·        feber

·        finprickiga, sammanflytande utslag

·        rodnad i ansikte

·        utslag i hudveck

·        torr och fnasig hud

·        utslagen börjat på rygg samt hals

·        utslagen spridits snabbt

·        vit beläggning på tunga

·        smultrontunga

 

showDiagnos(Scharlakansfeber);

 

8. Källa
 

Russel, Stuart and Norvig, Peter, Artificial intelligence, a modern approach, Prentice-Hall, New Jersey, 1995.

 

Darlington, Keith, The essence of expert systems, Prentice-Hall and Pearson Education Limited 2000, http://www.pearsoneduc.com