examples.monalisa.gui.EvolutionRunnable.java Source code

Java tutorial

Introduction

Here is the source code for examples.monalisa.gui.EvolutionRunnable.java

Source

/*
 * 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);
        }
    }
}