/*
Copyright 2006 by Sean Luke
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package ec.rule.breed;
import ec.rule.*;
import ec.*;
import ec.util.*;
/*
* RuleMutationPipeline.java
*
* Created: Tue Mar 13 15:03:12 EST 2001
* By: Sean Luke
*/
/**
*
RuleMutationPipeline is a BreedingPipeline which implements a simple default Mutation
for RuleIndividuals. Normally it takes an individual and returns a mutated
child individual. RuleMutationPipeline works by calling mutateRules(...) on each RuleSet in the
parent individual.
Typical Number of Individuals Produced Per produce(...) call
1
Number of Sources
1
Default Base
rule.mutate (not that it matters)
* @author Sean Luke
* @version 1.0
*/
public class RuleMutationPipeline extends BreedingPipeline
{
public static final String P_MUTATION = "mutate";
public static final int INDS_PRODUCED = 1;
public static final int NUM_SOURCES = 1;
public Parameter defaultBase() { return RuleDefaults.base().push(P_MUTATION); }
/** Returns 1 */
public int numSources() { return NUM_SOURCES; }
/** Returns 1 */
// DO I need to change this?
public int typicalIndsProduced() { return (INDS_PRODUCED); }
public int produce(final int min,
final int max,
final int start,
final int subpopulation,
final Individual[] inds,
final EvolutionState state,
final int thread)
{
// grab n individuals from our source and stick 'em right into inds.
// we'll modify them from there
int n = sources[0].produce(min,max,start,subpopulation,inds,state,thread);
// should we bother?
if (!state.random[thread].nextBoolean(likelihood))
return reproduce(n, start, subpopulation, inds, state, thread, false); // DON'T produce children from source -- we already did
// clone the individuals if necessary
if (!(sources[0] instanceof BreedingPipeline))
for(int q=start;q
Ads help maintain this website.