001    package org.jaga.masterAlgorithm;
002    
003    import org.jaga.definitions.*;
004    
005    /**
006     * TODO: Complete these comments.
007     *
008     * <p><u>Project:</u> JAGA - Java API for Genetic Algorithms.</p>
009     *
010     * <p><u>Company:</u> University College London and JAGA.Org
011     *    (<a href="http://www.jaga.org" target="_blank">http://www.jaga.org</a>).
012     * </p>
013     *
014     * <p><u>Copyright:</u> (c) 2004 by G. Paperin.<br/>
015     *    This program is free software; you can redistribute it and/or modify
016     *    it under the terms of the GNU General Public License as published by
017     *    the Free Software Foundation, ONLY if you include a note of the original
018     *    author(s) in any redistributed/modified copy.<br/>
019     *    This program is distributed in the hope that it will be useful,
020     *    but WITHOUT ANY WARRANTY; without even the implied warranty of
021     *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
022     *    GNU General Public License for more details.<br/>
023     *    You should have received a copy of the GNU General Public License
024     *    along with this program; if not, write to the Free Software
025     *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
026     *    or see http://www.gnu.org/licenses/gpl.html</p>
027     *
028     * @author Greg Paperin (greg@jaga.org)
029     *
030     * @version JAGA public release 1.0 beta
031     */
032    
033    public class InitialPopulationGA extends ElitistGA {
034    
035            private Object [] initData = new Object[0];
036    
037            public InitialPopulationGA() {}
038    
039            public InitialPopulationGA(double eliteProportion) {
040                    super(eliteProportion);
041            }
042    
043            public InitialPopulationGA(double eliteProportion, double badProportion) {
044                    super(eliteProportion, badProportion);
045            }
046    
047            public InitialPopulationGA(GAParameterSet parameters, double eliteProportion) {
048                    super(parameters, eliteProportion);
049            }
050    
051            public InitialPopulationGA(GAParameterSet parameters, double eliteProportion, double badProportion) {
052                    super(parameters, eliteProportion, badProportion);
053            }
054    
055            public InitialPopulationGA(Object [] initData) {
056                    setInitialPopulation(initData);
057            }
058    
059            public InitialPopulationGA(Object [] initData, double eliteProportion) {
060                    super(eliteProportion);
061                    setInitialPopulation(initData);
062            }
063    
064            public InitialPopulationGA(Object [] initData, double eliteProportion, double badProportion) {
065                    super(eliteProportion, badProportion);
066                    setInitialPopulation(initData);
067            }
068    
069            public InitialPopulationGA(Object [] initData, GAParameterSet parameters, double eliteProportion) {
070                    super(parameters, eliteProportion);
071                    setInitialPopulation(initData);
072            }
073    
074            public InitialPopulationGA(Object [] initData, GAParameterSet parameters, double eliteProportion, double badProportion) {
075                    super(parameters, eliteProportion, badProportion);
076                    setInitialPopulation(initData);
077            }
078    
079            public void setInitialPopulation(Object [] initData) {
080                    if (null == initData)
081                            throw new NullPointerException("initData may not be null");
082                    this.initData = initData;
083            }
084    
085            protected Population createInitialPopulation(GAParameterSet params) {
086                    Population pop = createEmptyPopulation(params);
087    
088                    for (int i = 0; i < params.getPopulationSize() && i < initData.length; i++) {
089                            Individual ind = params.getIndividualsFactory().createSpecificIndividual(initData[i], params);
090                            if (null != ind)
091                                    pop.add(ind);
092                    }
093    
094                    while (pop.getSize() < params.getPopulationSize()) {
095                            Individual ind;
096                            ind = params.getIndividualsFactory().createRandomIndividual(params);
097                            pop.add(ind);
098                    }
099                    return pop;
100            }
101    }