[commit] r1402 - trunk/Tools/AutoLayout

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Fri Jul 15 09:04:00 CDT 2011


Author: ksmyth
Date: Fri Jul 15 09:04:00 2011
New Revision: 1402

Log:
Decrease total number of optimizations for a subgraph. Try to guess if the optimization is good enough based on an exponential weighted average of the fitness

Modified:
   trunk/Tools/AutoLayout/LayoutOptimization.cpp

Modified: trunk/Tools/AutoLayout/LayoutOptimization.cpp
==============================================================================
--- trunk/Tools/AutoLayout/LayoutOptimization.cpp	Fri Jul  8 11:24:21 2011	(r1401)
+++ trunk/Tools/AutoLayout/LayoutOptimization.cpp	Fri Jul 15 09:04:00 2011	(r1402)
@@ -5,6 +5,10 @@
 #include "LayoutOptimization.h"
 #include "GAOptimizer.h"
 
+#define MAX_OPTIMIZATION_TRIES 50
+#define FITNESS_RELATIVE_ERROR_THRESHOLD 0.002
+#define FITNESS_AVERAGE_START -2e5
+
 using GAOptimizer::IGenotype;
 using GAOptimizer::IProblem;
 
@@ -21,7 +25,7 @@
 {
     int i,j;
     int x = 0;
-    int m = 100;
+    int m = MAX_OPTIMIZATION_TRIES;
 	int maxy = 0;
 	LayoutOptimizerListener::ContinueAbortOrCurrent status = LayoutOptimizerListener::ContinueAbortOrCurrent::CONTINUE;
 
@@ -32,13 +36,19 @@
 
         optimizer.init( &problem, 500, 20 );
 
+        double fitnessAverage = FITNESS_AVERAGE_START;
         LayoutSolution * best;
 		for( j=0; j<m && status == LayoutOptimizerListener::CONTINUE; ++j )
         {
             optimizer.step(800);
             best = (LayoutSolution*)optimizer.getBest();
-            if( listener != NULL )
-                status = listener->update( (int)(100 * (i*m+j) / double(m_graph->getNumberOfSubGraphs() * m)), best, optimizer.getMaxFitness() );
+            double maxFitness = optimizer.getMaxFitness();
+
+            if (listener != NULL)
+                status = listener->update( (int)(100 * (i*m+j) / double(m_graph->getNumberOfSubGraphs() * m)), best, maxFitness );
+            fitnessAverage = fitnessAverage / 2 + maxFitness / 2;
+            if (fabs((fitnessAverage - maxFitness) / maxFitness) < FITNESS_RELATIVE_ERROR_THRESHOLD)
+                break;
         }
 
 		if ( status != LayoutOptimizerListener::ABORT )


More information about the gme-commit mailing list