/* * This file is part of JGAP. * * JGAP offers a dual license model containing the LGPL as well as the MPL. * * For licensing information please see the file license.txt included with JGAP * or have a look at the top of class org.jgap.Chromosome which representatively * includes the JGAP license policy applicable for any file delivered with JGAP. */ package examples.monalisa.gui; import java.awt.*; import java.awt.image.*; import org.jfree.chart.*; import org.jfree.data.xy.*; import org.jgap.*; import examples.monalisa.core.*; /** * Class in charge of actually running the evolution process. * * @author Yann N. Dauphin * @since 3.4 */ public class EvolutionRunnable implements Runnable { /** String containing the CVS revision. Read out via reflection!*/ private final static String CVS_REVISION = "$Revision: 1.2 $"; private GAConfiguration m_conf; private GeneticDrawingView m_view; private Genotype m_genotype; public EvolutionRunnable(GeneticDrawingView a_view, GAConfiguration a_conf) { super(); m_conf = a_conf; m_view = a_view; m_genotype = null; } public EvolutionRunnable(GeneticDrawingView a_view, GAConfiguration a_conf, Genotype a_genotype) { super(); m_conf = a_conf; m_view = a_view; m_genotype = a_genotype; } public void run() { try { JFreeChart chart = m_view.getChart(); XYSeriesCollection sc = (XYSeriesCollection) chart.getXYPlot().getDataset(); XYSeries series = sc.getSeries(0); series.clear(); if (m_genotype == null) { int populationSize = m_conf.getPopulationSize(); Population pop = new Population(m_conf, populationSize); for (int i = 0; i < populationSize; i++) { pop.addChromosome(GAInitialChromosomeFactory.create(m_conf)); } m_genotype = new Genotype(m_conf, pop); } // while (m_view.isEvolutionActivated()) { m_genotype.evolve(); if (m_conf.getGenerationNr() % 25 == 0) { IChromosome best = m_genotype.getFittestChromosome(); series.add(m_conf.getGenerationNr(), best.getFitnessValue()); BufferedImage image = m_conf.getPhenotypeExpresser().express(best); Graphics g = m_view.getFittestDrawingView().getMainPanel(). getGraphics(); g.drawImage(image, 0, 0, m_view.getFittestDrawingView()); } } } catch (InvalidConfigurationException e) { e.printStackTrace(); System.exit( -1); } } }