[Avida-SVN] r3014 - in development: Avida.xcodeproj source/actions source/cpu source/main support/config

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Mon Dec 8 14:41:40 PST 2008


Author: brysonda
Date: 2008-12-08 17:41:39 -0500 (Mon, 08 Dec 2008)
New Revision: 3014

Modified:
   development/Avida.xcodeproj/project.pbxproj
   development/source/actions/EnvironmentActions.cc
   development/source/actions/PopulationActions.cc
   development/source/cpu/cHardwareBase.cc
   development/source/cpu/cHardwareExperimental.cc
   development/source/cpu/cHardwareExperimental.h
   development/source/cpu/cHardwareSMT.cc
   development/source/cpu/cHardwareTransSMT.cc
   development/source/main/cAvidaConfig.h
   development/source/main/cMutationRates.cc
   development/source/main/cMutationRates.h
   development/source/main/cOrganism.h
   development/support/config/avida.cfg
Log:
Implement the capability to toggle the expiration activity of the I/O -expire instructions.

Add a new action SetConfig that will allow a config option to be set in the events files.

Cleanup and fill out the mutation types in the configuration file and support actions.  Note that newly added mutation types have not been implemented yet.  The config options for such mutation types are currently ignored.   This will be corrected in a future commit.

Modified: development/Avida.xcodeproj/project.pbxproj
===================================================================
--- development/Avida.xcodeproj/project.pbxproj	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/Avida.xcodeproj/project.pbxproj	2008-12-08 22:41:39 UTC (rev 3014)
@@ -1872,6 +1872,7 @@
 		DCC30C4D0762532C008F7A48 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 702442D70859E0B00059BD9B /* Build configuration list for PBXProject "Avida" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 0;
 			mainGroup = DCC30C490762532C008F7A48;
 			productRefGroup = DCC3164E07626CF3008F7A48 /* Products */;

Modified: development/source/actions/EnvironmentActions.cc
===================================================================
--- development/source/actions/EnvironmentActions.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/actions/EnvironmentActions.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -915,6 +915,34 @@
   }
 };
 
+
+class cActionSetConfig : public cAction
+{
+private:
+  cString m_cvar;
+  cString m_value;
+  
+public:
+  cActionSetConfig(cWorld* world, const cString& args) : cAction(world, args)
+  {
+    cString largs(args);
+    if (largs.GetSize()) m_cvar = largs.PopWord();
+    if (largs.GetSize()) m_value = largs.PopWord();
+    
+    if (!m_world->GetConfig().HasEntry(m_cvar))
+      m_world->GetDriver().RaiseFatalException(-2, "Config variable specified in SetConfig action exist");
+  }
+  
+  static const cString GetDescription() { return "Arguments: <string config_var> <string value>"; }
+  
+  void Process(cAvidaContext& ctx)
+  {
+    m_world->GetConfig().Set(m_cvar, m_value);
+  }
+};
+
+
+
 void RegisterEnvironmentActions(cActionLibrary* action_lib)
 {
   action_lib->Register<cActionDelayedDemeEvent>("DelayedDemeEvent");
@@ -950,6 +978,8 @@
   action_lib->Register<cActionSetTaskArgDouble>("SetTaskArgDouble");
   action_lib->Register<cActionSetTaskArgString>("SetTaskArgString");
   action_lib->Register<cActionSetOptimizeMinMax>("SetOptimizeMinMax");
+  
+  action_lib->Register<cActionSetConfig>("SetConfig");
 
   // @DMB - The following actions are DEPRECATED aliases - These will be removed in 2.7.
   action_lib->Register<cActionInjectResource>("inject_resource");

Modified: development/source/actions/PopulationActions.cc
===================================================================
--- development/source/actions/PopulationActions.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/actions/PopulationActions.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -996,7 +996,15 @@
 class cActionSetMutProb : public cAction
 {
 private:
-  enum { POINT, COPY, INS, DEL, DIV, DIVIDE, D_INS, D_DEL, PARENT, INJECT, I_INS, I_DEL } m_mut_type;
+  enum {
+    POINT,
+    C_MUT, C_INS, C_DEL, C_UNIFORM, C_SLIP,
+    DS_MUT, DS_INS, DS_DEL, DS_UNIFORM, DS_SLIP,
+    D1_MUT, D1_INS, D1_DEL, D1_UNIFORM, D1_SLIP,
+    PARENT,
+    I_MUT, I_INS, I_DEL
+  } m_mut_type;
+  
   double m_prob;
   int m_start;
   int m_end;
@@ -1005,7 +1013,7 @@
 public:
   cActionSetMutProb(cWorld* world, const cString& args) : cAction(world, args), m_prob(0.0), m_start(-1), m_end(-1), m_setconf(false)
   {
-    cString mutstr("COPY");
+    cString mutstr("COPY_MUT");
 
     cString largs(args);
     if (largs.GetSize()) mutstr = largs.PopWord().ToUpper();
@@ -1013,19 +1021,33 @@
     if (largs.GetSize()) m_start = largs.PopWord().AsInt();
     if (largs.GetSize()) m_end = largs.PopWord().AsInt();
     
+    
     if (mutstr == "POINT") m_mut_type = POINT;
-    else if (mutstr == "COPY") m_mut_type = COPY;
-    else if (mutstr == "INS" || mutstr == "INSERT") m_mut_type = INS;
-    else if (mutstr == "DEL" || mutstr == "DELETE") m_mut_type = DEL;
-    else if (mutstr == "DIV") m_mut_type = DIV;
-    else if (mutstr == "DIVIDE") m_mut_type = DIVIDE;
-    else if (mutstr == "DIVIDE_INS") m_mut_type = D_INS;
-    else if (mutstr == "DIVIDE_DEL") m_mut_type = D_DEL;
+    
+    else if (mutstr == "COPY_MUT") m_mut_type = C_MUT;
+    else if (mutstr == "COPY_INS") m_mut_type = C_INS;
+    else if (mutstr == "COPY_DEL") m_mut_type = C_DEL;
+    else if (mutstr == "COPY_UNIFORM") m_mut_type = C_UNIFORM;
+    else if (mutstr == "COPY_SLIP") m_mut_type = C_SLIP;
+    
+    else if (mutstr == "DIV_MUT") m_mut_type = DS_MUT;
+    else if (mutstr == "DIV_INS") m_mut_type = DS_INS;
+    else if (mutstr == "DIV_DEL") m_mut_type = DS_DEL;
+    else if (mutstr == "DIV_UNIFORM") m_mut_type = DS_UNIFORM;
+    else if (mutstr == "DIV_SLIP") m_mut_type = DS_SLIP;
+    
+    else if (mutstr == "DIVIDE_MUT") m_mut_type = D1_MUT;
+    else if (mutstr == "DIVIDE_INS") m_mut_type = D1_INS;
+    else if (mutstr == "DIVIDE_DEL") m_mut_type = D1_DEL;
+    else if (mutstr == "DIVIDE_UNIFORM") m_mut_type = D1_UNIFORM;
+    else if (mutstr == "DIVIDE_SLIP") m_mut_type = D1_SLIP;
+    
     else if (mutstr == "PARENT") m_mut_type = PARENT;
-    else if (mutstr == "INJECT") m_mut_type = INJECT;
+    else if (mutstr == "INJECT_MUT") m_mut_type = I_MUT;
     else if (mutstr == "INJECT_INS") m_mut_type = I_INS;
     else if (mutstr == "INJECT_DEL") m_mut_type = I_DEL;
 
+    
     if (m_start < 0) { // start == -1  -->  all
       m_setconf = true;
       m_start = 0;
@@ -1047,15 +1069,27 @@
     if (m_setconf) {
       switch (m_mut_type) {
         case POINT: m_world->GetConfig().POINT_MUT_PROB.Set(m_prob); break;
-        case COPY: m_world->GetConfig().COPY_MUT_PROB.Set(m_prob); break;
-        case INS: m_world->GetConfig().INS_MUT_PROB.Set(m_prob); break;
-        case DEL: m_world->GetConfig().DEL_MUT_PROB.Set(m_prob); break;
-        case DIV: m_world->GetConfig().DIV_MUT_PROB.Set(m_prob); break;
-        case DIVIDE: m_world->GetConfig().DIVIDE_MUT_PROB.Set(m_prob); break;
-        case D_INS: m_world->GetConfig().DIVIDE_INS_PROB.Set(m_prob); break;
-        case D_DEL: m_world->GetConfig().DIVIDE_DEL_PROB.Set(m_prob); break;
+        
+        case C_MUT: m_world->GetConfig().COPY_MUT_PROB.Set(m_prob); break;
+        case C_INS: m_world->GetConfig().COPY_INS_PROB.Set(m_prob); break;
+        case C_DEL: m_world->GetConfig().COPY_DEL_PROB.Set(m_prob); break;
+        case C_UNIFORM: m_world->GetConfig().COPY_UNIFORM_PROB.Set(m_prob); break;
+        case C_SLIP: m_world->GetConfig().COPY_SLIP_PROB.Set(m_prob); break;
+          
+        case DS_MUT: m_world->GetConfig().DIV_MUT_PROB.Set(m_prob); break;
+        case DS_INS: m_world->GetConfig().DIV_INS_PROB.Set(m_prob); break;
+        case DS_DEL: m_world->GetConfig().DIV_DEL_PROB.Set(m_prob); break;
+        case DS_UNIFORM: m_world->GetConfig().DIV_UNIFORM_PROB.Set(m_prob); break;
+        case DS_SLIP: m_world->GetConfig().DIV_SLIP_PROB.Set(m_prob); break;
+          
+        case D1_MUT: m_world->GetConfig().DIVIDE_MUT_PROB.Set(m_prob); break;
+        case D1_INS: m_world->GetConfig().DIVIDE_INS_PROB.Set(m_prob); break;
+        case D1_DEL: m_world->GetConfig().DIVIDE_DEL_PROB.Set(m_prob); break;
+        case D1_UNIFORM: m_world->GetConfig().DIVIDE_UNIFORM_PROB.Set(m_prob); break;
+        case D1_SLIP: m_world->GetConfig().DIVIDE_SLIP_PROB.Set(m_prob); break;
+
         case PARENT: m_world->GetConfig().PARENT_MUT_PROB.Set(m_prob); break;
-        case INJECT: m_world->GetConfig().INJECT_MUT_PROB.Set(m_prob); break;
+        case I_MUT: m_world->GetConfig().INJECT_MUT_PROB.Set(m_prob); break;
         case I_INS: m_world->GetConfig().INJECT_INS_PROB.Set(m_prob); break;
         case I_DEL: m_world->GetConfig().INJECT_DEL_PROB.Set(m_prob); break;
         default:
@@ -1064,15 +1098,27 @@
     }
 
     switch (m_mut_type) {
-      case COPY: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyMutProb(m_prob); break;
-      case INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInsMutProb(m_prob); break;
-      case DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDelMutProb(m_prob); break;
-      case DIV: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivMutProb(m_prob); break;
-      case DIVIDE: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideMutProb(m_prob); break;
-      case D_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideInsProb(m_prob); break;
-      case D_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideDelProb(m_prob); break;
+      
+      case C_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyMutProb(m_prob); break;
+      case C_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyInsProb(m_prob); break;
+      case C_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyDelProb(m_prob); break;
+      case C_UNIFORM: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyUniformProb(m_prob); break;
+      case C_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopySlipProb(m_prob); break;
+        
+      case DS_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivMutProb(m_prob); break;
+      case DS_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivInsProb(m_prob); break;
+      case DS_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivDelProb(m_prob); break;
+      case DS_UNIFORM: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivUniformProb(m_prob); break;
+      case DS_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivSlipProb(m_prob); break;
+        
+      case D1_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideMutProb(m_prob); break;
+      case D1_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideInsProb(m_prob); break;
+      case D1_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideDelProb(m_prob); break;
+      case D1_UNIFORM: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideUniformProb(m_prob); break;
+      case D1_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideSlipProb(m_prob); break;
+        
       case PARENT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetParentMutProb(m_prob); break;
-      case INJECT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectMutProb(m_prob); break;
+      case I_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectMutProb(m_prob); break;
       case I_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectInsProb(m_prob); break;
       case I_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectDelProb(m_prob); break;
       default:
@@ -1084,7 +1130,15 @@
 class cActionModMutProb : public cAction
 {
 private:
-  enum { POINT, COPY, INS, DEL, DIV, DIVIDE, D_INS, D_DEL, PARENT, INJECT, I_INS, I_DEL } m_mut_type;
+  enum {
+    POINT,
+    C_MUT, C_INS, C_DEL, C_UNIFORM, C_SLIP,
+    DS_MUT, DS_INS, DS_DEL, DS_UNIFORM, DS_SLIP,
+    D1_MUT, D1_INS, D1_DEL, D1_UNIFORM, D1_SLIP,
+    PARENT,
+    I_MUT, I_INS, I_DEL
+  } m_mut_type;
+  
   double m_prob;
   int m_start;
   int m_end;
@@ -1093,7 +1147,7 @@
 public:
   cActionModMutProb(cWorld* world, const cString& args) : cAction(world, args), m_prob(0.0), m_start(-1), m_end(-1), m_setconf(false)
   {
-      cString mutstr("COPY");
+      cString mutstr("COPY_MUT");
       
       cString largs(args);
       if (largs.GetSize()) mutstr = largs.PopWord().ToUpper();
@@ -1102,15 +1156,27 @@
       if (largs.GetSize()) m_end = largs.PopWord().AsInt();
       
       if (mutstr == "POINT") m_mut_type = POINT;
-      else if (mutstr == "COPY") m_mut_type = COPY;
-      else if (mutstr == "INS" || mutstr == "INSERT") m_mut_type = INS;
-      else if (mutstr == "DEL" || mutstr == "DELETE") m_mut_type = DEL;
-      else if (mutstr == "DIV") m_mut_type = DIV;
-      else if (mutstr == "DIVIDE") m_mut_type = DIVIDE;
-      else if (mutstr == "DIVIDE_INS") m_mut_type = D_INS;
-      else if (mutstr == "DIVIDE_DEL") m_mut_type = D_DEL;
+
+      else if (mutstr == "COPY_MUT") m_mut_type = C_MUT;
+      else if (mutstr == "COPY_INS") m_mut_type = C_INS;
+      else if (mutstr == "COPY_DEL") m_mut_type = C_DEL;
+      else if (mutstr == "COPY_UNIFORM") m_mut_type = C_UNIFORM;
+      else if (mutstr == "COPY_SLIP") m_mut_type = C_SLIP;
+    
+      else if (mutstr == "DIV_MUT") m_mut_type = DS_MUT;
+      else if (mutstr == "DIV_INS") m_mut_type = DS_INS;
+      else if (mutstr == "DIV_DEL") m_mut_type = DS_DEL;
+      else if (mutstr == "DIV_UNIFORM") m_mut_type = DS_UNIFORM;
+      else if (mutstr == "DIV_SLIP") m_mut_type = DS_SLIP;
+    
+      else if (mutstr == "DIVIDE_MUT") m_mut_type = D1_MUT;
+      else if (mutstr == "DIVIDE_INS") m_mut_type = D1_INS;
+      else if (mutstr == "DIVIDE_DEL") m_mut_type = D1_DEL;
+      else if (mutstr == "DIVIDE_UNIFORM") m_mut_type = D1_UNIFORM;
+      else if (mutstr == "DIVIDE_SLIP") m_mut_type = D1_SLIP;
+        
       else if (mutstr == "PARENT") m_mut_type = PARENT;
-      else if (mutstr == "INJECT") m_mut_type = INJECT;
+      else if (mutstr == "INJECT_MUT") m_mut_type = I_MUT;
       else if (mutstr == "INJECT_INS") m_mut_type = I_INS;
       else if (mutstr == "INJECT_DEL") m_mut_type = I_DEL;
       
@@ -1136,15 +1202,27 @@
 
     switch (m_mut_type) {
       case POINT: prob += m_world->GetConfig().POINT_MUT_PROB.Get(); break;
-      case COPY: prob += m_world->GetConfig().COPY_MUT_PROB.Get(); break;
-      case INS: prob += m_world->GetConfig().INS_MUT_PROB.Get(); break;
-      case DEL: prob += m_world->GetConfig().DEL_MUT_PROB.Get(); break;
-      case DIV: prob += m_world->GetConfig().DIV_MUT_PROB.Get(); break;
-      case DIVIDE: prob += m_world->GetConfig().DIVIDE_MUT_PROB.Get(); break;
-      case D_INS: prob += m_world->GetConfig().DIVIDE_INS_PROB.Get(); break;
-      case D_DEL: prob += m_world->GetConfig().DIVIDE_DEL_PROB.Get(); break;
+
+      case C_MUT: prob += m_world->GetConfig().COPY_MUT_PROB.Get(); break;
+      case C_INS: prob += m_world->GetConfig().COPY_INS_PROB.Get(); break;
+      case C_DEL: prob += m_world->GetConfig().COPY_DEL_PROB.Get(); break;
+      case C_UNIFORM: prob += m_world->GetConfig().COPY_MUT_PROB.Get(); break;
+      case C_SLIP: prob += m_world->GetConfig().COPY_MUT_PROB.Get(); break;
+        
+      case DS_MUT: prob += m_world->GetConfig().DIV_MUT_PROB.Get(); break;
+      case DS_INS: prob += m_world->GetConfig().DIV_INS_PROB.Get(); break;
+      case DS_DEL: prob += m_world->GetConfig().DIV_DEL_PROB.Get(); break;
+      case DS_UNIFORM: prob += m_world->GetConfig().DIV_MUT_PROB.Get(); break;
+      case DS_SLIP: prob += m_world->GetConfig().DIV_MUT_PROB.Get(); break;
+        
+      case D1_MUT: prob += m_world->GetConfig().DIVIDE_MUT_PROB.Get(); break;
+      case D1_INS: prob += m_world->GetConfig().DIVIDE_INS_PROB.Get(); break;
+      case D1_DEL: prob += m_world->GetConfig().DIVIDE_DEL_PROB.Get(); break;
+      case D1_UNIFORM: prob += m_world->GetConfig().DIVIDE_MUT_PROB.Get(); break;
+      case D1_SLIP: prob += m_world->GetConfig().DIVIDE_MUT_PROB.Get(); break;
+      
       case PARENT: prob += m_world->GetConfig().PARENT_MUT_PROB.Get(); break;
-      case INJECT: prob += m_world->GetConfig().INJECT_MUT_PROB.Get(); break;
+      case I_MUT: prob += m_world->GetConfig().INJECT_MUT_PROB.Get(); break;
       case I_INS: prob += m_world->GetConfig().INJECT_INS_PROB.Get(); break;
       case I_DEL: prob += m_world->GetConfig().INJECT_DEL_PROB.Get(); break;
       default:
@@ -1154,15 +1232,27 @@
     if (m_setconf) {
       switch (m_mut_type) {
         case POINT: m_world->GetConfig().POINT_MUT_PROB.Set(prob); break;
-        case COPY: m_world->GetConfig().COPY_MUT_PROB.Set(prob); break;
-        case INS: m_world->GetConfig().INS_MUT_PROB.Set(prob); break;
-        case DEL: m_world->GetConfig().DEL_MUT_PROB.Set(prob); break;
-        case DIV: m_world->GetConfig().DIV_MUT_PROB.Set(prob); break;
-        case DIVIDE: m_world->GetConfig().DIVIDE_MUT_PROB.Set(prob); break;
-        case D_INS: m_world->GetConfig().DIVIDE_INS_PROB.Set(prob); break;
-        case D_DEL: m_world->GetConfig().DIVIDE_DEL_PROB.Set(prob); break;
+
+        case C_MUT: m_world->GetConfig().COPY_MUT_PROB.Set(prob); break;
+        case C_INS: m_world->GetConfig().COPY_INS_PROB.Set(prob); break;
+        case C_DEL: m_world->GetConfig().COPY_DEL_PROB.Set(prob); break;
+        case C_UNIFORM: m_world->GetConfig().COPY_UNIFORM_PROB.Set(prob); break;
+        case C_SLIP: m_world->GetConfig().COPY_SLIP_PROB.Set(prob); break;
+          
+        case DS_MUT: m_world->GetConfig().DIV_MUT_PROB.Set(prob); break;
+        case DS_INS: m_world->GetConfig().DIV_INS_PROB.Set(prob); break;
+        case DS_DEL: m_world->GetConfig().DIV_DEL_PROB.Set(prob); break;
+        case DS_UNIFORM: m_world->GetConfig().DIV_UNIFORM_PROB.Set(prob); break;
+        case DS_SLIP: m_world->GetConfig().DIV_SLIP_PROB.Set(prob); break;
+          
+        case D1_MUT: m_world->GetConfig().DIVIDE_MUT_PROB.Set(prob); break;
+        case D1_INS: m_world->GetConfig().DIVIDE_INS_PROB.Set(prob); break;
+        case D1_DEL: m_world->GetConfig().DIVIDE_DEL_PROB.Set(prob); break;
+        case D1_UNIFORM: m_world->GetConfig().DIVIDE_UNIFORM_PROB.Set(prob); break;
+        case D1_SLIP: m_world->GetConfig().DIVIDE_SLIP_PROB.Set(prob); break;
+        
         case PARENT: m_world->GetConfig().PARENT_MUT_PROB.Set(prob); break;
-        case INJECT: m_world->GetConfig().INJECT_MUT_PROB.Set(prob); break;
+        case I_MUT: m_world->GetConfig().INJECT_MUT_PROB.Set(prob); break;
         case I_INS: m_world->GetConfig().INJECT_INS_PROB.Set(prob); break;
         case I_DEL: m_world->GetConfig().INJECT_DEL_PROB.Set(prob); break;
         default:
@@ -1171,15 +1261,27 @@
     }
     
     switch (m_mut_type) {
-      case COPY: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyMutProb(prob); break;
-      case INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInsMutProb(prob); break;
-      case DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDelMutProb(prob); break;
-      case DIV: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivMutProb(prob); break;
-      case DIVIDE: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideMutProb(prob); break;
-      case D_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideInsProb(prob); break;
-      case D_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideDelProb(prob); break;
+      case C_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyMutProb(prob); break;
+      case C_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyInsProb(prob); break;
+      case C_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyDelProb(prob); break;
+      case C_UNIFORM: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopyUniformProb(prob); break;
+      case C_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetCopySlipProb(prob); break;
+        
+      case DS_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivMutProb(prob); break;
+      case DS_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivInsProb(prob); break;
+      case DS_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivDelProb(prob); break;
+      case DS_UNIFORM: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivUniformProb(prob); break;
+      case DS_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivSlipProb(prob); break;
+        
+      case D1_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideMutProb(prob); break;
+      case D1_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideInsProb(prob); break;
+      case D1_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideDelProb(prob); break;
+      case D1_UNIFORM: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideUniformProb(prob); break;
+      case D1_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideSlipProb(prob); break;
+        
+        
       case PARENT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetParentMutProb(prob); break;
-      case INJECT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectMutProb(prob); break;
+      case I_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectMutProb(prob); break;
       case I_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectInsProb(prob); break;
       case I_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectDelProb(prob); break;
       default:

Modified: development/source/cpu/cHardwareBase.cc
===================================================================
--- development/source/cpu/cHardwareBase.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/cpu/cHardwareBase.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -308,9 +308,9 @@
   
   // Need to come back and fix tese last two - per site instructions
   // Insert Mutations (per site)
-  if (m_organism->GetInsMutProb() > 0 && totalMutations < maxmut) {
+  if (m_organism->GetDivInsProb() > 0 && totalMutations < maxmut) {
     int num_mut = ctx.GetRandom().GetRandBinomial(child_genome.GetSize(),
-                                                  m_organism->GetInsMutProb());
+                                                  m_organism->GetDivInsProb());
     // If would make creature to big, insert up to MAX_CREATURE_SIZE
     if (num_mut + child_genome.GetSize() > MAX_CREATURE_SIZE) {
       num_mut = MAX_CREATURE_SIZE - child_genome.GetSize();
@@ -334,9 +334,9 @@
   
   
   // Delete Mutations (per site)
-  if (m_organism->GetDelMutProb() > 0 && totalMutations < maxmut) {
+  if (m_organism->GetDivDelProb() > 0 && totalMutations < maxmut) {
     int num_mut = ctx.GetRandom().GetRandBinomial(child_genome.GetSize(),
-                                                  m_organism->GetDelMutProb());
+                                                  m_organism->GetDivDelProb());
     // If would make creature too small, delete down to MIN_CREATURE_SIZE
     if (child_genome.GetSize() - num_mut < MIN_CREATURE_SIZE) {
       num_mut = child_genome.GetSize() - MIN_CREATURE_SIZE;
@@ -354,9 +354,9 @@
   
   
   // Uniform Mutations on Divide
-  if (m_organism->GetUniformMutProb() > 0 && totalMutations < maxmut) {
+  if (m_organism->GetDivUniformProb() > 0 && totalMutations < maxmut) {
     int num_mut = ctx.GetRandom().GetRandBinomial(child_genome.GetSize(), 
-                                                  m_organism->GetUniformMutProb() / mut_multiplier);
+                                                  m_organism->GetDivUniformProb() / mut_multiplier);
     
     // If we have lines to mutate...
     if (num_mut > 0 && totalMutations < maxmut) {

Modified: development/source/cpu/cHardwareExperimental.cc
===================================================================
--- development/source/cpu/cHardwareExperimental.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/cpu/cHardwareExperimental.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -254,6 +254,8 @@
       }
     }
   }
+  
+  m_io_expire = m_world->GetConfig().IO_EXPIRE.Get();
 }
 
 void cHardwareExperimental::cLocalThread::Reset(cHardwareExperimental* in_hardware, int in_id)
@@ -1224,9 +1226,9 @@
   const int reg_used = FindModifiedRegister(REG_BX);
   sInternalValue& reg = m_threads[m_cur_thread].reg[reg_used];
   
+  if (m_io_expire && reg.env_component && reg.oldest_component < m_last_output) return false;
+  
   // Do the "put" component
-  if (reg.env_component && reg.oldest_component < m_last_output) return false;
-  
   m_organism->DoOutput(ctx, reg.value);  // Check for tasks completed.
   m_last_output = m_cycle_count;  
   
@@ -1270,14 +1272,13 @@
   const int reg_used = FindModifiedRegister(REG_BX);
   sInternalValue& reg = m_threads[m_cur_thread].reg[reg_used];
   
+  if (m_io_expire && reg.env_component && reg.oldest_component < m_last_output) return false;
+  
   // Do the "put" component
-  if (!reg.env_component || reg.oldest_component >= m_last_output) {
-    m_organism->DoOutput(ctx, reg.value);  // Check for tasks completed.
-    m_last_output = m_cycle_count;
-    return true;
-  }
-  
-  return false;
+  m_organism->DoOutput(ctx, reg.value);  // Check for tasks completed.
+  m_last_output = m_cycle_count;
+
+  return true;
 }
 
 

Modified: development/source/cpu/cHardwareExperimental.h
===================================================================
--- development/source/cpu/cHardwareExperimental.h	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/cpu/cHardwareExperimental.h	2008-12-08 22:41:39 UTC (rev 3014)
@@ -194,6 +194,8 @@
     
     bool m_promoters_enabled:1;
     bool m_constituative_regulation:1;
+    
+    bool m_io_expire:1;
   };
   
 

Modified: development/source/cpu/cHardwareSMT.cc
===================================================================
--- development/source/cpu/cHardwareSMT.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/cpu/cHardwareSMT.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -851,7 +851,7 @@
 	
 	
   // Insert Mutations (per site)
-  if(m_organism->GetInsMutProb() > 0){
+  if(m_organism->GetDivInsProb() > 0){
     int num_mut = ctx.GetRandom().GetRandBinomial(injected_code.GetSize(),
 																					 m_organism->GetInjectInsProb());
     // If would make creature to big, insert up to MAX_CREATURE_SIZE
@@ -876,7 +876,7 @@
 	
 	
   // Delete Mutations (per site)
-  if( m_organism->GetDelMutProb() > 0 ){
+  if( m_organism->GetDivDelProb() > 0 ){
     int num_mut = ctx.GetRandom().GetRandBinomial(injected_code.GetSize(),
 																					 m_organism->GetInjectDelProb());
     // If would make creature too small, delete down to MIN_CREATURE_SIZE

Modified: development/source/cpu/cHardwareTransSMT.cc
===================================================================
--- development/source/cpu/cHardwareTransSMT.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/cpu/cHardwareTransSMT.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -855,7 +855,7 @@
 	
 	
   // Insert Mutations (per site)
-  if(m_organism->GetInsMutProb() > 0){
+  if(m_organism->GetDivInsProb() > 0){
     int num_mut = ctx.GetRandom().GetRandBinomial(injected_code.GetSize(),
 																					 m_organism->GetInjectInsProb());
     // If would make creature to big, insert up to MAX_CREATURE_SIZE
@@ -880,7 +880,7 @@
 	
 	
   // Delete Mutations (per site)
-  if( m_organism->GetDelMutProb() > 0 ){
+  if( m_organism->GetDivDelProb() > 0 ){
     int num_mut = ctx.GetRandom().GetRandBinomial(injected_code.GetSize(),
 																					 m_organism->GetInjectDelProb());
     // If would make creature too small, delete down to MIN_CREATURE_SIZE

Modified: development/source/main/cAvidaConfig.h
===================================================================
--- development/source/main/cAvidaConfig.h	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/main/cAvidaConfig.h	2008-12-08 22:41:39 UTC (rev 3014)
@@ -288,6 +288,7 @@
 	CONFIG_ADD_VAR(TRACE_EXECUTION, bool, 0, "Trace the execution of all organisms in the population (default=off,SLOW!)");
   CONFIG_ADD_VAR(BCAST_HOPS, int, 1, "Number of hops to broadcast an alarm");
   CONFIG_ADD_VAR(ALARM_SELF, bool, 0, "Does sending an alarm move sender IP to alarm label?\n0=no\n1=yes");
+  CONFIG_ADD_VAR(IO_EXPIRE, bool, 1, "Is the expiration functionality of '-expire' I/O instructions enabled?");
   
   CONFIG_ADD_GROUP(CONFIG_FILE_GROUP, "Configuration Files");
   CONFIG_ADD_VAR(DATA_DIR, cString, "data", "Directory in which config files are found");
@@ -372,24 +373,35 @@
   CONFIG_ADD_VAR(IMPLICIT_REPRO_END, int, 0, "Call Inst_Repro after executing the last instruction in the genome.");  
   CONFIG_ADD_VAR(IMPLICIT_REPRO_ENERGY, double, 0.0, "Call Inst_Repro if organism accumulates this amount of energy.");    
 
+  
   CONFIG_ADD_GROUP(MUTATION_GROUP, "Mutations");
   CONFIG_ADD_VAR(POINT_MUT_PROB, double, 0.0, "Mutation rate (per-location per update)");
+
   CONFIG_ADD_VAR(COPY_MUT_PROB, double, 0.0075, "Mutation rate (per copy)");
+  CONFIG_ADD_VAR(COPY_INS_PROB, double, 0.0075, "Insertion rate (per copy)");
+  CONFIG_ADD_VAR(COPY_DEL_PROB, double, 0.0075, "Deletion rate (per copy)");
+  CONFIG_ADD_VAR(COPY_UNIFORM_PROB, double, 0.0, "Uniform mutation probability (per copy)\n- Randomly applies any of the three classes of mutations (ins, del, point).");
   CONFIG_ADD_VAR(COPY_SLIP_PROB, double, 0.0, "Slip rate (per copy)");
-  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(DIV_INS_PROB, double, 0.0, "Insertion rate (per site, applied on divide)");
+  CONFIG_ADD_VAR(DIV_DEL_PROB, double, 0.0, "Deletion rate (per site, applied on divide)");
+  CONFIG_ADD_VAR(DIV_UNIFORM_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(DIV_SLIP_PROB, double, 0.0, "Slip rate");
+  
   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)");
+  CONFIG_ADD_VAR(DIVIDE_UNIFORM_PROB, double, 0.0, "Uniform mutation probability (per divide)\n- Randomly applies any of the three classes of mutations (ins, del, point).");
   CONFIG_ADD_VAR(DIVIDE_SLIP_PROB, double, 0.0, "Slip rate (per divide) - creates large deletions/duplications");
+  
+  CONFIG_ADD_VAR(INJECT_INS_PROB, double, 0.0, "Insertion rate (per site, applied on inject)");
+  CONFIG_ADD_VAR(INJECT_DEL_PROB, double, 0.0, "Deletion rate (per site, applied on inject)");
+  CONFIG_ADD_VAR(INJECT_MUT_PROB, double, 0.0, "Mutation rate (per site, applied on inject)");
+  
   CONFIG_ADD_VAR(SLIP_FILL_MODE, int, 0, "Fill insertions from slip mutations with 0=duplication, 1=nop-X, 2=random, 3=scrambled");
   CONFIG_ADD_VAR(PARENT_MUT_PROB, double, 0.0, "Per-site, in parent, on divide");
   CONFIG_ADD_VAR(SPECIAL_MUT_LINE, int, -1, "If this is >= 0, ONLY this line is mutated");
-  CONFIG_ADD_VAR(INJECT_INS_PROB, double, 0.0, "Insertion rate (per site, applied on inject)");
-  CONFIG_ADD_VAR(INJECT_DEL_PROB, double, 0.0, "Deletion rate (per site, applied on inject)");
-  CONFIG_ADD_VAR(INJECT_MUT_PROB, double, 0.0, "Mutation rate (per site, applied on inject)");
   CONFIG_ADD_VAR(META_COPY_MUT, double, 0.0, "Prob. of copy mutation rate changing (per gen)");
   CONFIG_ADD_VAR(META_STD_DEV, double, 0.0, "Standard deviation of meta mutation size.");
   CONFIG_ADD_VAR(MUT_RATE_SOURCE, int, 1, "1 = Mutation rates determined by environment.\n2 = Mutation rates inherited from parent.");

Modified: development/source/main/cMutationRates.cc
===================================================================
--- development/source/main/cMutationRates.cc	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/main/cMutationRates.cc	2008-12-08 22:41:39 UTC (rev 3014)
@@ -32,19 +32,29 @@
 void cMutationRates::Setup(cWorld* world)
 {
   copy.mut_prob = world->GetConfig().COPY_MUT_PROB.Get();
+  copy.ins_prob = world->GetConfig().COPY_INS_PROB.Get();
+  copy.del_prob = world->GetConfig().COPY_DEL_PROB.Get();
+  copy.uniform_prob = world->GetConfig().COPY_UNIFORM_PROB.Get();
   copy.slip_prob = world->GetConfig().COPY_SLIP_PROB.Get();
-  divide.ins_prob = world->GetConfig().INS_MUT_PROB.Get();
-  divide.del_prob = world->GetConfig().DEL_MUT_PROB.Get();
+  
+  divide.ins_prob = world->GetConfig().DIV_INS_PROB.Get();
+  divide.del_prob = world->GetConfig().DIV_DEL_PROB.Get();
   divide.mut_prob = world->GetConfig().DIV_MUT_PROB.Get();
-  divide.uniform_prob = world->GetConfig().UNIFORM_MUT_PROB.Get();
+  divide.uniform_prob = world->GetConfig().DIV_UNIFORM_PROB.Get();
+  divide.slip_prob = world->GetConfig().DIV_SLIP_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();
+  divide.divide_uniform_prob = world->GetConfig().DIVIDE_UNIFORM_PROB.Get();
   divide.divide_slip_prob = world->GetConfig().DIVIDE_SLIP_PROB.Get();
+  
   divide.parent_mut_prob = world->GetConfig().PARENT_MUT_PROB.Get();  
+  
   inject.ins_prob = world->GetConfig().INJECT_INS_PROB.Get();
   inject.del_prob = world->GetConfig().INJECT_DEL_PROB.Get();
   inject.mut_prob = world->GetConfig().INJECT_MUT_PROB.Get();
+  
   meta.copy_mut_prob = world->GetConfig().META_COPY_MUT.Get();
   meta.standard_dev = world->GetConfig().META_STD_DEV.Get();
 }
@@ -52,19 +62,29 @@
 void cMutationRates::Clear()
 {
   copy.mut_prob = 0.0;
+  copy.ins_prob = 0.0;
+  copy.del_prob = 0.0;
+  copy.uniform_prob = 0.0;
   copy.slip_prob = 0.0;
+  
   divide.ins_prob = 0.0;
   divide.del_prob = 0.0;
   divide.mut_prob = 0.0;
   divide.uniform_prob = 0.0;
+  divide.slip_prob = 0.0;
+  
   divide.divide_mut_prob = 0.0;
   divide.divide_ins_prob = 0.0;
   divide.divide_del_prob = 0.0;
+  divide.divide_uniform_prob = 0.0;
   divide.divide_slip_prob = 0.0;
+  
   divide.parent_mut_prob = 0.0;
+  
   inject.ins_prob = 0.0;
   inject.del_prob = 0.0;
   inject.mut_prob = 0.0;
+  
   meta.copy_mut_prob = 0.0;
   meta.standard_dev = 0.0;
 }
@@ -72,19 +92,29 @@
 void cMutationRates::Copy(const cMutationRates& in_muts)
 {
   copy.mut_prob = in_muts.copy.mut_prob;
+  copy.ins_prob = in_muts.copy.ins_prob;
+  copy.del_prob = in_muts.copy.del_prob;
+  copy.uniform_prob = in_muts.copy.uniform_prob;
   copy.slip_prob = in_muts.copy.slip_prob;
+  
   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.slip_prob = in_muts.divide.slip_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;
+  divide.divide_uniform_prob = in_muts.divide.divide_uniform_prob;
   divide.divide_slip_prob = in_muts.divide.divide_slip_prob;
+  
   divide.parent_mut_prob = in_muts.divide.parent_mut_prob;
+  
   inject.ins_prob = in_muts.inject.ins_prob;
   inject.del_prob = in_muts.inject.del_prob;
   inject.mut_prob = in_muts.inject.mut_prob;
+  
   meta.copy_mut_prob = in_muts.meta.copy_mut_prob;
   meta.standard_dev = in_muts.meta.standard_dev;
 }

Modified: development/source/main/cMutationRates.h
===================================================================
--- development/source/main/cMutationRates.h	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/main/cMutationRates.h	2008-12-08 22:41:39 UTC (rev 3014)
@@ -43,6 +43,9 @@
   // ...during an instruction copy...
   struct sCopyMuts {
     double mut_prob;
+    double ins_prob;
+    double del_prob;
+    double uniform_prob;
     double slip_prob;
   };
   sCopyMuts copy;
@@ -53,10 +56,12 @@
     double del_prob;        // Per site
     double mut_prob;        // Per site
     double uniform_prob;
+    double slip_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
     double divide_slip_prob;     // Max one per divide
+    double divide_uniform_prob;
     double parent_mut_prob;
   };
   sDivideMuts divide;
@@ -107,35 +112,61 @@
     return change;
   }
 
-  double GetCopyMutProb() const      { return copy.mut_prob; }
-  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; }
-  double GetParentMutProb() const    { return divide.parent_mut_prob; }
-  double GetInjectInsProb() const    { return inject.ins_prob; }
-  double GetInjectDelProb() const    { return inject.del_prob; }
-  double GetInjectMutProb() const    { return inject.mut_prob; }
-  double GetMetaCopyMutProb() const  { return meta.copy_mut_prob; }
-  double GetMetaStandardDev() const  { return meta.standard_dev; }
   
-  void SetCopyMutProb(double in_prob)   { copy.mut_prob          = in_prob; }
-  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; }
-  void SetParentMutProb(double in_prob) { divide.parent_mut_prob = in_prob; }
-  void SetInjectInsProb(double in_prob) { inject.ins_prob        = in_prob; }
-  void SetInjectDelProb(double in_prob) { inject.del_prob        = in_prob; }
-  void SetInjectMutProb(double in_prob) { inject.mut_prob        = in_prob; }
-  void SetMetaCopyMutProb(double in_prob) { meta.copy_mut_prob   = in_prob; }
-  void SetMetaStandardDev(double in_dev) { meta.standard_dev     = in_dev; }
+  double GetCopyMutProb() const       { return copy.mut_prob; }
+  double GetCopyInsProb() const       { return copy.ins_prob; }
+  double GetCopyDelProb() const       { return copy.del_prob; }
+  double GetCopyUniformProb() const   { return copy.uniform_prob; }
+  double GetCopySlipProb() const      { return copy.slip_prob; }
+  
+  double GetDivInsProb() const        { return divide.ins_prob; }
+  double GetDivDelProb() const        { return divide.del_prob; }
+  double GetDivMutProb() const        { return divide.mut_prob; }
+  double GetDivUniformProb() const    { return divide.uniform_prob; }
+  double GetDivSlipProb() const       { return divide.slip_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; }
+  double GetDivideUniformProb() const { return divide.divide_uniform_prob; }
+  double GetDivideSlipProb() const    { return divide.divide_slip_prob; }
+  
+  double GetParentMutProb() const     { return divide.parent_mut_prob; }
+  
+  double GetInjectInsProb() const     { return inject.ins_prob; }
+  double GetInjectDelProb() const     { return inject.del_prob; }
+  double GetInjectMutProb() const     { return inject.mut_prob; }
+  
+  double GetMetaCopyMutProb() const   { return meta.copy_mut_prob; }
+  double GetMetaStandardDev() const   { return meta.standard_dev; }
+  
+  
+  void SetCopyMutProb(double in_prob)       { copy.mut_prob = in_prob; }
+  void SetCopyInsProb(double in_prob)       { copy.ins_prob = in_prob; }
+  void SetCopyDelProb(double in_prob)       { copy.del_prob = in_prob; }
+  void SetCopyUniformProb(double in_prob)   { copy.uniform_prob = in_prob; }
+  void SetCopySlipProb(double in_prob)      { copy.slip_prob = in_prob; }
+  
+  void SetDivMutProb(double in_prob)        { divide.mut_prob = in_prob; }
+  void SetDivInsProb(double in_prob)        { divide.ins_prob = in_prob; }
+  void SetDivDelProb(double in_prob)        { divide.del_prob = in_prob; }
+  void SetDivUniformProb(double in_prob)    { divide.uniform_prob = in_prob; }
+  void SetDivSlipProb(double in_prob)       { divide.slip_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; }
+  void SetDivideUniformProb(double in_prob) { divide.divide_del_prob = in_prob; }
+  void SetDivideSlipProb(double in_prob)    { divide.divide_del_prob = in_prob; }
+  
+  void SetParentMutProb(double in_prob)     { divide.parent_mut_prob = in_prob; }
+  
+  void SetInjectInsProb(double in_prob)     { inject.ins_prob        = in_prob; }
+  void SetInjectDelProb(double in_prob)     { inject.del_prob        = in_prob; }
+  void SetInjectMutProb(double in_prob)     { inject.mut_prob        = in_prob; }
+  
+  void SetMetaCopyMutProb(double in_prob)   { meta.copy_mut_prob   = in_prob; }
+  void SetMetaStandardDev(double in_dev)    { meta.standard_dev     = in_dev; }
 };
 
 

Modified: development/source/main/cOrganism.h
===================================================================
--- development/source/main/cOrganism.h	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/source/main/cOrganism.h	2008-12-08 22:41:39 UTC (rev 3014)
@@ -336,10 +336,10 @@
   void SetCopyMutProb(double _p) { return m_mut_rates.SetCopyMutProb(_p); }
   void SetDivMutProb(double _p) { return m_mut_rates.SetDivMutProb(_p); }
 
-  double GetInsMutProb() const { return m_mut_rates.GetInsMutProb(); }
-  double GetDelMutProb() const { return m_mut_rates.GetDelMutProb(); }
+  double GetDivInsProb() const { return m_mut_rates.GetDivInsProb(); }
+  double GetDivDelProb() const { return m_mut_rates.GetDivDelProb(); }
   double GetDivMutProb() const { return m_mut_rates.GetDivMutProb(); }
-  double GetUniformMutProb() const { return m_mut_rates.GetUniformMutProb(); }
+  double GetDivUniformProb() const { return m_mut_rates.GetDivUniformProb(); }
   double GetParentMutProb() const { return m_mut_rates.GetParentMutProb();}
 
   double GetInjectInsProb() const { return m_mut_rates.GetInjectInsProb(); }

Modified: development/support/config/avida.cfg
===================================================================
--- development/support/config/avida.cfg	2008-12-08 20:55:25 UTC (rev 3013)
+++ development/support/config/avida.cfg	2008-12-08 22:41:39 UTC (rev 3014)
@@ -13,24 +13,34 @@
 VIEW_MODE 1     # Initial viewer screen
 CLONE_FILE -    # Clone file to load
 VERBOSITY 1     # 0 = No output at all
-                # 1=Normal output
+                # 1 = Normal output
                 # 2 = Verbose output, detailing progress
                 # 3 = High level of details, as available
                 # 4 = Print Debug Information, as applicable
 
 ### ARCH_GROUP ###
 # Architecture Variables
-WORLD_X 60        # Width of the Avida world
-WORLD_Y 60        # Height of the Avida world
-WORLD_GEOMETRY 2  # 1 = Bounded Grid
-                  # 2 = Torus
-                  # 3 = Clique
-RANDOM_SEED 0     # Random number seed (0 for based on time)
-HARDWARE_TYPE 0   # 0 = Original CPUs
-                  # 1 = New SMT CPUs
-                  # 2 = Transitional SMT
-                  # 3 = Experimental CPU
-                  # 4 = Gene Expression CPU
+WORLD_X 60         # Width of the Avida world
+WORLD_Y 60         # Height of the Avida world
+WORLD_Z 1          # Depth of the Avida world
+WORLD_GEOMETRY 2   # 1 = Bounded Grid
+                   # 2 = Torus
+                   # 3 = Clique
+                   # 4 = Hexagonal grid
+                   # 5 = Lattice
+RANDOM_SEED 0      # Random number seed (0 for based on time)
+HARDWARE_TYPE 0    # 0 = Original CPUs
+                   # 1 = New SMT CPUs
+                   # 2 = Transitional SMT
+                   # 3 = Experimental CPU
+                   # 4 = Gene Expression CPU
+SPECULATIVE 1      # Enable speculative execution
+TRACE_EXECUTION 0  # Trace the execution of all organisms in the population (default=off,SLOW!)
+BCAST_HOPS 1       # Number of hops to broadcast an alarm
+ALARM_SELF 0       # Does sending an alarm move sender IP to alarm label?
+                   # 0=no
+                   # 1=yes
+IO_EXPIRE 1        # Is the expiration functionality of '-expire' I/O instructions enabled?
 
 ### CONFIG_FILE_GROUP ###
 # Configuration Files
@@ -46,20 +56,79 @@
 
 ### DEME_GROUP ###
 # Demes and Germlines
-NUM_DEMES 1                  # Number of independent groups in the population.
-DEMES_USE_GERMLINE 0         # Whether demes use a distinct germline; 0=off
-DEMES_HAVE_MERIT 0           # Whether demes have merit; 0=no
-GERMLINE_COPY_MUT 0.0075     # Prob. of copy mutations occuring during
-                             # germline replication.
-GERMLINE_REPLACES_SOURCE 0   # Whether the source germline is updated
-                             # on replication; 0=no.
-GERMLINE_RANDOM_PLACEMENT 0  # Defines how the seed for a germline is placed
-                             #  within the deme;
-                             # 0 = organisms is placed in center of deme, no orientation
-                             # 1 = organisms is placed in center of deme and oriented
-                             # 2 = organism is randomly placed in deme, no orientation
-MAX_DEME_AGE 500             # The maximum age of a deme (in updates) to be
-                             # used for age-based replication (default=500).
+NUM_DEMES 1                             # Number of independent groups in the
+                                        # population (default=1).
+DEMES_USE_GERMLINE 0                    # Whether demes use a distinct germline (default=0).
+DEMES_PREVENT_STERILE 0                 # Whether to prevent sterile demes from
+                                        # replicating (default=0 or no).
+DEMES_RESET_RESOURCES 0                 # Reset resources in demes on replication. 
+                                        # 0 = reset both demes 
+                                        # 1 = reset target deme 
+                                        # 2 = deme resources remain unchanged
+DEMES_REPLICATE_SIZE 1                  # Number of identical organisms to create or copy from the
+                                        # source deme to the target deme (default=1).
+LOG_DEMES_REPLICATE 0                   # Log deme replications.  0/1 (off/on)
+DEMES_REPLICATE_LOG_START 0             # Update at which to start logging deme replications
+DEMES_PROB_ORG_TRANSFER 0.0             # Probablity of an organism being transferred from the
+                                        # source deme to the target deme (default=0.0).
+DEMES_ORGANISM_SELECTION 0              # How organisms are selected for transfer from
+                                        # source to target during deme replication.
+                                        # 0=random with replacement (default).
+                                        # 1=sequential.
+DEMES_ORGANISM_PLACEMENT 0              # How organisms are placed during deme replication.
+                                        # 0=cell-array middle (default).
+                                        # 1=deme center.
+                                        # 2=random placement.
+                                        # 3=sequential.
+DEMES_ORGANISM_FACING 0                 # How organisms are facing during deme replication.
+                                        # 0=unchanged (default).
+                                        # 1=northwest.
+                                        # 2=random.
+DEMES_MAX_AGE 500                       # The maximum age of a deme (in updates) to be
+                                        # used for age-based replication (default=500).
+DEMES_MAX_BIRTHS 100                    # The maximum number of births that can occur
+                                        # within a deme; used with birth-count
+                                        # replication (default=100).
+DEMES_MIM_EVENTS_KILLED_RATIO 0.7       # Minimum ratio of events killed required for event period to be a success.
+DEMES_MIM_SUCCESSFUL_EVENT_PERIODS 1    # Minimum number of consecutive event periods that must be a success.
+GERMLINE_COPY_MUT 0.0075                # Prob. of copy mutations occuring during
+                                        # germline replication (default=0.0075).
+GERMLINE_INS_MUT 0.05                   # Prob. of an insertion mutation occuring
+                                        # during germline replication (default=0.05).
+GERMLINE_DEL_MUT 0.05                   # Prob. of a deletion mutation occuring
+                                        # during germline replication (default=0.05).
+DEMES_REPLICATE_CPU_CYCLES 0.0          # Replicate a deme immediately after it has used
+                                        # this number of cpu cycles, normalized
+                                        # by number of orgs in deme (0 = OFF).
+DEMES_REPLICATE_TIME 0.0                # Replicate a deme immediately after it has used
+                                        # this number of cpu cycles, normalized
+                                        # by number of orgs in deme and organism merit (0 = OFF).
+DEMES_REPLICATE_BIRTHS 0                # Replicate a deme immediately after it has 
+                                        # produced this many offspring (0 = OFF).
+DEMES_REPLICATE_ORGS 0                  # Replicate a deme immediately once it reaches a
+                                        # certain number of organisms (0 = OFF).
+DEMES_REPLICATION_ONLY_RESETS 0         # Kin selection mode. Deme replication really:
+                                        # 1=resets deme resources
+                                        # 2=rests deme resources and re-injects organisms
+DEMES_MIGRATION_RATE 0.0                # Probability of an offspring being born in a different deme.
+DEMES_MIGRATION_METHOD 0                # How do we choose what demes an org may land in when it migrates?
+                                        # 0=all other demes
+                                        # 1=eight adjacent neighbors
+                                        # 2=two adjacent demes in list
+DEMES_NUM_X 0                           # Simulated number of demes in X dimension. Only used for migration. 
+DEMES_SEED_METHOD 0                     # Deme seeding method.
+                                        # 0=maintain old consistency
+                                        # 1=new method using genotypes
+DEMES_DIVIDE_METHOD 0                   # Deme divide method. Only works with DEMES_SEED_METHOD 1
+                                        # 0=replace and target demes
+                                        # 1= replace target deme, reset source deme to founders
+                                        # 2=replace target deme, leave source deme unchanged
+DEMES_DEFAULT_GERMLINE_PROPENSITY 0.0   # Default germline propensity of organisms in deme.
+                                        # For use with DEMES_DIVIDE_METHOD 2.
+DEMES_FOUNDER_GERMLINE_PROPENSITY -1.0  # Default germline propensity of founder organisms in deme.
+                                        # For use with DEMES_DIVIDE_METHOD 2.
+                                        #  <0 = OFF
+DEMES_PREFER_EMPTY 0                    # Give empty demes preference as targets of deme replication?
 
 ### REPRODUCTION_GROUP ###
 # Birth and Death
@@ -91,6 +160,14 @@
                           #     (after the divide, we have 2 children)
                           # 2 = Divide resets state of current thread only
                           #     (does not touch possible parasite threads)
+                          # 3 = Divide resets mother stats, but not state.
+                          # 4 = 3 + child inherits mother registers and stack values.
+EPIGENETIC_METHOD 0       # Inheritance of state information other than genome
+                          # 0 = none
+                          # 1 = offspring inherits registers and stacks of first thread
+                          # 1 = parent maintains registers and stacks of first thread
+                          # 
+                          # 1 = offspring and parent keep state information
 INJECT_METHOD 0           # 0 = Leaves the parasite thread state untouched.
                           # 1 = Resets the calling thread state on inject
 GENERATION_INC_METHOD 1   # 0 = Only the generation of the child is
@@ -98,6 +175,7 @@
                           # 1 = Both the generation of the mother and child are
                           #     increased on divide (good with DIVIDE_METHOD 1).
 RESET_INPUTS_ON_DIVIDE 0  # Reset environment inputs of parent upon successful divide.
+REPRO_METHOD 1            # Replace existing organism: 1=yes
 
 ### RECOMBINATION_GROUP ###
 # Sexual Recombination and Modularity
@@ -117,6 +195,8 @@
 CHILD_SIZE_RANGE 2.0         # Maximal differential between child and parent sizes.
 MIN_COPIED_LINES 0.5         # Code fraction which must be copied before divide.
 MIN_EXE_LINES 0.5            # Code fraction which must be executed before divide.
+MIN_GENOME_SIZE 0            # Minimum number of instructions allowed in a genome. 0 = OFF
+MAX_GENOME_SIZE 0            # Maximum number of instructions allowed in a genome. 0 = OFF
 REQUIRE_ALLOCATE 1           # (Original CPU Only) Require allocate before divide?
 REQUIRED_TASK -1             # Task ID required for successful divide.
 IMMUNITY_TASK -1             # Task providing immunity from the required task.
@@ -126,31 +206,40 @@
 IMPLICIT_REPRO_CPU_CYCLES 0  # Call Inst_Repro after this many cpu cycles. 0 = OFF
 IMPLICIT_REPRO_TIME 0        # Call Inst_Repro after this time used. 0 = OFF
 IMPLICIT_REPRO_END 0         # Call Inst_Repro after executing the last instruction in the genome.
+IMPLICIT_REPRO_ENERGY 0.0    # Call Inst_Repro if organism accumulates this amount of energy.
 
 ### MUTATION_GROUP ###
 # Mutations
-POINT_MUT_PROB 0.0    # Mutation rate (per-location per update)
-COPY_MUT_PROB 0.0075  # Mutation rate (per copy)
-COPY_SLIP_PROB 0.0    # Slip rate (per copy)
-INS_MUT_PROB 0.0      # Insertion rate (per site, applied on divide)
-DEL_MUT_PROB 0.0      # Deletion rate (per site, applied on divide)
-DIV_MUT_PROB 0.0      # Mutation rate (per site, applied on divide)
-UNIFORM_MUT_PROB 0.0  # Uniform mutation probability (per site, applied on divide)
-                      # - Randomly applies any of the three classes of mutations (ins, del, point).
-DIVIDE_MUT_PROB 0.0   # Mutation rate (per divide)
-DIVIDE_INS_PROB 0.05  # Insertion rate (per divide)
-DIVIDE_DEL_PROB 0.05  # Deletion rate (per divide)
-SLIP_FILL_MODE 0      # Fill insertions from slip mutations with 0=duplication, 1=nop-X, 2=random, 3=scrambled
-PARENT_MUT_PROB 0.0   # Per-site, in parent, on divide
-SPECIAL_MUT_LINE -1   # If this is >= 0, ONLY this line is mutated
-INJECT_INS_PROB 0.0   # Insertion rate (per site, applied on inject)
-INJECT_DEL_PROB 0.0   # Deletion rate (per site, applied on inject)
-INJECT_MUT_PROB 0.0   # Mutation rate (per site, applied on inject)
-META_COPY_MUT 0.0     # Prob. of copy mutation rate changing (per gen)
-META_STD_DEV 0.0      # Standard deviation of meta mutation size.
-MUT_RATE_SOURCE 1     # 1 = Mutation rates determined by environment.
-                      # 2 = Mutation rates inherited from parent.
-MIGRATION_RATE 0.0    # Probability of new orgs being born in a different deme -- only works with BIRTH_METHOD 6
+POINT_MUT_PROB 0.0       # Mutation rate (per-location per update)
+COPY_MUT_PROB 0.0075     # Mutation rate (per copy)
+COPY_INS_PROB 0.0075     # Insertion rate (per copy)
+COPY_DEL_PROB 0.0075     # Deletion rate (per copy)
+COPY_UNIFORM_PROB 0.0    # Uniform mutation probability (per copy)
+                         # - Randomly applies any of the three classes of mutations (ins, del, point).
+COPY_SLIP_PROB 0.0       # Slip rate (per copy)
+DIV_MUT_PROB 0.0         # Mutation rate (per site, applied on divide)
+DIV_INS_PROB 0.0         # Insertion rate (per site, applied on divide)
+DIV_DEL_PROB 0.0         # Deletion rate (per site, applied on divide)
+DIV_UNIFORM_PROB 0.0     # Uniform mutation probability (per site, applied on divide)
+                         # - Randomly applies any of the three classes of mutations (ins, del, point).
+DIV_SLIP_PROB 0.0        # Slip rate
+DIVIDE_MUT_PROB 0.0      # Mutation rate (per divide)
+DIVIDE_INS_PROB 0.05     # Insertion rate (per divide)
+DIVIDE_DEL_PROB 0.05     # Deletion rate (per divide)
+DIVIDE_UNIFORM_PROB 0.0  # Uniform mutation probability (per divide)
+                         # - Randomly applies any of the three classes of mutations (ins, del, point).
+DIVIDE_SLIP_PROB 0.0     # Slip rate (per divide) - creates large deletions/duplications
+INJECT_INS_PROB 0.0      # Insertion rate (per site, applied on inject)
+INJECT_DEL_PROB 0.0      # Deletion rate (per site, applied on inject)
+INJECT_MUT_PROB 0.0      # Mutation rate (per site, applied on inject)
+SLIP_FILL_MODE 0         # Fill insertions from slip mutations with 0=duplication, 1=nop-X, 2=random, 3=scrambled
+PARENT_MUT_PROB 0.0      # Per-site, in parent, on divide
+SPECIAL_MUT_LINE -1      # If this is >= 0, ONLY this line is mutated
+META_COPY_MUT 0.0        # Prob. of copy mutation rate changing (per gen)
+META_STD_DEV 0.0         # Standard deviation of meta mutation size.
+MUT_RATE_SOURCE 1        # 1 = Mutation rates determined by environment.
+                         # 2 = Mutation rates inherited from parent.
+MIGRATION_RATE 0.0       # Uniform probability of offspring migrating to a new deme.
 
 ### REVERSION_GROUP ###
 # Mutation Reversion
@@ -176,6 +265,10 @@
 SLICING_METHOD 1            # 0 = CONSTANT: all organisms get default...
                             # 1 = PROBABILISTIC: Run _prob_ proportional to merit.
                             # 2 = INTEGRATED: Perfectly integrated deterministic.
+                            # 3 = DemeProbabalistic, each deme gets the same number of CPU cycles, which are awarded probabalistically within each deme.
+                            # 4 = ProbDemeProbabalistic, each deme gets CPU cycles proportional to its living population size, which are awarded probabalistically within each deme.
+                            # 5 = CONSTANT BURST: all organisms get default, in SLICING_BURST_SIZE chunks
+SLICING_BURST_SIZE 1        # Sets the scheduler burst size, when supported.
 BASE_MERIT_METHOD 4         # 0 = Constant (merit independent of size)
                             # 1 = Merit proportional to copied size
                             # 2 = Merit prop. to executed size
@@ -191,8 +284,9 @@
                             # (-1 = none, 0 = First in INST_SET.)
 MERIT_BONUS_EFFECT 0        # in BASE_MERIT_METHOD 6, this sets how much merit is earned
                             # per instruction (-1 = penalty, 0 = no effect.)
-FITNESS_METHOD 0            # 0 = default, >1 = experimental
-FITNESS_COEFF 1.0           # A FITNESS_METHOD parameter
+FITNESS_METHOD 0            # 0 = default, >=1 = experimental
+FITNESS_COEFF_1 1.0         # 1st FITNESS_METHOD parameter
+FITNESS_COEFF_2 1.0         # 2nd FITNESS_METHOD parameter
 FITNESS_VALLEY 0            # in BASE_MERIT_METHOD 6, this creates valleys from
                             # FITNESS_VALLEY_START to FITNESS_VALLEY_STOP
                             # (0 = off, 1 = on)
@@ -222,19 +316,9 @@
                             #  2 = Assign precalculated gestation time
                             #  3 = Assign precalculated merit AND gestation time.
                             # Fitness will be evaluated for organism based on these settings.
+FASTFORWARD_UPDATES 0       # Fast-forward if the average generation has not changed in this many updates. (0 = off)
+FASTFORWARD_NUM_ORGS 0      # Fast-forward if population is equal to this
 
-### PROMOTER_GROUP ###
-# Promoters
-PROMOTERS_ENABLED 0             # Use the promoter/terminator execution scheme.
-                                # Certain instructions must also be included.
-PROMOTER_PROCESSIVITY 1.0       # Chance of not terminating after each cpu cycle.
-PROMOTER_PROCESSIVITY_INST 1.0  # Chance of not terminating after each instruction.
-PROMOTER_BG_STRENGTH 0          # Probability of positions that are not promoter
-                                # instructions initiating execution (promoters are 1).
-REGULATION_STRENGTH 1           # Strength added or subtracted to a promoter by regulation.
-REGULATION_DECAY_FRAC 0.1       # Fraction of regulation that decays away. 
-                                # Max regulation = 2^(REGULATION_STRENGTH/REGULATION_DECAY_FRAC)
-
 ### GENEOLOGY_GROUP ###
 # Geneology
 TRACK_MAIN_LINEAGE 1  # Keep all ancestors of the active population?
@@ -287,6 +371,14 @@
 NET_MUT_TYPE 0     # Type of message corruption.  0 = Random Single Bit, 1 = Always Flip Last
 NET_STYLE 0        # Communication Style.  0 = Random Next, 1 = Receiver Facing
 
+### ORGANISM_MESSAGING_GROUP ###
+# Organism Message-Based Communication
+MESSAGE_TYPE 0                      # Messaging Style. 0=Receiver Facing, 1=Broadcast
+MESSAGE_BCAST_RADIUS 1              # Broadcast message radius (cells)
+ORGANISMS_REMEMBER_MESSAGES 1       # Does an organism remember all messages it has sent or received? 0=false, 1=true (default)
+MESSAGE_QUEUE_SIZE -1               # Maximum number of unretrieved messages an organism can store (-1 for no limit is the default)
+MESSAGE_QUEUE_BEHAVIOR_WHEN_FULL 0  # 0 = Drop incoming message (default), 1 = Drop oldest unretrieved message
+
 ### BUY_SELL_GROUP ###
 # Buying and Selling Parameters
 SAVE_RECEIVED 0  # Enable storage of all inputs bought from other orgs
@@ -294,21 +386,19 @@
 SELL_PRICE 0     # price offered by organisms attempting to sell
 
 ### HOARD_RESOURCE_GROUP ###
-# Resource Hoarding Parameters
+# Resource Hoarding Parameters 
 # DO NOT USE with hardwares other than the "original".
-USE_RESOURCE_BINS 0							# Use resources stored in resource bins.
-ABSORB_RESOURCE_FRACTION .0025	# Fraction of available environmental resource 
-																# an organism absorbs with the collect 
-																# instruction.
-MULTI_ABSORB_TYPE 0							# What to do if collect is called on a range of resources.
-																# 0 = absorb a random resource in the range
-																# 1 = absorb the first resource in the range
-																# 2 = absorb the last resource in the range
-																# 3 = absorb ABSORB_RESOURCE_FRACTION / (# of resources in range) of each resource in the range
-MAX_TOTAL_STORED -1							# Maximum total amount of all resources an organism can store.
-																# < 0 = no maximum
-USE_STORED_FRACTION 1.0					# The fraction of stored resource to use.
-RETURN_STORED_ON_DEATH 1				# Return an organism's stored resources to the world when it dies?
+USE_RESOURCE_BINS 0             # Use resources stored in resource bins.
+ABSORB_RESOURCE_FRACTION .0025  # Fraction of available environmental resource an organism absorbs with the collect instruction.
+MULTI_ABSORB_TYPE 0             # What to do if collect is called on a range of resources.
+                                #  0 = absorb a random resource in the range
+                                #  1 = absorb the first resource in the range
+                                #  2 = absorb the last resource in the range
+                                #  3 = absorb ABSORB_RESOURCE_FRACTION / (# of resources in range) of each resource in the range
+MAX_TOTAL_STORED -1             # Maximum total amount of all resources an organism can store.
+                                #  <0 = no maximum
+USE_STORED_FRACTION 1.0         # The fraction of stored resource to use.
+RETURN_STORED_ON_DEATH 1        # Return an organism's stored resources to the world when it dies?
 
 ### ANALYZE_GROUP ###
 # Analysis Settings
@@ -318,21 +408,38 @@
 
 ### ENERGY_GROUP ###
 # Energy Settings
-ENERGY_ENABLED 0                       # Enable Energy Model. 0/1 (off/on)
-ENERGY_GIVEN_ON_INJECT 0               # Energy given to organism upon injection.
-ENERGY_GIVEN_AT_BIRTH 0                # Energy given to offspring upon birth.
-FRAC_PARENT_ENERGY_GIVEN_AT_BIRTH 0.5  # Fraction of perent's energy given to offspring.
-FRAC_ENERGY_DECAY_AT_BIRTH 0.0         # Fraction of energy lost due to decay during reproduction.
-NUM_INST_EXC_BEFORE_0_ENERGY 0         # Number of instructions executed before energy is exhausted.
-ENERGY_CAP -1                          # Maximum amount of energy that can be stored in an organism.  -1 means the cap is set to Max Int
-APPLY_ENERGY_METHOD 0                  # When should rewarded energy be applied to current energy?
-                                       # 0 = on divide
-                                       # 1 = on completion of task
-                                       # 2 = on sleep
-FRAC_ENERGY_TRANSFER 0.0               # Fraction of replaced organism's energy take by new resident
-LOG_SLEEP_TIMES 0                      # Log sleep start and end times. 0/1 (off/on)
-                                       # WARNING: may use lots of memory.
+ENERGY_ENABLED 0                               # Enable Energy Model. 0/1 (off/on)
+ENERGY_GIVEN_ON_INJECT 0.0                     # Energy given to organism upon injection.
+ENERGY_GIVEN_AT_BIRTH 0.0                      # Energy given to offspring upon birth.
+FRAC_PARENT_ENERGY_GIVEN_TO_ORG_AT_BIRTH 0.5   # Fraction of parent's energy given to offspring organism.
+FRAC_PARENT_ENERGY_GIVEN_TO_DEME_AT_BIRTH 0.5  # Fraction of parent's energy given to offspring deme.
+FRAC_ENERGY_DECAY_AT_ORG_BIRTH 0.0             # Fraction of energy lost due to decay during organism reproduction.
+FRAC_ENERGY_DECAY_AT_DEME_BIRTH 0.0            # Fraction of energy lost due to decay during deme reproduction.
+NUM_INST_EXC_BEFORE_0_ENERGY 0                 # Number of instructions executed before energy is exhausted.
+ENERGY_CAP -1.0                                # Maximum amount of energy that can be stored in an organism.  -1 means the cap is set to Max Double
+APPLY_ENERGY_METHOD 0                          # When should rewarded energy be applied to current energy?
+                                               # 0 = on divide
+                                               # 1 = on completion of task
+                                               # 2 = on sleep
+FRAC_ENERGY_TRANSFER 0.0                       # Fraction of replaced organism's energy take by new resident
+LOG_SLEEP_TIMES 0                              # Log sleep start and end times. 0/1 (off/on)
+                                               # WARNING: may use lots of memory.
+FRAC_ENERGY_RELINQUISH 1.0                     # Fraction of organisms energy to relinquish
+ENERGY_PASSED_ON_DEME_REPLICATION_METHOD 0     # Who get energy passed from a parent deme
+                                               # 0 = Energy divided among organisms injected to offspring deme
+                                               # 1 = Energy divided among cells in offspring deme
+INHERIT_EXE_RATE 0                             # Inherit energy rate from parent? 0=no  1=yes
+ATTACK_DECAY_RATE 0.0                          # Percent of cell's energy decayed by attack
+ENERGY_THRESH_LOW .33                          # Threshold percent below which energy level is considered low.  Requires ENERGY_CAP.
+ENERGY_THRESH_HIGH .75                         # Threshold percent above which energy level is considered high.  Requires ENERGY_CAP.
 
+### ENERGY_SHARING_GROUP ###
+# Energy Sharing Settings
+ENERGY_SHARING_METHOD 0        # Method for sharing energy.  0=receiver must actively receive/request, 1=energy pushed on receiver
+ENERGY_SHARING_PCT 0.0         # Percent of energy to share
+ENERGY_SHARING_INCREMENT 0.01  # Amount to change percent energy shared
+ENERGY_SHARING_LOSS 0.0        # Percent of shared energy lost in transfer
+
 ### SECOND_PASS_GROUP ###
 # Tracking metrics known after the running experiment previously
 TRACK_CCLADES 0                    # Enable tracking of coalescence clades
@@ -387,7 +494,33 @@
 ### BIOMIMETIC_GROUP ###
 # Biomimetic Features Settings
 BIOMIMETIC_REFRACTORY_PERIOD 0.0  # Number of updates affected by refractory period
-BIOMIMETIC_MOVEMENT_STEP 0        # Number of cells to move Avidian on move instruction
+BIOMIMETIC_MOVEMENT_STEP 1        # Number of cells to move Avidian on move instruction
+BIOMIMETIC_MOVEMENT_LOG 0         # Log detailed movement information (WARNING: large data file)
 BIOMIMETIC_MOVEMENT_FACTOR 1.0    # Scale merit bonus due to movement (m<1.0 applies a cost)
 BIOMIMETIC_EVAL_ON_MOVEMENT 0     # Force task evaluation on each movement step
 BIOMIMETIC_K 0                    # Carrying capacity in number of organisms
+
+### PHEROMONE_GROUP ###
+# Pheromone Settings
+PHEROMONE_ENABLED 0        # Enable pheromone usage. 0/1 (off/on)
+PHEROMONE_AMOUNT 1.0       # Amount of pheromone to add per drop
+PHEROMONE_DROP_MODE 0      # Where to drop pheromone
+                           # 0 = Half amount at src, half at dest
+                           # 1 = All at source
+                           # 2 = All at dest
+EXPLOIT_EXPLORE_PROB 0.00  # Probability of random exploration
+                           # instead of pheromone trail following
+LOG_PHEROMONE 0            # Log pheromone drops.  0/1 (off/on)
+PHEROMONE_LOG_START 0      # Update at which to start logging pheromone drops
+EXPLOIT_LOG_START 0        # Update at which to start logging exploit moves
+EXPLORE_LOG_START 0        # Update at which to start logging explore moves
+MOVETARGET_LOG_START 0     # Update at which to start logging movetarget moves
+LOG_INJECT 0               # Log injection of organisms.  0/1 (off/on)
+INJECT_LOG_START 0         # Update at which to start logging injection of
+                           # organisms
+
+### SYNCHRONIZATION_GROUP ###
+# Synchronization settings
+SYNC_FITNESS_WINDOW 100     # Number of updates over which to calculate fitness (default=100).
+SYNC_FLASH_LOSSRATE 0.0     # P() to lose a flash send (0.0==off).
+SYNC_TEST_FLASH_ARRIVAL -1  # CPU cycle at which an organism will receive a flash (off=-1, default=-1, analyze mode only.)




More information about the Avida-cvs mailing list