[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