[Avida-SVN] r1881 - in development/source: cpu main

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Wed Aug 1 18:09:39 PDT 2007


Author: brysonda
Date: 2007-08-01 21:09:39 -0400 (Wed, 01 Aug 2007)
New Revision: 1881

Modified:
   development/source/cpu/cHardwareBase.cc
   development/source/main/cAvidaConfig.h
   development/source/main/cMutationRates.cc
   development/source/main/cMutationRates.h
   development/source/main/cOrganism.h
Log:
Implement first pass at uniform mutations (all possible mutations have equal probability).

Modified: development/source/cpu/cHardwareBase.cc
===================================================================
--- development/source/cpu/cHardwareBase.cc	2007-08-02 00:36:51 UTC (rev 1880)
+++ development/source/cpu/cHardwareBase.cc	2007-08-02 01:09:39 UTC (rev 1881)
@@ -259,6 +259,40 @@
     }
   }
   
+  
+  
+  // Uniform Mutations on Divide
+  if (organism->GetUniformMutProb() > 0 && totalMutations < maxmut) {
+    int num_mut = ctx.GetRandom().GetRandBinomial(child_genome.GetSize(), 
+                                                  organism->GetUniformMutProb() / mut_multiplier);
+    
+    // If we have lines to mutate...
+    if (num_mut > 0 && totalMutations < maxmut) {
+      int mutrange = (m_inst_set->GetSize() * 2) + 1;
+      for (int i = 0; i < num_mut && totalMutations < maxmut; i++) {
+        int mut = ctx.GetRandom().GetUInt(mutrange);
+        
+        if (mut < m_inst_set->GetSize()) { // point
+          int site = ctx.GetRandom().GetUInt(child_genome.GetSize());
+          child_genome[site] = cInstruction(mut);
+        } else if (mut == m_inst_set->GetSize()) { // delete
+          if (child_genome.GetSize() == MIN_CREATURE_SIZE) continue;
+          int site = ctx.GetRandom().GetUInt(child_genome.GetSize());
+          child_genome.Remove(site);
+        } else { // insert
+          if (child_genome.GetSize() == MAX_CREATURE_SIZE) continue;
+          int site = ctx.GetRandom().GetUInt(child_genome.GetSize() + 1);
+          child_genome.Insert(site, cInstruction(mut - m_inst_set->GetSize() - 1));
+        }
+                                               
+        totalMutations++;
+      }
+    }
+  }
+  
+  
+  
+  
   // Mutations in the parent's genome
   if (organism->GetParentMutProb() > 0 && totalMutations < maxmut) {
     for (int i = 0; i < GetMemory().GetSize(); i++) {

Modified: development/source/main/cAvidaConfig.h
===================================================================
--- development/source/main/cAvidaConfig.h	2007-08-02 00:36:51 UTC (rev 1880)
+++ development/source/main/cAvidaConfig.h	2007-08-02 01:09:39 UTC (rev 1881)
@@ -254,6 +254,7 @@
   CONFIG_ADD_VAR(INS_MUT_PROB, double, 0.0, "Insertion rate (per site, applied on divide)");
   CONFIG_ADD_VAR(DEL_MUT_PROB, double, 0.0, "Deletion rate (per site, applied on divide)");
   CONFIG_ADD_VAR(DIV_MUT_PROB, double, 0.0, "Mutation rate (per site, applied on divide)");
+  CONFIG_ADD_VAR(UNIFORM_MUT_PROB, double, 0.0, "Uniform mutation probability (per site, applied on divide)\n- Randomly applies any of the three classes of mutations (ins, del, point).");
   CONFIG_ADD_VAR(DIVIDE_MUT_PROB, double, 0.0, "Mutation rate (per divide)");
   CONFIG_ADD_VAR(DIVIDE_INS_PROB, double, 0.05, "Insertion rate (per divide)");
   CONFIG_ADD_VAR(DIVIDE_DEL_PROB, double, 0.05, "Deletion rate (per divide)");

Modified: development/source/main/cMutationRates.cc
===================================================================
--- development/source/main/cMutationRates.cc	2007-08-02 00:36:51 UTC (rev 1880)
+++ development/source/main/cMutationRates.cc	2007-08-02 01:09:39 UTC (rev 1881)
@@ -36,6 +36,7 @@
   divide.ins_prob = world->GetConfig().INS_MUT_PROB.Get();
   divide.del_prob = world->GetConfig().DEL_MUT_PROB.Get();
   divide.mut_prob = world->GetConfig().DIV_MUT_PROB.Get();
+  divide.uniform_prob = world->GetConfig().UNIFORM_MUT_PROB.Get();
   divide.divide_mut_prob = world->GetConfig().DIVIDE_MUT_PROB.Get();
   divide.divide_ins_prob = world->GetConfig().DIVIDE_INS_PROB.Get();
   divide.divide_del_prob = world->GetConfig().DIVIDE_DEL_PROB.Get();
@@ -55,6 +56,7 @@
   divide.ins_prob = 0.0;
   divide.del_prob = 0.0;
   divide.mut_prob = 0.0;
+  divide.uniform_prob = 0.0;
   divide.divide_mut_prob = 0.0;
   divide.divide_ins_prob = 0.0;
   divide.divide_del_prob = 0.0;
@@ -74,6 +76,7 @@
   divide.ins_prob = in_muts.divide.ins_prob;
   divide.del_prob = in_muts.divide.del_prob;
   divide.mut_prob = in_muts.divide.mut_prob;
+  divide.uniform_prob = in_muts.divide.uniform_prob;
   divide.divide_mut_prob = in_muts.divide.divide_mut_prob;
   divide.divide_ins_prob = in_muts.divide.divide_ins_prob;
   divide.divide_del_prob = in_muts.divide.divide_del_prob;

Modified: development/source/main/cMutationRates.h
===================================================================
--- development/source/main/cMutationRates.h	2007-08-02 00:36:51 UTC (rev 1880)
+++ development/source/main/cMutationRates.h	2007-08-02 01:09:39 UTC (rev 1881)
@@ -57,6 +57,7 @@
     double ins_prob;        // Per site
     double del_prob;        // Per site
     double mut_prob;        // Per site
+    double uniform_prob;
     double divide_mut_prob;     // Max one per divide
     double divide_ins_prob;     // Max one per divide
     double divide_del_prob;     // Max one per divide
@@ -116,6 +117,7 @@
   double GetInsMutProb() const       { return divide.ins_prob; }
   double GetDelMutProb() const       { return divide.del_prob; }
   double GetDivMutProb() const       { return divide.mut_prob; }
+  double GetUniformMutProb() const   { return divide.uniform_prob; }
   double GetDivideMutProb() const    { return divide.divide_mut_prob; }
   double GetDivideInsProb() const    { return divide.divide_ins_prob; }
   double GetDivideDelProb() const    { return divide.divide_del_prob; }
@@ -131,6 +133,7 @@
   void SetInsMutProb(double in_prob)    { divide.ins_prob        = in_prob; }
   void SetDelMutProb(double in_prob)    { divide.del_prob        = in_prob; }
   void SetDivMutProb(double in_prob)    { divide.mut_prob        = in_prob; }
+  void SetUniformMutProb(double in_prob){ divide.uniform_prob    = in_prob; }
   void SetDivideMutProb(double in_prob) { divide.divide_mut_prob = in_prob; }
   void SetDivideInsProb(double in_prob) { divide.divide_ins_prob = in_prob; }
   void SetDivideDelProb(double in_prob) { divide.divide_del_prob = in_prob; }

Modified: development/source/main/cOrganism.h
===================================================================
--- development/source/main/cOrganism.h	2007-08-02 00:36:51 UTC (rev 1880)
+++ development/source/main/cOrganism.h	2007-08-02 01:09:39 UTC (rev 1881)
@@ -266,6 +266,7 @@
   double GetInsMutProb() const { return m_mut_rates.GetInsMutProb(); }
   double GetDelMutProb() const { return m_mut_rates.GetDelMutProb(); }
   double GetDivMutProb() const { return m_mut_rates.GetDivMutProb(); }
+  double GetUniformMutProb() const { return m_mut_rates.GetUniformMutProb(); }
   double GetParentMutProb() const { return m_mut_rates.GetParentMutProb();}
 
   double GetInjectInsProb() const { return m_mut_rates.GetInjectInsProb(); }




More information about the Avida-cvs mailing list