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 }