Geneettiset algoritmit (GA) perustuvat evolutionääriseen lähestymistapaan tekoälyssä, jossa populaation evoluutiomenetelmiä käytetään optimaalisen ratkaisun löytämiseksi tiettyyn ongelmaan. Ne esitti vuonna 1975 John Henry Holland.
Geneettiset algoritmit perustuvat seuraaviin periaatteisiin:
- Ongelman kelvolliset ratkaisut voidaan esittää geeneinä
- Risteytys mahdollistaa kahden ratkaisun yhdistämisen uuden kelvollisen ratkaisun saamiseksi
- Valinta valitsee optimaalisempia ratkaisuja käyttäen jotain soveltuvuusfunktiota
- Mutaatioita lisätään optimoimisen epävakauttamiseksi ja paikallisesta minimistä pääsemiseksi
Jos haluat toteuttaa geneettisen algoritmin, tarvitset seuraavat asiat:
- Menetelmän ongelman ratkaisujen koodaamiseen käyttäen geenejä g∈Γ
- Geenijoukossa Γ täytyy määritellä soveltuvuusfunktio fit: Γ→R. Pienemmät funktion arvot vastaavat parempia ratkaisuja.
- Määritellä risteytysmekanismi, joka yhdistää kaksi geeniä uuden kelvollisen ratkaisun saamiseksi crossover: Γ2→Γ.
- Määritellä mutaatiomekanismi mutate: Γ→Γ.
Monissa tapauksissa risteytys ja mutaatio ovat melko yksinkertaisia algoritmeja, jotka manipuloivat geenejä numeerisina jonoina tai bittivektoreina.
Geneettisen algoritmin tarkka toteutus voi vaihdella tapauskohtaisesti, mutta yleinen rakenne on seuraava:
- Valitse alkuperäinen populaatio G⊂Γ
- Valitse satunnaisesti, mikä operaatio suoritetaan tässä vaiheessa: risteytys tai mutaatio
- Risteytys:
- Valitse satunnaisesti kaksi geeniä g1, g2 ∈ G
- Laske risteytys g=crossover(g1,g2)
- Jos fit(g)<fit(g1) tai fit(g)<fit(g2) - korvaa vastaava geeni populaatiossa g:llä.
- Mutaatio - valitse satunnainen geeni g∈G ja korvaa se mutate(g):llä
- Toista vaiheesta 2, kunnes saavutetaan riittävän pieni fit-arvo tai kunnes askelten määrä saavuttaa rajan.
Geneettisillä algoritmeilla ratkaistaan tyypillisesti seuraavia tehtäviä:
- Aikataulujen optimointi
- Optimaalinen pakkaus
- Optimaalinen leikkaus
- Uuvuttavan haun nopeuttaminen
Jatka oppimista seuraavissa muistikirjoissa:
Siirry tähän muistikirjaan nähdäksesi kaksi esimerkkiä geneettisten algoritmien käytöstä:
- Aarteiden reilu jakaminen
- 8 kuningattaren ongelma
Geneettisiä algoritmeja käytetään monien ongelmien ratkaisemiseen, mukaan lukien logistiikka- ja hakutehtävät. Ala on saanut inspiraationsa tutkimuksesta, joka yhdisti psykologian ja tietojenkäsittelytieteen aiheita.
"Geneettiset algoritmit ovat yksinkertaisia toteuttaa, mutta niiden käyttäytymistä on vaikea ymmärtää." lähde Tee tutkimusta löytääksesi geneettisen algoritmin toteutuksen, kuten Sudoku-pulman ratkaisemisen, ja selitä, miten se toimii luonnoksena tai vuokaaviona.
Katso tämä loistava video, jossa kerrotaan, miten tietokone voi oppia pelaamaan Super Mariota käyttäen geneettisillä algoritmeilla koulutettuja neuroverkkoja. Opimme lisää siitä, miten tietokone oppii pelaamaan tällaisia pelejä seuraavassa osiossa.
Tavoitteenasi on ratkaista niin sanottu Diofanttinen yhtälö - yhtälö, jolla on kokonaislukuratkaisuja. Esimerkiksi yhtälö a+2b+3c+4d=30. Sinun täytyy löytää kokonaislukuratkaisut, jotka täyttävät tämän yhtälön.
Tämä tehtävä on saanut inspiraationsa tästä artikkelista.
Vinkkejä:
- Voit harkita ratkaisujen olevan välillä [0;30]
- Geeninä voit käyttää juurten arvojen listaa
Käytä Diophantine.ipynb aloituspisteenä.