1 2 3 4 5 6 7 8 9 10 11 puhe

Elämää tietokoneessa?
---------------------

Petri Keckman


Mitä  on  elämä?  Miten  se  kehittyy?  Miten mieli toimii? Ovatko molemmat vain
materian liikettä?

Vastaavanlaiset  kysymykset  ovat  varmasti askarruttaneet ihmisapinan mieltä jo
siitä  lähtien,  kun saimme ensimmäiset orastavat tuntemukset siitä, että olemme
jotain  mikä  on olemassa: jo vuosimiljoonia ennen Platonia (synt. 427 eKr.) tai
Descartesia ja "Cogito, ergo sum":ia 1600-luvulla.

Tämän    päivän   tekoelämän   ja   tekoälyn   tutkijat   ovat   tuomassa   omaa
vastauksentynkäänsä näihin kysymyksiin. Asiaa pohdittiin aivan vakavasti(?) myös
Tiede  2000  -lehden  (5/95)  artikkelissa  "Luomisen  kahdeksas  päivä?", jossa
todetaan:   "Tekoelämän   tutkimus   on   biologiaa   elektronisessa   muodossa.
Tietokoneiden  avulla halutaan paljastaa elämän syvin olemus - ja kehittää uutta
elämää."

Minua   ovat   aina   puistattattaneet   puheet   tietokoneella   aikaansaadusta
tekoelämästä.





"Tieteellisellä  toiminnalla"  on  kulttuurissamme  hyvin  suuri arvovalta ja se
siirtyy  myös  artikkeleille,  joita julkaistaan Tiede 2000 -lehdessä. Asemaansa
tiede   on   aikoinaan   päässyt   syrjäyttämällä   uskonnolliset  ja  myyttiset
maailmankuvat.   Tiede  nähdään  toimintana,  joka  tuottaa  "tietoa",  joka  on
varmemmalla   pohjalla   kuin  muut,  esimerkiksi  uskonnolliset,  maagiset  tai
taiteeseen  perustuvat  ihmis-  ja  elämänkäsitykset.  Tiede aikoinaan syrjäytti
uskonnon kuitenkin lähinnä vain materian lainalaisuuksien tutkimisessa.

Ja  nyt  siis  "tieteellisesti"  pohditaan vakavasti, ovatko ne prosessit, joita
tietokoneella  aikaansaadaan  samaa  kuin elämä?! Kaikki tietokoneen toiminta on
palautettavissa  siihen, että jos jotkin sähkövaraukset (syötebitit) ovat vaikka
101011  ja  jotkin  bitit  (ohjelma)  ovat  101001,  niin ne määräävät tiettyjen
sääntöjen  perusteella  (prosessorin  toiminta),  että  tulosteeksi tulee jotkin
bitit,  esimerkiksi  1101010. Tämän tulosteen annetaan sitten aiheuttaa tiettyjä
aisteilla  havaittavissa  olevia ilmiöitä näyttöpäätteessä, robotin käsivarressa
tai muussa tulostinlaitteessa. Siinä se on tasan koko homma eikä mitään muuta.

Tietokone  ei  käsittele  edes numeroita eikä laske. Sen voidaan tulkita tekevän
niin  vasta sen jälkeen, kun olemassa elävä ja tietävä olento, joka antaa niille
sähkövarauksille  sellaiset  tulkinnat,  että ne ovat joitain sellaisia tietomme
kohteena  olevia  olioita,  joita  kutsumme numeroiksi. Yhtä hyvin voisi väittää
melkein  minkä  tahansa  fyysisen  materian  toiminnan  kuvaavan "elämän syvintä
olemusta".  Annamme  vain  näille  havaintokentässämme tapahtuville tapahtumille
sellaisen  semanttisen  tulkinnan:  muodostamme  tietyn  kielen, jossa tietyillä
materiaalisilla tapahtumilla ovat tietyt tiedolliset vastineet mielessämme.

Tekoelämää  tutkivat  ovat  pyrkineet  luomaan laskennallisia prosesseja, joiden
mahdollista  elävyyttä  he  aivan  vakavissaan  pohtivat. Tällaisia ovat mm. ns.
soluautomaatit.   Niissä  noudatetaan  tiettyjä  yksinkertaisia  algoritmillisia
periaatteita,   joiden  tuloksena  syntyy  näyttöpäätteelle  tulosteita  (joiden
toiminta kuvaa elämän syvintä olemusta! Hah hah!). Esimerkiksi:

1) Jokainen kuvaruudun piste (solu), jolla on kaksi tai kolme elävää
   naapuria, selviää hengissä seuraavalle sukupolvelle.

2) Jokainen solu, jolla on nolla tai yksi naapuria "kuolee" (yksinäisyyteen)
   (yksinäisyyteen), ja jokainen piste jolla on neljä tai useampia naapureita
   kuolee (liikakansoitukseen).

3) Jokainen kuollut solu, jolla on tasan kolme elävää naapuria synnyttää
   uuden solun.

Samat periaatteet voidaan sanoa myös toisin:

1) Jos pikseli ei ole päällä niin se tulee päälle, jos sillä on tasan kolme
   päällä olevaa viereistä pikseliä.

2) Jos pikseli on päällä, niin se sammuu, jos sillä on nolla tai yksi päällä
   olevaa viereistä pikseliä. Samoin se sammuu, jos vieressä on useampia kuin
   kolme pikseliä päällä.

Näillä   yksinkertaisilla   "syntymän",   "hengissä  säilymisen"  ja  "kuoleman"
säännöillä väitetään siis saatavan aikaiseksi jotain sellaista, josta pohditaan,
onko  se  elämää.  Pohtisivat  edes  vain  sitä, kuvastavatko ne jollain tavalla
joitain  meidän  elävien ihmisten tietoja ja käsityksiä evoluution prosesseista,
mutta  kun minä olen käsittänyt, että he aivan vakavissaan pohtivat sitä, ovatko
ne  eläviä.  Suutarit  pysykööt  lestissään  työajalla ja pohtikoot vapaa-ajalla
kaikenkattavia  selityksiä  elämän  syvimmästä olemuksesta, joka on meille täysi
mysteeri, vaikka me niin kiihkeästi haluaisimmekin väittää ymmärtävämme sitä.

Mielemme  on  aina  aikansa  vanki.  Nyt  kun  tietokoneet ovat valtaamassa alaa
elämässämme   ja  mielessämme,  pyrimme  helposti  projisoimaan  sen  käsitteitä
elämään.  Taiteilijat, uskovaiset, humanistit ja psykologit näkevät elämän aivan
toisin.

Alla    on    AMOS-ohjelma,   joka   mallintaa   ylläselitettyä   yksinkertaista
soluautomaattia  - ja elämän perimmäisintä luonnetta.  Esimerkkiajossa, josta on
kuva numero1  laitoin alkusyötteeksi seuraavanlaisen pistekuvion:

               xxx
              x   x
             x     x   
              x   x
               xxx

Koska  alkukuva  oli symmetrinen, aiheutti se luonnollisesti myöskin symmetristä
elämää.  Pienikin  muutos  alkuparametreihin  (yhden pisteen poisto) voi muuttaa
tätä tekoelämää täysin. Suuri osa muodoista päättyy tilanteeseen, josta elämä ei
enää  kehity,  vaan  peräkkäisistä  tiloista tulee samanlaiset. Esimerkki ajossa
elämä  kiinnittyi  stabiiliin  tilaan  14.  sukupolvessa.  Yhden  pisteen poisto
(kuva2)  aiheutti  sen,  että  elämä  lähti  laajenemaan.  Kun tästä alkutilasta
poistin vielä yhden pisteen, jolloin alkutilanne oli tällainen,

               xxx
                  x
             x     x   
              x   x
               xxx

hävisi elämä kokonaan sukupolvessa 16.
kuva 1:

kuva2:
Ne,  joilla  on käytössä AMOS-tulkki tai kääntäjä voivat tutkia ohjelmalla muita
tapauksia.   Talleta   blokki   teksinkäsittelyohjelmallasi,   lataa   se  (Load
ASCII-file)  AMOS-tulkkiisi  ja  tutki  "elämää".  Ohjelma on melko hidas, koska
käytän  siinä  taulukoita  solujen  tilanteen  tallettamiseen.  Joka tilanteessa
täytyy  jokainen  solu  ja  sen  kahdeksan  naapuria  tutkia  erikseen.  Lisäksi
seuraavaan    tilanteeseen    mennessä    kopioidaan   koko   taulukko   uudeksi
lähtötaulukoksi,  jonka perusteella lasketaan taas seuraava tilanne. C-kieltä ja
dynaamisia   muuttujia  käyttäen  ohjelmasta  olisi  tullut  monta  kertaluokkaa
nopeampi - mutta evoluutiohan on hidasta.

Mikäli  artikkeli  aiheutti mietteitä ja käytössäsi on modeemi, voit kommentoida
MBnetissä tai Epsilon Indissä, joissa silloin tällöin käyn. Toki voinet lähettää
mietteitäsi  Sakuunkin:  jos joku nykyajan keinotodellisuus- ja tietokonefriikki
on  tosissaan  sitä  mieltä,  että  elämä ja ihmisen sielun toiminta ovat jotain
senkaltaista,   että   sitä   voidaan   mallintaa   -  tai  jopa  aikaansaada  -
tietokoneella, niin olen valmis riitelemään aiheesta.
  Rem *** Petri Keckman 1996 
  Rem *** Soluautomaatin elämää AMOSilla  
  Rem Ohjelma tuottaa tekoelämää noudattamalla yksinkertaisia  
  Rem periaatteita:
  Rem 1) jos pikseli ei ole päällä niin se tulee päälle, jos sillä on 
  Rem    tasan kolme päällä olevaa viereistä pikseliä.
  Rem 2) Jos pikseli on päällä, niin se sammuu, jos sillä on molla tai yksi
  Rem    päällä olevaa viereistä pikseliä. Samoin se sammuu, jos vieressä on
  Rem    useampia kuin kolme päällä. 
  Rem Ohjelma piirtää vaiheista pieniä kuvia ja piirtää vanhojen päälle, kun
  Rem kuvaruutu täyttyy.   
  
  MX#=640
  MY#=256
  Screen Open 0,MX#,MY#,4,Hires
  Flash Off : Curs Off : Cls 0
  Colour 0,$0 : Colour 1,$F0 : Colour 2,$FF0 : Colour 3,$F00
  
  Rem Halutessasi voit muuttaa muuttujien RX, RY, XKPL, YKPL ja   
  Rem alkukuvan koordinaattien arvoja Data-lauseesta. 
  
  RX=4 : RY=4 : Rem "sarjakuvaruutujen" lukumäärä, tässä 4*4  
  XKPL=16 : Rem Sarjakuvaruudussa 16*16 ruudukko soluille  
  YKPL=16
  KPL=12 : Rem Elämän alkukuvapisteitten lukumäärä  
  Rem Elämän alkusolujen koordinaatit XKPL*YKPL ruudukossa   
  Data 6,6,7,6,8,6,9,7,10,8,9,9,8,10,7,10,6,10,5,9,4,8,5,7
  
  Rem Jos muutat KPL-määrää suuremmaksi, niin joudut tietysti lisäämään
  Rem myöskin alkupisteitä, joiden koordinaatit ovat väliltä 1..XKPL
  Rem ja 1..YKPL.
  Rem Jos elämä kehittyessään ei mahdu sille asetettuihin raameihin,
  Rem voit kasvattaa XKPL- ja YKPL-muuttujien arvoja. Silloin joudut
  Rem myös muuttamaan alkukoordinaattien arvoja, jos haluat alkukuvan
  Rem keskelle "sarjakuvaruutua" samoilla data-arvoilla. Helpommmin se
  Rem käy, kun muutat riviltä 63 ja 64 skaalaustekijää. Jos esim. suurennat
  Rem ruudukkoa 10:llä, niin muuta skaalaustekijä 10/2=5, ja alkukuva on
  Rem edelleen keskellä eikä sinun tarvitse muuttaa kaikkia data-arvoja.
  Rem Pienikin muutos voi saada elämässä suuria muutoksia aikaiseksi:
  Rem esim. arvoilla KPL=11, XKPL=25, YKPL=25, RX=4, RY=4 elämä ei lopu
  Rem koskaan, mutta jos tästä poistaa vain yhden pisteen (KPL=10) käyttäen 
  Rem samoja Data-lauseen arvoja, niin se häviää kokonaan sukupolvessa 16. 
  Rem Aloitetaan piirtämällä raamit elämälle:
  
  MARG=40 : Rem Alasjätettävä marginaali 
  LEVEYS#=(MX#-1)/RX
  KORKEUS#=(MY#-MARG)/RY
  Ink 3
  For I=1 To RX : For J=1 To RY
  Box LEVEYS#*(I-1),KORKEUS#*(J-1) To I*LEVEYS#,J*KORKEUS#
  Next : Next : Draw MX#,0 To MX#,MY#
  Locate 20,28 : Paper 0 : Pen 2
  Print "ELÄMÄN SYVIN OLEMUS TEKOELÄMÄN TUTKIJOIDEN MIELESTÄ"
  
  Rem SOLUT0-taulukon avulla lasketaan seuraava SOLUT1-taulukko
  Dim SOLUT0(XKPL+1,YKPL+1),SOLUT1(XKPL+1,YKPL+1)
  
  Rem tapetaan aluksi kaikki solut (arvo 0)
  For I=0 To XKPL+1 : For J=0 To YKPL+1
     SOLUT0(I,J)=0 : SOLUT1(I,J)=0
  Next : Next 
  LX#=LEVEYS#/XKPL : Rem yhden pisteen (solun) leveys 
  LY#=KORKEUS#/YKPL
  If LX#<2 or LY#<2
    Print "Liian pieneksi meni. Pienennä muuttujia RX,RY tai XKPL,YKPL"
    Stop 
  End If 
  
  Rem Asetetaan elämän spontaani alkusynty.  
  X0#=0 : Rem sarjakuvaruudun vasen yläkulma alussa
  Y0#=0
  For SOLU=1 To KPL
    Read I,J
    I=I+0 : Rem skaalaustekijä (tässä 0)  
    J=J+0 : Rem skaalaustekijä (tässä 0)
    SOLUT0(I,J)=1 : Rem solu elää=1, kuollut=0 
    Ink 1 : Gosub 999
  Next 
  
  KIERROS=2
  Repeat : Rem Pääsilmukka, jossa pyöritään kunnes elämä ei enää kehity
    Locate 0,28 : Paper 0 : Ink 3
    Print "Sukupolvi: ";KIERROS : Add KIERROS,1
    Rem lasketaan seuraavan sarjakuvaruudun vasen yläkulma   
    X0#=X0#+LEVEYS# : If X0#>MX#-LEVEYS#
                        X0#=0 : Y0#=Y0#+KORKEUS#
                        If Y0#>MY#-KORKEUS#-MARG : Y0#=0 : End If
                      End If 
    Rem tyhjennetään se ensin
    Ink 0 : Bar X0#+1,Y0#+1 To X0#+LEVEYS#-1,Y0#+KORKEUS#-1
    Rem ja aletaan laskea soluille arvoja 
    For I=1 To XKPL
      For J=1 To YKPL
        ELAA=SOLUT0(I,J)
        KPL=0 : Rem Lasketaan elävät naapurisolut
        Rem ei lasketa solua itse sen eläväksi naapuriksi:
        If ELAA=1 : KPL=-1 : End If 
        For DI=-1 To 1
          For DJ=-1 To 1
            If SOLUT0(I+DI,J+DJ)=1 : Add KPL,1 : End If 
          Next DJ
        Next DI
        Rem tässä on varsinainen tekoelämän generaattori
        If ELAA=1 and(KPL=2 or KPL=3)
          SOLUT1(I,J)=1
          Ink 1 : Gosub 999 : End If 
        If ELAA=1 and(KPL=0 or KPL=1 or KPL>3)
          SOLUT1(I,J)=0
          Ink 0 : Gosub 999 : End If 
        If ELAA=0 and(KPL=3)
          SOLUT1(I,J)=1
          Ink 1 : Gosub 999 : End If 
      Next 
    Next 
    Rem tutkitaan samojen solujen lukumäärä  
    Rem ja siirretään SOLUT1:n alkiot SOLUT0:n alkioiksi   
    SAMOJA=0
    For I=1 To XKPL : For J=1 To YKPL
      If SOLUT0(I,J)=SOLUT1(I,J) : Add SAMOJA,1 : End If 
      SOLUT0(I,J)=SOLUT1(I,J) : SOLUT1(I,J)=0
    Next : Next 
  Until SAMOJA=XKPL*YKPL
  Locate 0,29 : Print "Elämä jumittui."
  End 
  Rem aliohjema solun piirtoon 
  999
  A0#=Int(X0#+I*LX#+1.5)
  B0#=Int(Y0#+J*LY#+1.5)
  A1#=Int(X0#+I*LX#+LX#-0.5)
  B1#=Int(Y0#+J*LY#+LY#-0.5)
  If Int(A0#)=Int(A1#) or Int(B0#)=Int(B1#)
      Plot A0#,B0# : Draw To A1#,B1#
  Else Bar A0#,B0# To A1#,B1# : End If 
  Return