Magi

Contact info
Word
Research
   Publications
Studies
Free Software
Hobbies
Articles
Photography
About me
   Curriculum Vitae

©Marko Grönroos, 1998

USENET News sfnet.keskustelu.evoluutio

Säie: Mutaatioiden yleistyminen suurissa populaatioissa Re: Luomiskertomus

Edellinen säie: Varastamisteorioista
Seuraava säie: Geeneistä
[Muut säikeet] [Muut uutisryhmät]
Newsgroups: sfnet.keskustelu.evoluutio
Subject: Re: Mutaatioiden yleistyminen suurissa populaatioissa Re: Luomiskertomus
From: magi AT iki PISTE fi (Marko Grönroos)
Date: 31 Jul 2000 14:02:59 +0300

zur AT nexus PISTE edu PISTE lahti PISTE fi (Pekka Aleksi Knuutila) writes:
> Minun korvaani ym. perustelut kuulostivat hieman ontuvilta, ja en osaa
> ajatella miksi riittavalla ajalla riittavan edullinen mutaatio ei
> yleistyisi ihmistenkin keskuudessa.

Myös itse olen aina ihmetellyt tätä varsin yleistä väitettä, mutta en
ainakaan pienellä etsimisellä löytänyt sitä mistään kirjastani.

Talkorigins.org:in mainiossa evoluutiobiologia-introssa kerrotaan
joitain kaavoja tuosta. Sen mukaan populaation koko ei vaikuttaisi
evoluution nopeuteen. Eli isossa populaatiossa uudet alleelit leviävät
hyvin hitaasti (hitauden kasvavan lineaarisesti populaation koon
suhteen), mutta toisaalta niissä myös syntyy uusia alleeleita enemmän
(lineaarisesti koon suhteen), jolloin nämä kaksi lineaarista tekijää
kumoavat toisensa. Näin ymmärsin.

Sitten diploidinen genomi tuo asiaan tietysti lisäväriä, sekä se että
isot populaatiot eivät ole välttämättä kovin pienellä alueella.

Evolutiivisilla algoritmeilla suurempi populaatio (yleensä?) aina
nopeuttaa evoluutiota. Esimerkiksi seuraava esimerkki:

Populaatiokoko Keskimääräinen konvergenssiaika (sukupolvissa)
10 25.26
20 12.66
40 8.5
80 5.21

(Ei tuo nyt aivan lineaarisesti 1/N pienene, mutta silti enemmän kuin
1/sqrt(N).)

Tämän laskin siis kokeellisesti seuraavalla pienellä ohjelmalla:

----------------------------------------------------------------------

#!/usr/bin/python

import whrandom

# Generates a random binary genome of given length
def randomBinaryGenome(length):
            return map (lambda x: whrandom.randint(0,1), [0]*length)

# Returns the linear Hamming distance between two vectors
def hammingDistance(binaryVector1, binaryVector2):
            distance = 0;
            for i in xrange(0,len(binaryVector1)):
                        distance = distance + abs(binaryVector1[i] - binaryVector2[i])
            return distance

# Takes a list of (fitness,genome)-pairs, kills the worst 50% of them and
# duplicates the best 50%, to form the next generation.
def generateNextPopulation (fitnesses):
            fitnesses.sort()
            selection = map (lambda x: x[1], fitnesses[0:len(fitnesses)/2])
            selection = selection + selection
            return selection

# Mutates one gene with given propability
def mutateGene (gene,rate):
            if whrandom.random()<0.01:
                        return 1-gene
            else:
                        return gene

# Mutates a population with given per-gene-propability
def mutatePopulation (population,rate):
            return map (lambda genome,rate=rate: map(lambda gene,rate=rate: mutateGene(gene,rate), genome), population)

# Evolves a population of given size, and returns the convergence time
# (in generations). The generated genome is binary, the default length
# is length 10, and mutation rate is 1 percent per gene.
def evolve(popSize, genomeSize = 10, mutationRate = 0.01, target = [0]*10):

            # Create initial random population
            population = map (lambda x,size=genomeSize: randomBinaryGenome(size), [0]*popSize)

            # Calculate fitnesses as tuples: (fitness, genome)
            fitnesses = map (lambda x,target=target: (hammingDistance(x,target),x), population)

            for generation in xrange(0,1000):
                        # Generate next generation
                        population = generateNextPopulation (fitnesses)

                        # Mutate the population a little
                        population = mutatePopulation (population,mutationRate)

                        # Calculate fitnesses as tuples: (fitness, genome)
                        fitnesses = map (lambda x,target=target: (hammingDistance(x,target),x), population)
                        fitnesses.sort()

                        if fitnesses[0][0]==0:
                                    break

            return generation

# Calculates average value of a numeric vector
def average(vector):
            return reduce (lambda x,y: x+y, vector) / float(len(vector))

# Evolve a population for 100 times and print the average convergence time
def averageConvergenceTime (popSize, runs=100):
            return average (map(lambda x,popSize=popSize: evolve(popSize), [0]*runs))

print averageConvergenceTime (10)
print averageConvergenceTime (20)
print averageConvergenceTime (40)
print averageConvergenceTime (80)
----------------------------------------------------------------------

--
-- Marko Grönroos, magi AT iki PISTE fi (http://www.iki.fi/magi/)
-- Paradoxes are the source of truth and the end of wisdom



Newsgroups: sfnet.keskustelu.evoluutio
Subject: Re: Mutaatioiden yleistyminen suurissa populaatioissa Re: Luomiskertomus
From: magi AT iki PISTE fi (Marko Grönroos)
Date: 02 Aug 2000 23:12:36 +0300

"Ilkka Karaila" <ilkka PISTE karaila AT nelesautomation PISTE com> writes:
> Tämä mutaatiokeskustelu ei ole paljoa pohtinut sitä mahdollisuutta, että
> olosuhteet ovat olleet maapallolla varsin vakaat pitkään. Tämän seurauksena
> organismien geenipopulaatiot ovat konvergoineet paikalliseen optimiin ja
> kaikki mutaatiot voivat sen johdosta vaikuttaa huonon suuntaisilta kun
> vaihtoehtoja ei enää ole.

Tämä ei kuullosta järkevältä, vaikka joissain hyvin yksinkertaisissa
ja stabiileissa ympäristöissä näin voikin olla, jos jollain lajilla ei
juurikaan ole kilpailua, eikä se kykene löytämään uusia ekologisia
lokeroita hyödynnettäväksi.

Jos lajien väliset interaktiot ovat voimakkaat, on sopeutumismaasto
hyvin dynaaminen. Näin taitaa olla useimmilla lajeilla. Tällöin
koevolutiivinen dynaamisyys auttaa lajeja pääsemään pois ainakin
pienemmistä paikallisista minimeistä.

--
-- Marko Grönroos, magi AT iki PISTE fi (http://www.iki.fi/magi/)
-- Paradoxes are the source of truth and the end of wisdom

Edellinen säie: Varastamisteorioista
Seuraava säie: Geeneistä
[Muut säikeet] [Muut uutisryhmät]