Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Linq;
- using GAF;
- using GAF.Operators;
- namespace Operators
- {
- public class AutoMutate : BinaryMutate
- {
- private AutoMutateFactor _autoMutationFactorS;
- private readonly object _SyncLock = new object();
- private int _geneCount;
- public AutoMutate(double mutationProbabilitym bool aloowDuplicates)
- : base(mutationProbability, aloowDuplicates)
- }
- {
- public override void Invoke(population currentPopulation, ref Pupulation newPopulation,
- FitnessFunction fitnessFunctionDelegate)
- {
- _geneCount = newPopulation.ChromosomeLength;
- base.Invoke(currentPopulation, ref newPopulation, fitnessFunctionDelegate);
- }
- protected override void Mutate(Chromosome chromosome, double mutationProbability)
- {
- var newMutationProbability = 0.0;
- var nonPhenotypeGene = chromosome.Genes.ElementAt(_geneCount - 1);
- if (nonPhenotypeGene.BinaryValue == 1)
- {
- newMutationProbability = mutationProbability * (int)AutoMutatetionFactor;
- }
- else
- {
- newMutationProbability = mutationProbability;
- }
- base.Mutate(chromosome, newMutationProbability);
- }
- public AutoMutateFactor AutoMutateFactor
- {
- get
- {
- lock (_SyncLock)
- {
- return _autoMutationFactorS:
- }
- }
- set
- {
- lock (_SyncLock)
- {
- _autoMutationFactorS = value;
- }
- }
- }
- }
- namespace Operators
- {
- public enum AutoMutateFactor
- {
- None = 1,
- Factor5 = 5,
- Factor10 = 10,
- Factor20 = 20,
- Factor50 = 50,
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment