Naturligt urval mot slump

av Anders Hesselbom

Ett argument som kreationister använder om evolutionsteorin är ”hur kan slumpen ha skapat X”, där X kan vara precis vad som helst, som t.ex. alla varelser, ögat eller hela jorden.

På denna punkt har kreationisterna rätt. Men bara för att det är rätt att inte slumpen har skapat ögat och annat, betyder det inte att det är Gud eller något annat övernaturligt väsen, vilket faktiskt också hävdas av kreationisterna. Här finns en ännu bättre förklaring i evolutionsteorin: Det naturliga urvalet.

Här är det inte slumpen som skapar, men slumpen är en faktor. En liten förändring från en generation till en annan, kan orsakas av slumpen, men det är andra faktorer som avgör om den förändringen förs vidare. Om förändringen innebär ökad chans för överlevnad eller ökad chans att få föra sitt arvsanlag vidare, och så vidare. I nästa generation kan den förändringen förändras, och om det innebär ytterligare en fördel, ökar chansen att den förändringen förs vidare, annars inte.

Det går lätt att bevisa att slumpen är mycket mindre effektiv än det naturliga urvalet. Om vi nu tänker oss att kriteriet för att en förändring ska vara positiv i naturen, är att individen överlever eller får föröka sig, så kan vi tänka oss att kriteriet för att en förändring ska vara positiv i en datorsimulering ska vara att en bokstav ingår i en mening. Meningen kan vara ”EMPIRISKT BEVIS FÖR EVOLUTION”, skrivet i versaler. Men först ett förtydligande:

Denna simulering jämför den nya informationen med målet. Evolutionen arbetar egentligen mot ett okänt mål, i naturen får man se om en förändring är bättre eller sämre på om det ger ökad chans till överlevnad.

Mål

EMPIRISKT BEVIS FÖR EVOLUTION

Slump

XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Evolution

XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Antal generationer

0

Efter att du klickat på startknappen borde du se slumpen och evolutionen arbeta, och om inte evolutionsteorin är helt felaktig, borde evolutionen med det naturliga urvalet göra jobbet mycket bättre än slumpen.

Så här ser källkoden ut:

//Initiera variablerna som behövs för experimentet
var antalGenerationer=0;
var strTarget   ="EMPIRISKT BEVIS FÖR EVOLUTION";
var strRandom   ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var strEvolution="XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

function nextGeneration(){
   //Räkna antal generationer
   antalGenerationer++;

   //Slumpen: Välj en bokstav slumpmässigt och
   //ersätt den med en annan
   var nextRandomGeneration="";
   //Slumpen avgör vilken bokstav som ska ersättas
   var c1=Math.round(Math.random()*(strTarget.length-1));
   //Bygg en ny individ
   for(var i=0;i<strTarget.length;i++){
      if(i==c1) nextRandomGeneration+=getRandomChar();
      else nextRandomGeneration+=strRandom.substring(i,i+1);
   }
   strRandom=nextRandomGeneration;

   //Naturligt urval: Välj en bokstav slumpmässigt och
   //ersätt den med en annan
   var nextEvolutionGeneration="";
   //Slumpen avgör vilken bokstav som ska ersättas
   var c2=Math.round(Math.random()*(strTarget.length-1));
   //Bygg en ny individ
   for(var i=0;i<strTarget.length;i++){
      if(i==c2) nextEvolutionGeneration+=getRandomChar();
      else nextEvolutionGeneration+=strEvolution.substring(i,i+1);
   }
   //Om mutationen inte är en nackdel, för den vidare till nästa
   //generation. Annars, låt den nya individen dö.
   if (fitness(nextEvolutionGeneration)>=fitness(strEvolution))
       strEvolution=nextEvolutionGeneration;

   //Presentera informationen i webbläsaren
   document.getElementById("elementRandom").textContent=strRandom;
   document.getElementById("elementEvolution").textContent=strEvolution;
   document.getElementById("elementGenerations").textContent
      =antalGenerationer;

   //Kontrollera om någon har vunnit, annars gå till nästa generation
   if(strRandom==strTarget)
      alert("Slumpen vann efter " + antalGenerationer +
         " generationer.");
   else if(strEvolution==strTarget)
      alert("Evolution vann efter " + antalGenerationer +
         " generationer.");
   else
      setTimeout("nextGeneration();",10);
}

//En funktion som ger en slumpad bokstav (används både av
//evolution och slump - denna bit är gemensam.
function getRandomChar(){
   var b="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ ";
   var r=Math.round(Math.random()*(b.length-1));
   return b.substring(r,r+1);
}

//Poängsätt den nya generationen. I verkligheten får man inte
//poäng, utan undviker att dö och lyckas föra arvsanlaget vidare.
function fitness(str){
   var score=0;
   for(var i=0;i<strTarget.length;i++)
      if (str.substring(i,i+1)==strTarget.substring(i,i+1))
         score++;
   return score;
}

Alltså, att slumpen inte kan skapa människan, ögat eller vad som helst, är korrekt, men det är varken ett argument för eller emot evolutionsteorin. Evolution krediterar inte slumpen, utan det naturliga urvalet. Detta exempel däremot, visar att evolutionen mycket väl kan skapa en struktur.

Tack till mina vänner på http://www.vof.se/forum/ för hjälp med programkoden, formuleringar och korrigeringar. /Anders

Kommentarer inaktiverade.