Sääntöperustaiset ohjelmat


Tekoälyohjelmoinnin eräs strategia on toteuttaa ohjelma sääntöjen kokoelmana, jotka kattavat kaikki mahdolliset ohjelman saamat syötteet. Säännöt muodostuvat vasemmasta puolesta ja oikeasta puolesta. Ohjelmaa suoritettaessa syötettä verrataan säännön vasempaan puoleen ja vertailun täsmätessä suoritetaan säännön oikea puoli. Säännöt suorittuessaan voivat tuottaa ohjelmalle sisäisiä syötteitä, joita edelleen sovitetaan sääntöihin. Kuvassa 4 sisäisesti generoituvia sääntöjä edustavat suoritusosassa pienillä kirjaimilla kuvatut merkkijonot. Yksinkertaisimmillaan säännöt ovat muotoa IF - THEN - END, monimutkaisimmillaan voidaan puhua hahmontunnistuksesta tai mallinsovituksesta.

kuva 4: Säännöstö ja sitä lukeva prosessi


Ohjelman muodostava säännöstö koostuu käsiteltävistä sääntö-suoritus pareista (kuva 4), mahdolliset sääntöosat voidaan kuvata ne määrittävän aakkoston ja kieliopin avulla. Aakkoston lisäksi usein käytetään erityistä hälläväliä -merkkiä (don't care), esim. #, jonka avulla sääntöjä voidaan ryhmitellä luokiksi. Suoritusosa tuottaa uusia sääntöjä ja päättyviä toimintoja (A, B, kuvassa 4). Kuvan prosessia voisi ajatella esimerkiksi jonkin Prologin tai Lispin epämääräisen murteen toteuttavana tulkkina.
Jos säännöt kattavat kaikki mahdolliset järjestelmän saamat syötteet, sääntöjen sanotaan olevan syötejoukon suhteen laskennallisesti täydellisiä. Saman syötejoukon suhteen laskennallisesti täydelliset järjestelmät ovat yhtä ilmaisuvoimaisia, mikä tässä yhteydessä tarkoittaa sitä, että proseduraalisesti toteutetut algoritmit voidaan ilmaista myös sääntöjoukon avulla.
Jonkinlaisen käsityksen sääntöjärjestelmien mahdollisuuksista antaa laajalti rikollisten tunnistuksessa käytetty tunnistusohjelma, jossa kymmenen hiusrajaa, kymmenen silmäparia, kymmenen nenää, kymmenen suuta ja kymmenen leukaa yhdistetään viidelläkymmenellä perussäännöllä niin, että ne tuottavat kaikki kuvapankin satatuhatta erilaista kasvoa.
Sääntöjen oikean puolen suorittaminen voi laukaista uusia sääntöjä, joiden sivuvaikutukset suorittavat ohjelmalle määritellyn tehtävän. Ohjelman suoritus päättyy sääntöihin, jotka eivät aktivoi uusia sääntöjä. Jos sääntöihin sidotaan muistia, niiden käyttäytymistä voidaan tarkkailla ja jopa muokata ajoaikaisesti. Sääntöjen muistia käytetään, kun halutaan liittää sääntöihin niitä arvottavia painokertoimia esim. suorituskertojen mukaan.
Kun säännöt toteutetaan suoritusaikaisesti toisistaan riippumattomiksi, voidaan niitä tarvittaessa hajauttaa rinnakkaisprosessorijärjestelmien suoritettavaksi. Riippumattomat säännöt tukevat myös geneettiseen algoritmiin sisältyvää monikerroksista rinnakkaisuutta - niin yksilön perimää kuin sukupolvea joukkoina käsittelevissä operaatioissa.


Edellinen Sisältö Seuraava