[6152] | 1 | /*
|
---|
| 2 | Copyright 2006 by Sean Luke
|
---|
| 3 | Licensed under the Academic Free License version 3.0
|
---|
| 4 | See the file "LICENSE" for more information
|
---|
| 5 | */
|
---|
| 6 |
|
---|
| 7 |
|
---|
| 8 | package ec;
|
---|
| 9 |
|
---|
| 10 | /*
|
---|
| 11 | * SelectionMethod.java
|
---|
| 12 | *
|
---|
| 13 | * Created: Mon Aug 30 19:19:56 1999
|
---|
| 14 | * By: Sean Luke
|
---|
| 15 | */
|
---|
| 16 |
|
---|
| 17 | /**
|
---|
| 18 | * A SelectionMethod is a BreedingSource which provides direct IMMUTABLE pointers
|
---|
| 19 | * to original individuals in an old population, not fresh mutable copies.
|
---|
| 20 | * If you use a SelectionMethod as your BreedingSource, you must
|
---|
| 21 | * SelectionMethods might include Tournament Selection, Fitness Proportional Selection, etc.
|
---|
| 22 | * SelectionMethods don't have parent sources.
|
---|
| 23 | *
|
---|
| 24 | <p><b>Typical Number of Individuals Produced Per <tt>produce(...)</tt> call</b><br>
|
---|
| 25 | Always 1.
|
---|
| 26 |
|
---|
| 27 | * @author Sean Luke
|
---|
| 28 | * @version 1.0
|
---|
| 29 | */
|
---|
| 30 |
|
---|
| 31 | public abstract class SelectionMethod extends BreedingSource
|
---|
| 32 | {
|
---|
| 33 | public static final int INDS_PRODUCED = 1;
|
---|
| 34 |
|
---|
| 35 | /** Returns 1 (the typical default value) */
|
---|
| 36 | public int typicalIndsProduced() { return INDS_PRODUCED; }
|
---|
| 37 |
|
---|
| 38 | /** A default version of produces -- this method always returns
|
---|
| 39 | true under the assumption that the selection method works
|
---|
| 40 | with all Fitnesses. If this isn't the case, you should override
|
---|
| 41 | this to return your own assessment. */
|
---|
| 42 | public boolean produces(final EvolutionState state,
|
---|
| 43 | final Population newpop,
|
---|
| 44 | final int subpopulation,
|
---|
| 45 | final int thread)
|
---|
| 46 | {
|
---|
| 47 | return true;
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 |
|
---|
| 51 | /** A default version of prepareToProduce which does nothing. */
|
---|
| 52 | public void prepareToProduce(final EvolutionState s,
|
---|
| 53 | final int subpopulation,
|
---|
| 54 | final int thread)
|
---|
| 55 | { return; }
|
---|
| 56 |
|
---|
| 57 | /** A default version of finishProducing, which does nothing. */
|
---|
| 58 | public void finishProducing(final EvolutionState s,
|
---|
| 59 | final int subpopulation,
|
---|
| 60 | final int thread)
|
---|
| 61 | { return; }
|
---|
| 62 |
|
---|
| 63 | public int produce(final int min,
|
---|
| 64 | final int max,
|
---|
| 65 | final int start,
|
---|
| 66 | final int subpopulation,
|
---|
| 67 | final Individual[] inds,
|
---|
| 68 | final EvolutionState state,
|
---|
| 69 | final int thread)
|
---|
| 70 | {
|
---|
| 71 | int n=INDS_PRODUCED;
|
---|
| 72 | if (n<min) n = min;
|
---|
| 73 | if (n>max) n = max;
|
---|
| 74 |
|
---|
| 75 | for(int q=0;q<n;q++)
|
---|
| 76 | inds[start+q] = state.population.subpops[subpopulation].
|
---|
| 77 | individuals[produce(subpopulation,state,thread)];
|
---|
| 78 | return n;
|
---|
| 79 | }
|
---|
| 80 |
|
---|
| 81 | /** An alternative form of "produce" special to Selection Methods;
|
---|
| 82 | selects an individual from the given subpopulation and
|
---|
| 83 | returns its position in that subpopulation. */
|
---|
| 84 | public abstract int produce(final int subpopulation,
|
---|
| 85 | final EvolutionState state,
|
---|
| 86 | final int thread);
|
---|
| 87 | }
|
---|
| 88 |
|
---|
| 89 |
|
---|
| 90 |
|
---|