[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