Karpov kirjoitti:
Tein joskus ajan kulukseni ohjelman, joka loi ohjelmakoodia, käänsi ja ajoi kirjoittamansa ohjelmat. Kääntymättömät hylättiin suoraan, suorituksessaan virheilmoituksen aiheuttaneita ohjelma osasi vähän random-generaattorin voimalla parannella ja ajaa uudelleen. En kyllä tosiaan päässyt mihinkään järkevään tulokseen, että ohjelma lähtisi kehittämään jotain oikeasti järkevää, ilmeisesti ei kukaan vielä sellaista ole osannut tehdä.
Olen itse tehnyt aikoinaan hiukan vastaavan, koodia optimoivan geneettisen haun. Lähtökohtani oli sellainen, että tein yksinkertaisen simuloidun konekielen. Tällä konekielellä kirjoitin sitten algoritmin, demonstraatiossa se oli lukujen järjestäminen eli "sorttaus". Mun kiinnostuksen kohde oli se, kykeneekö tuollaisella systeemillä algoritmiseen optimointiin, ts. bubble sortista quicksortiin.
Homma toimi suunnilleen näin. Minä kirjoitin ensin koodin (bubble sort). Tämä koodi toimi paitsi populaation kantana, myös tulevien jälkipolvien oikeellisuuden verifioinnissa. Vertasin siis alkuperäisen koodin ja tuotettujen koodien tuloksia toisiinsa, ja hylkäsin ne uudet koodit, jotka antoivat erilaisia tuloksia.
Loppujen lopuksi demonstraatio jäi vähän puutteelliseksi lähinnä sen aikaisen koneen hitaudesta johtuen. Suurimman osan ajasta tutkin menetelmiä, joilla saisin haun etenemään nopeammin, esimerkiksi muokkaamalla virtuaalista konekieltä paremmin "naittamiseen" soveltuvaksi.
No, kykenikö se algoritmiseen optimointiin? Kyllä. Eräänä aamuna meinasin vetää kahvit väärään kurkkuun, kun populaation paras sorttausalgoritmi järjesteli luvut muutamassa konejaksossa, paljon alle teoreettisen O(nlogn) -minimin. Ennen kuin aloin rustaamaan aiheesta tieteellistä artikkelia, tarkastelin tarkemmin koodia. Paljastui, että se käytti hyväkseen validointiin jäänyttä puutetta. Käytin aineistona vakiolukuja, ja koodi vain lämppäsi nämä luvut muistiin.
Quicksorttia en kuitenkaan saanut koskaan syntymään. Syyllisiä tähän on useita: jo mainittu haun hitaus, koodien rajattu koko, puutteet konekielessä (esim. rekursion suhteen) ja niin edelleen. Aina silloin tällöin on mielessä, että voisi kokeilla hommaa uudestaan, ehkä hiukan kunnianhimoisemmilla tavotteilla.