Dr.Godfried-Willem RAES
Definitie: Een expertsysteem noemt men een komputerprogramma dat op grond van vergaarde kennis -ontleend aan een externe menselijke expert- in staat is intelligente beslissingen te nemen met betrekking tot vraagstukken behorende tot het kennisdomein. Bovendien moet een dergelijk expertsysteem in staat zijn, degewenst, aan de gebruiker een argumentatie te geven die duidelijk maakt op grond waarvan een bepaalde beslissing werd genomen.
Binnen het studiegebied zijn er veel auteurs die bovendien als voorwaarde zullen stellen dat het programma -het expert-systeem- in staat moet zijn tot 'leren'. Hiermee betreden we het gebied van wat men met een door eindeloos misbruik nogal uitgeholde term toch zo graag 'artificiele intelligentie' noemt.
De eis tot leren wordt evenwel om verschillende redenen niet door alle auteurs gesteld. Een eenvoudige reden daarvoor is dat een systeem dat effektief in de loop van zijn gebruik kennis zou vergaren, ook in de geldigheid van die opgebouwde kennis volledig afhankelijk wordt van zijn gebruikers. Hierdoor zou het op een bepaald moment zelfs zichzelf volkomen overbodig kunnen maken en zou het allerhande foutieve gegevens kunnen bevatten door een gebrek aan kontrole van de ingebrachte kennis. Zo mag een expert systeem niet uitsluitend gevoed worden door zijn uiteindelijke gebruikers, want dan kan het nooit meer dan hun (beperkte) kennis bevatten. Het is dan redundant en volkomen onnuttig. De kwaliteit en het nut van een expert systeem staat of valt immers -althans in niet artistieke toepassingen- met de kwaliteit van de kennis van de initiele expert. Wanneer een klassiek expert systeem wordt geprogrammeerd met een mogelijkheid tot doorlopend bijleren dan is het van het grootste belang ervoor te waken dat dat leerproces tot verbetering aanleiding geeft. Dit kan alleen dan geimplementeerd worden wanneer de expert zelf wordt ingebouwd in de feedback architektuur van het geimplementeerde expert systeem.
Gezien als komputerprogramma is een expert-systeem een 'knowledge based system'. Een programma m.a.w. dat problemen gesteld door de gebruiker via het 'user-interface' tracht op te lossen door op systematische wijze een betrouwbare data-base te raadplegen. De gebruikelijke gang van zaken is dat de gebruiker aan de komputer een vraag stelt, waarbij de komputer dan op grond van de gestelde vraag, extra informatie inwint bij de gebruiker, tot hij over voldoende input-gegevens beschikt om op grond van zijn kennis een voldoende betrouwbaar antwoord te geven. Een typisch en veel gebruikt voorbeeld wordt gevormd door de expert-systemen die gebruikt worden voor het stellen van diagnoses in de geneeskunde.
Er is echter nog iets meer nodig dan dat, immers een steekkaartenbak met vragen en antwoorden is nog niet zomaar een expert systeem te noemen. Het expert systeem moet immers bovendien antwoorden kunnen geven op vragen die niet a priori van een antwoord in het systeem werden voorzien. Daartoe moet het dan ook in staat zijn op basis van regels verbanden te leggen tussen kenniselementen uit de database. De aard van de kennis die in een expert-systeem geimplementeerd dient te worden is dan ook samen te vatten als:
1. feiten (facts)
2. regels (rules)
De feiten worden ofwel binair verdeeld in waar of onwaar, of nog, gerangschikt op een schaal van waarschijnlijk tot uiterst onwaarschijnlijk tot onwaar. De regels in een expert systeem zijn bijna steeds te reduceren tot de elementaire struktuur:
IF (feit of regel) R waarschijnlijkheid
THEN (feit of regel) R waarschijnlijkheid
ELSE (feit of regel) R waarschijnlijkheid
ENDIF
In de muziek is vooral het kontrapunt en de harmonieleer een gebied dat zich uitstekend leent voor een implementatie als expert systeem. De 'feiten' zijn hier dan de geldig gevormde samenklanken (akkoorden) en de regels de geldig gevormde verbindingen en overgangen tussen akkoorden.
Een expert-systeem voor het schrijven van koralen is mijn eigen 'Koraal' programma, dat evenwel -door gebrek aan medewerking van een werkelijke expert terzake- niet uitgaat van een 'geldig' kennisbestand noch van een 'geldige' verzameling regels gezien tegenover wat als 'klassieke' harmonie wordt beschouwd. Het is evenwel een volwaardig en erg uitgebreid expert systeem dat -en dit lijkt wel typisch voor elke artistieke toepassing ervan- uitgaat van een louter persoonlijk kennisarsenaal en van louter hypothetisch geformuleerde regels. Precies daarin schuilt de mogelijke originaliteit van de resultaten die ermee kunnen worden bereikt.
Een klassiek diskussieonderwerp met betrekking tot artificiele intelligentie en expert systemen in het bijzonder, is de vraag of een expert systeem al dan niet tot nieuwe kennis kan komen. Het antwoord op deze vraag hangt uiteraard nogal af van hoe men het begrip 'nieuw' wenst op te vatten. Immers het expert systeem voegt zelf geen nieuwe feiten toe aan de database waarop het is gebouwd. Nieuwe feiten en regels worden hooguit extern ingevoerd. Het is echter in staat om op een veel vollediger wijze veel meer relaties tussen feiten op hun mogelijkheid of waarheid te onderzoeken dan mensen dat kunnen in eenzelfde tijdsbestek. Hierdoor kan het systeem relaties tussen feiten 'ontdekken' die noch de expert noch de gebruiker hadden kunnen voorzien.
Voor de praktische programmering van expert systemen worden bijna uitsluitend zgn. hogere programmeertalen gebruikt: C, Prolog, Lisp, evenals talen die door hun konceptie bijzonder geschikt zijn om om te gaan met omvangrijke gegevensbestanden: dBase3+, Foxbase, Clipper, en... uiteraard Basic, een taal waarvoor library-extensions beschikbaar zijn waarmee hele grote databases relationeel kunnen worden verwerkt. (De ISAM extentie in QBX/BC7 versie V7.1,1991, van Microsoft, of recenter de Visual Basic met dbase en office automation extentions uit 1997).
Hoewel iedereen zonder veel kennis van programmeren een eenvoudig expert- systeempje in elkaar kan zetten, is voor een meer geavanceerd systeem enig inzicht in waarschijnlijkheidsrekening essentieel.
Zekerheid
Wanneer we een beslissingssysteem opzetten dat alleen de logische toestanden waar/onwaar kent dan hebben we een systeem dat voor elke input een eenduidig bepaalde output oplevert. De zekerheid is absoluut.
Een heel eenvoudig expert-systeem dat alleen met zekerheden werkt kan er bijvoorbeeld uitzien alsvolgt:
DECLARE FUNCTION Min%()
DECLARE SUB Uit (byte%)
DO
'stap1: -Lees de numerieke waarde van een noot vanuit de midi-in poort
Noot%= Min%
'stap2: afhankelijk van de noot die gespeeld wordt, wordt daar een tweede noot 'aan toegevoegd op grond van een konsultatie van de 'expert':
SELECT CASE Noot% MOD 12
CASE 0, 3, 7
Noot2%= ((Noot% \ 12) * 12) + (Noot% MOD 12) + 4
CASE 4
Noot2%= ((Noot% \ 12) * 12) + (Noot% MOD 12) + 3
CASE 5, 9
Noot2%= ((Noot% \ 12) * 12) + (Noot% MOD 12) + 7
CASE 11
Noot2%= ((Noot% \ 12) * 12) + (Noot% MOD 12) - 4
CASE ELSE
Noot2%= 0
END SELECT
'stap3: besluit en toepassing daarvan:
IF Noot2% THEN
Uit (144)
Uit (Noot2%)
Uit (100)
END IF
LOOP UNTIL INKEY$ <> ""
Het zal duidelijk zijn dat dit zeer elementair systeem voor alle waarden van Noot% een zeker besluit zal nemen.
N.B.: 1. de hardware specifieke procedures Min% en Uit worden elders besproken en bekommentarieerd.
2. Zoek zelf in de hier gegeven kode de 'bugs'.
Meestal is het niet mogelijk kennis zo toe te passen dat antwoorden die op grond ervan worden gegeven, een dergelijke absolute waarheidswaarde kunnen of mogen hebben. In plaats van waar en vals, kunnen we daarbij een numeriek gebied omschrijven tussen 0 en 1 waarbij de grootte van de toegekende waarde een maat is voor de graad van waarschijnlijkheid van een bepaald antwoord.
Enig inzicht in toeval -zowat de antipode van zekerheid- is daarbij noodzakelijk.
Een toevallig verschijnsel noemt men een verschijnsel waarvan de frekwentie van voorkomen gelijk is aan die van andere verschijnselen uit een beschouwde verzameling. Merk op dat dit een louter rekenkundige definitie is die op zich niets te maken heeft met de common sense betekenis die er vaak wordt aan gehecht.
Wanneer een expert systeem op een gestelde vraag zou reageren door het kiezen van een willekeurig antwoord uit een database, dan hebben we te maken met een onzinnig expertsysteem. De waarheidswaarde van de geleverde antwoorden, en dus de betrouwbaarheid zal minimaal zijn. Merk op dat de antwoorden niet noodzakelijk foutief hoeven te zijn! Hadden we immers een systeem dat steeds het foutieve antwoord gaf, dan zouden we toch een heel betrouwbaar expert systeem hebben. We zouden er immers kennis uit kunnen putten over beslissingen die we zeker niet moeten nemen. Wanneer de output van een expert systeem echt toevallig is, valt er werkelijk helemaal niets mee aan te vangen.
Voorbeelden:
1.-De basic funktie RND(1) retourneert een willekeurig getal begrepen tussen 0 en 1. Het diskontinue trajekt 0 tot 1 is de verzameling verschijnselen. De verschijnselen zijn hier het geselekteerd worden van bepaalde single precision getallen.
2.-Witte ruis in de elektronika wordt beschouwd als een som van alle frekwenties binnen een bepaald gebied: het audiogebied bvb.
3.- Roulette, dobbelstenen, kaartspelen, Lotto en loterij, de I Ching, zijn allemaal toevalsgeneratoren. Het resultaat is principieel onvoorspelbaar.
Organisatie binnen het toeval
Afgezien van sommige artistieke, irrationele (gokken) en technische toepassingen, hebben we zelden iets aan zo'n generator van zuiver toevallige getallen of verschijnselen. Vaak zullen we het wenselijk vinden het gebied of de distributie van die getallen over dat gebied wat te beperken of te struktureren.
Het bepalen/beperken van het gebied kan binnen Basic bvb. alsvolgt:
Benedengrens=48 , bovengrens 58:
getal% = 48 + (RND(1) * 10)
Het verstoren van de distributie van de toevalligheid kan bvb. door de randomfunktie te exponentieren:
RND(1) ^ 2 levert ons meer waarden op in het trajekt 0-0.5 dan in het trajekt 0.5 - 1.
Voorbeeld van een toevalsgenerator die getallen produceert die duidelijk rond
een gegeven centrale waarde liggen:
Q! = 3.5
getal% = 60 + ((RND(1)- 0.5!) ^ Q!)
Om de output van dergelijke toevalsgeneratoren te kontroleren, kunnen we best een statistiek opstellen. Daarbij tellen we het voorkomen van elke mogelijke outputwaarde van de generator en dit voor een zo groot mogelijk aantal gegenereerde waarden.
Voorbeeld van een statistische telprocedure:
Bovengrens%= 400
DIM Stat&(0 TO Bovengrens%)
j& = 0
DO
'Generator:
getal%= (RND(1) ^ 1/2) * Bovengrens%
FOR i% = 0 TO Bovengrens%
IF getal% = i% THEN Stat&(i%) = Stat&(i%) + 1
NEXT i%
j& = J& + 1
LOOP UNTIL j& > 100000
De 'statistiek' staat nu in het array Stat&(). Dit kunnen we nu op het scherm zichtbaar maken. Goede voorbeelden van procedures waarmee zoiets kan gebeuren zijn terug te vinden in de kode voor <A Book of Moves>, meer bepaald in de programmamodule Bomstat.bas, de procedure drawstat. De zo bereikte verdelingskurves noemt men histogrammen.
[Filedate:931023]
Terug naar de inhoudstafel
Naar stochastiek
Naar homepage Dr.Godfried-Willem RAES