[Avida-SVN] r1928 - in branches/dkdev/source: actions main

dknoester at myxo.css.msu.edu dknoester at myxo.css.msu.edu
Mon Aug 13 08:00:13 PDT 2007


Author: dknoester
Date: 2007-08-13 11:00:13 -0400 (Mon, 13 Aug 2007)
New Revision: 1928

Modified:
   branches/dkdev/source/actions/PopulationActions.cc
   branches/dkdev/source/main/cPopulation.cc
Log:
Reimplementation of multi-objective network fitness functions.

Modified: branches/dkdev/source/actions/PopulationActions.cc
===================================================================
--- branches/dkdev/source/actions/PopulationActions.cc	2007-08-13 12:36:00 UTC (rev 1927)
+++ branches/dkdev/source/actions/PopulationActions.cc	2007-08-13 15:00:13 UTC (rev 1928)
@@ -903,6 +903,12 @@
     else if (in_trigger == "topo-clustering-coeff-merit") m_rep_trigger = 11;
     else if (in_trigger == "topo-inverse-clustering-coeff-merit") m_rep_trigger = 12;
     else if (in_trigger == "topo-target-clustering-coeff-merit") m_rep_trigger = 13;
+    else if (in_trigger == "topo-cpl-edge-mult-merit") m_rep_trigger = 14;
+    else if (in_trigger == "topo-cpl-edge-add-merit") m_rep_trigger = 15;
+    else if (in_trigger == "topo-cpl-edge-norm-merit") m_rep_trigger = 16;
+    else if (in_trigger == "topo-ladder-edge-merit") m_rep_trigger = 17;
+    else if (in_trigger == "topo-ladder-cpl-merit") m_rep_trigger = 18;
+    
 //    else if (in_trigger == "topo-2cells-edge-merit") m_rep_trigger = 7;
 //    else if (in_trigger == "topo-2cells-path-merit") m_rep_trigger = 8;
 //    else if (in_trigger == "message-collection") m_rep_trigger = 9;

Modified: branches/dkdev/source/main/cPopulation.cc
===================================================================
--- branches/dkdev/source/main/cPopulation.cc	2007-08-13 12:36:00 UTC (rev 1927)
+++ branches/dkdev/source/main/cPopulation.cc	2007-08-13 15:00:13 UTC (rev 1928)
@@ -896,7 +896,8 @@
         if(boost::num_vertices(network) < (unsigned int)source_deme.GetSize()) continue;
         if(!network_is_connected(network)) continue;
         m_world->GetStats().TopologyReplication(network);
-
+        
+        // What is the maximum possible CPL?
         source_germline_merit = pow(characteristic_path_length(network), 2);
         break;
       }        
@@ -948,6 +949,80 @@
         source_germline_merit = pow(pow(0.01, abs(target_coeff - coeff))*100, 2);
         break;
       }
+      case 14: {
+        // Replicate demes that are connected, and set the merit based on a combination of
+        // characteristic path length and edge count (1):
+        // \[Merit=\Big((CPL_{max}-CPL_{mean}+1) * (L_{max}-L(G)+1)\Big)^2\]
+        m_world->GetStats().Topology(network);
+        if(boost::num_vertices(network) < (unsigned int)source_deme.GetSize()) continue;
+        if(!network_is_connected(network)) continue;
+        m_world->GetStats().TopologyReplication(network);
+        
+        source_germline_merit = pow((0.75*boost::num_vertices(network) - characteristic_path_length(network) + 1)
+                                    * (max_edges(source_deme) - boost::num_edges(network) + 1), 2);
+        break;
+      }
+      case 15: {
+        // Replicate demes that are connected, and set the merit based on a combination of
+        // characteristic path length and edge count (2):
+        // \[Merit=(CPL_{max}-CPL_{mean}+1)^2 + (L_{max}-L(G)+1)^2\]
+        m_world->GetStats().Topology(network);
+        if(boost::num_vertices(network) < (unsigned int)source_deme.GetSize()) continue;
+        if(!network_is_connected(network)) continue;
+        m_world->GetStats().TopologyReplication(network);
+        
+        source_germline_merit = pow(0.75*boost::num_vertices(network) - characteristic_path_length(network) + 1, 2)
+                                    + pow(max_edges(source_deme) - boost::num_edges(network) + 1.0, 2);
+        break;
+      }
+      case 16: {
+        // Replicate demes that are connected, and set the merit based on a combination of
+        // characteristic path length and edge count, where each is normalized (3):
+        // \[Merit=\Big(100*\frac{CPL_{max}-CPL_{mean}}{CPL_{max}} + 100*\frac{L_{max}-L(G)}{L_{max}}+1\Big)^2\]
+        m_world->GetStats().Topology(network);
+        if(boost::num_vertices(network) < (unsigned int)source_deme.GetSize()) continue;
+        if(!network_is_connected(network)) continue;
+        m_world->GetStats().TopologyReplication(network);
+
+        source_germline_merit = pow(
+                                    100*(0.75*boost::num_vertices(network) 
+                                         - characteristic_path_length(network)) / (0.75*boost::num_vertices(network))
+                                    + 100*((max_edges(source_deme) - boost::num_edges(network)) / max_edges(source_deme))
+                                    + 1
+                                    , 2);
+        break;
+      }
+      case 17: {
+        // Replicate demes that are connected, and set the merit to a ladder fitness function 
+        // based on CPL and edge count (min edges -> CPL) (~5% error):
+        m_world->GetStats().Topology(network);
+        if(boost::num_vertices(network) < (unsigned int)source_deme.GetSize()) continue;
+        if(!network_is_connected(network)) continue;
+        m_world->GetStats().TopologyReplication(network);
+
+        source_germline_merit = pow(max_edges(source_deme) - boost::num_edges(network) + 1.0, 2);
+        // ~5% error margin...
+        if(boost::num_edges(network) <= (boost::num_vertices(network) + 2)) {
+          source_germline_merit += pow(0.75*boost::num_vertices(network) - characteristic_path_length(network) + 1, 2);
+        }
+        break;
+      }
+      case 18: {
+        // Replicate demes that are connected, and set the merit to a ladder fitness function 
+        // based on CPL and edge count (min CPL -> edges) (error margin):
+        m_world->GetStats().Topology(network);
+        if(boost::num_vertices(network) < (unsigned int)source_deme.GetSize()) continue;
+        if(!network_is_connected(network)) continue;
+        m_world->GetStats().TopologyReplication(network);
+        
+        double cpl = characteristic_path_length(network);
+        source_germline_merit = pow(0.75*boost::num_vertices(network) - cpl + 1, 2);
+        if((cpl > 3.25) && (cpl < 3.75)) {
+          source_germline_merit += pow(max_edges(source_deme) - boost::num_edges(network) + 1.0, 2);
+        }
+        break;
+      }
+        
 //      case 8: {
 //        // Replicate demes that have connected two randomly-selected cells.
 //        // Merit is the inverse of edge count.




More information about the Avida-cvs mailing list