[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