示例#1
0
        /**
         * Starts the genetic algorithm and stops after a specified number of
         * iterations.
         */
        public virtual Individual <A> geneticAlgorithm(ICollection <Individual <A> > initPopulation,
                                                       IFitnessFunction <A> fitnessFn, int maxIterations)
        {
            GoalTest <Individual <A> > goalTest = (state) => getIterations() >= maxIterations;

            return(geneticAlgorithm(initPopulation, fitnessFn, goalTest, 0L));
        }
示例#2
0
 /// <summary>
 /// Constructor
 /// </summary>
 public Population(int size,
     IIndividual ancestor,
     IFitnessFunction fitnessFunction,
     ISelection selectionMethod,
     int numberIterations)
 {
     FitnessFunction = fitnessFunction;
     Selection = Replacement = selectionMethod;
     PopulationSize = size;
     firstSelectionCount = size;
     firstReplacementCount = ((int)(size / 2)) % 2 == 0 ? (int)(size / 2) : (int)(size / 2) + 1;
     iterations = numberIterations;
     // Agregar el ancestro a la poblacion
     ancestor.Evaluate(fitnessFunction);
     Individuals.Add(ancestor);
     // Se agregan mas cromosomas a la poblacion
     for (int i = 1; i < size; i++)
     {
         // Se crea un nuevo cromosoma al azar
         IIndividual c = ancestor.CreateRandomIndividual();
         // se calcula su aptitud
         c.Evaluate(fitnessFunction);
         // Se lo agrega a la poblacion
         Individuals.Add(c);
     }
 }
示例#3
0
        public static IParticle Create(PsoParticleType type,
            int locationDim,
            int fitnessDim,
            IFitnessFunction<double[], double[]> function,
            double restartEpsilon = double.MaxValue,
            int iterationsToRestart = int.MaxValue,
            DimensionBound[] bounds = null,
            double[] initVelocity = null
            )
        {
            IParticle particle = null;
            var rand = RandomGenerator.GetInstance();
            switch (type)
            {
                case PsoParticleType.Standard:
                case PsoParticleType.FullyInformed:
                    particle = new StandardParticle(restartEpsilon, iterationsToRestart);
                    break;
                case PsoParticleType.ChargedParticle:
                    particle = new ChargedParticle();
                    break;
                case PsoParticleType.DummyParticle:
                    particle = new DummyParticle();
                    break;
            }

            var x = bounds != null ? rand.RandomVector(locationDim, bounds) : rand.RandomVector(locationDim);
            particle.Init(new ParticleState(x, function.Evaluate(x)),
                initVelocity ?? rand.RandomVector(locationDim, MinInitialVelocity, MaxInitialVelocity), bounds);
            return particle;
        }
示例#4
0
        private void InitializeGeneticAlgorithm()
        {
            fitnessFunction           = new FitnessFunction(inventory);
            selectionOperator         = new RouletteWheelSelection();
            elitistSelection          = new ElitistSelection();
            crossoverOperator         = new ContinuousUniformCrossover();
            mutationOperator          = new WeightsMutation();
            initialPopulationProvider = new InitialPopulationProvider();

            settings = new Settings
            {
                Inventory         = inventory,
                NumberOfCriterias = 3,
                NumberOfElites    = Convert.ToInt32(inputElites.Value),
                PopulationSize    = Convert.ToInt32(inputMaxPopulation.Value),
                CrossoverRate     = Convert.ToDouble(inputCrossoverRate.Value),
                MutationRate      = Convert.ToDouble(inputMutationRate.Value)
            };

            selectionOperator = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));

            geneticAlgorithm = new GeneticAlgorithm(settings, initialPopulationProvider, fitnessFunction, selectionOperator, elitistSelection, crossoverOperator, mutationOperator);

            generationsPlotData  = new List <double>();
            averageScorePlotData = new List <double>();
            bestScorePlotData    = new List <double>();
            UpdatePlotData();
            Plot();

            buttonNextGeneration.Enabled = true;
            buttonRun.Enabled            = true;
            buttonReset.Enabled          = true;
        }
示例#5
0
        public static IParticle Create(PsoParticleType type,
                                       int locationDim,
                                       int fitnessDim,
                                       IFitnessFunction <double[], double[]> function,
                                       double restartEpsilon   = double.MaxValue,
                                       int iterationsToRestart = int.MaxValue,
                                       DimensionBound[] bounds = null,
                                       double[] initVelocity   = null
                                       )
        {
            IParticle particle = null;
            var       rand     = RandomGenerator.GetInstance();

            switch (type)
            {
            case PsoParticleType.Standard:
            case PsoParticleType.FullyInformed:
                particle = new StandardParticle(restartEpsilon, iterationsToRestart);
                break;

            case PsoParticleType.ChargedParticle:
                particle = new ChargedParticle();
                break;

            case PsoParticleType.DummyParticle:
                particle = new DummyParticle();
                break;
            }

            var x = bounds != null?rand.RandomVector(locationDim, bounds) : rand.RandomVector(locationDim);

            particle.Init(new ParticleState(x, function.Evaluate(x)),
                          initVelocity ?? rand.RandomVector(locationDim, MinInitialVelocity, MaxInitialVelocity), bounds);
            return(particle);
        }
示例#6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Optimizer"/> class.
        /// </summary>
        /// <param name="ancestor">The ancestor chromosome.</param>
        /// <param name="populationSize">Size of the population.</param>
        /// <param name="ff">The fitness function to use for chromosome fitness calculation.</param>
        /// <param name="selection">The selection to be used to select the best chromosomes.</param>
        public Optimizer(IChromosome ancestor, int populationSize, IFitnessFunction ff, Selection.SelectionBase selection)
        {
            if (ancestor == null)
            {
                throw new ArgumentNullException("ancestor");
            }
            if (ff == null)
            {
                throw new ArgumentNullException("ff");
            }
            if (selection == null)
            {
                throw new ArgumentNullException("selection");
            }

            _populationSize = populationSize;
            FitnessFunction = ff;
            Selection       = selection;
            _population     = new List <IChromosome>();
            ancestor.Evaluate(ff);
            _population.Add(ancestor);
            while (_population.Count < populationSize)
            {
                IChromosome newC = ancestor.Clone();
                newC.Generate();
                newC.Evaluate(ff);
                _population.Add(newC);
            }
            MutationRate  = 0.08f;
            CrossoverRate = 0f;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Population"/> class.
        /// </summary>
        /// 
        /// <param name="size">Initial size of population.</param>
        /// <param name="ancestor">Ancestor chromosome to use for population creatioin.</param>
        /// <param name="fitnessFunction">Fitness function to use for calculating
        /// chromosome's fitness values.</param>
        /// <param name="selectionMethod">Selection algorithm to use for selection
        /// chromosome's to new generation.</param>
        /// 
        /// <remarks>Creates new population of specified size. The specified ancestor
        /// becomes first member of the population and is used to create other members
        /// with same parameters, which were used for ancestor's creation.</remarks>
        /// 
        /// <exception cref="ArgumentException">Too small population's size was specified. The
        /// exception is thrown in the case if <paramref name="size"/> is smaller than 2.</exception>
        ///
        public QueuePopulation(int size,
                           IChromosome ancestor,
                           IFitnessFunction fitnessFunction,
                           ISelectionMethod selectionMethod)
        {
            if (size < 2)
                throw new ArgumentException("Too small population's size was specified.");

            this.fitnessFunction = fitnessFunction;
            this.selectionMethod = selectionMethod;
            this.size = size;

            // add ancestor to the population
            ancestor.Evaluate(fitnessFunction);
            population.Add(ancestor.Clone());
            // add more chromosomes to the population
            for (int i = 1; i < size; i++)
            {
                // create new chromosome
                IChromosome c = ancestor.CreateNew();
                // calculate it's fitness
                c.Evaluate(fitnessFunction);
                // add it to population
                population.Add(c);
            }
        }
    public void Launch()
    {
        if (generations != null)
        {
            generations.Reset();
        }
        if (setup == null)
        {
            setup = GetComponent <SetupScript>();
        }
        ui           = GetComponent <UIManager>();
        cars         = setup.Setup();
        carStates    = new Dictionary <GameObject, CarState>();
        carExecutors = new Dictionary <GameObject, GeneExecutor>();
        generations  = GetComponent <GenerationDB>();
        fitness      = (IFitnessFunction)System.Activator.CreateInstance(setup.FitnessFunctions.Where(type => type.Name.Equals(selectedFitnessFunction)).First());
        terminator   = (ITerminator)System.Activator.CreateInstance(setup.Terminators.Where(type => type.Name.Equals(selectedTerminator)).First());
        mutator      = (IMutator)System.Activator.CreateInstance(setup.Mutators.Where(type => type.Name.Equals(selectedMutator)).First());
        foreach (string genetype in selectedGenes)
        {
            mutator.AssignGene(((IGene)System.Activator.CreateInstance(setup.GeneTypes.Where(type => type.Name.Equals(genetype)).First())).ID);
        }
        selector   = (ISelector)System.Activator.CreateInstance(setup.Selectors.Where(type => type.Name.Equals(selectedSelector)).First());
        recombiner = (IRecombiner)System.Activator.CreateInstance(setup.Recombiners.Where(type => type.Name.Equals(selectedRecombiner)).First());
        init       = (IInitializer)System.Activator.CreateInstance(setup.Initializers.Where(type => type.Name.Equals(selectedInitializer)).First());
        foreach (string genetype in selectedGenes)
        {
            init.AssignGene(((IGene)System.Activator.CreateInstance(setup.GeneTypes.Where(type => type.Name.Equals(genetype)).First())).ID);
        }

        SetupCars();
        simulation = StartCoroutine(FullSimulation());
    }
示例#9
0
        public virtual void Transpose(IFitnessFunction <double[], double[]> function)
        {
            double[] newLocation;
            var      restart = _sinceLastImprovement == _iterationsToRestart;

            if (restart)
            {
                newLocation           = RandomGenerator.GetInstance().RandomVector(CurrentState.Location.Length, Bounds);
                _sinceLastImprovement = 0;
            }
            else
            {
                newLocation = GetClampedLocation(CurrentState.Location.Select((x, i) => x + Velocity[i]).ToArray());
            }
            var newVal  = function.Evaluate(newLocation);
            var oldBest = PersonalBest;

            CurrentState = new ParticleState(newLocation, newVal);

            if (Optimization.IsBetter(newVal, PersonalBest.FitnessValue) < 0)
            {
                PersonalBest          = CurrentState;
                _sinceLastImprovement = 0;
            }
            else
            {
                _sinceLastImprovement++;
            }
        }
        private string Ga(ISet <string> population, IFitnessFunction fitnessFn)
        {
            // new_population <- empty Set
            ISet <string> newPopulation = new HashedSet <string>();

            // for i = 1 to SIZE(population) do
            for (int i = 0; i < population.Count; i++)
            {
                // x <- RANDOM-SELECTION(population, FITNESS-FN)
                string x = this.RandomSelection(population, fitnessFn);
                // y <- RANDOM-SELECTION(population, FITNESS-FN)
                string y = this.RandomSelection(population, fitnessFn);
                // child <- REPRODUCE(x, y)
                string child = this.Reproduce(x, y);
                // if (small random probability) then child <- MUTATE(child)
                if (random.NextDouble() <= this.mutationProbability)
                {
                    child = this.Mutate(child);
                }
                // add child to new_population
                newPopulation.Add(child);
            }
            // population <- new_population
            population.Clear();
            population.UnionWith(newPopulation);

            return(this.RetrieveBestIndividual(population, fitnessFn));
        }
示例#11
0
        //    public float probPermutation;
        //    public float                    probEncaptilation;
        //    public bool                     bEditing;
        //    public bool                     bDecimation;
        ///   public float probReproduction;



        public GPParameters()
        {
            //initial value of GA
            algorithmType  = Algorithm.GP;
            chromosomeKind = GAChromosome.Continue;

            einitializationMethod = GPInitializationMethod.FullInitialization;
            eselectionMethod      = GPSelectionMethod.Rankselection;
            GPFitness             = null;//new RMSEFitness();
            SelParam1             = 3;
            SelParam2             = 0;
            elitism                     = 1;
            maxInitLevel                = 5;
            probCrossover               = 0.99F;
            probMutation                = 0.10F;
            probReproduction            = 0.20F;
            popSize                     = 1000;
            broodSize                   = 1;
            isProtectedOperationEnabled = true;
            rConstFrom                  = -1;
            rConstTo                    = 1;
            rConstNum                   = 5;

            bParalelGP = false;
        }
        public Population(int size, IFitnessFunction fitnessFunction, IReproduction reproductionFunction, INodeMutator mutator, ISelection selection)
        {
            this.populationSize = size;
            this.fitnessFunction = fitnessFunction;
            this.reproductionFunction = reproductionFunction;
            this.mutator = mutator;
            this.selector = selection;

            this.fitnessFunction.Initialise();

            // Create the initial population
            for (int i = 0; i < size; i++)
            {
                try
                {
                    NodeContext zeroContext = new NodeContext();
                    zeroContext.AvailableCollections = fitnessFunction.GetCollections();
                    zeroContext.AvailableInputs = fitnessFunction.GetInputs();

                    INode candidateNode = NodeFactory.GenerateNode(zeroContext);

                    // Make sure we have a decent candidate (i.e. not too large)
                    double fitness = this.fitnessFunction.CalculateFitness(candidateNode);
                    if (fitness == Double.MaxValue) continue;

                    this.population.Add(NodeFactory.GenerateNode(zeroContext));
                }
                catch (StackOverflowException)
                {
                }
            }
        }
示例#13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Population"/> class.
        /// </summary>
        ///
        /// <param name="size">Initial size of population.</param>
        /// <param name="ancestor">Ancestor chromosome to use for population creatioin.</param>
        /// <param name="fitnessFunction">Fitness function to use for calculating
        /// chromosome's fitness values.</param>
        /// <param name="selectionMethod">Selection algorithm to use for selection
        /// chromosome's to new generation.</param>
        ///
        /// <remarks>Creates new population of specified size. The specified ancestor
        /// becomes first member of the population and is used to create other members
        /// with same parameters, which were used for ancestor's creation.</remarks>
        ///
        /// <exception cref="ArgumentException">Too small population's size was specified. The
        /// exception is thrown in the case if <paramref name="size"/> is smaller than 2.</exception>
        ///
        public Population(int size,
                          IChromosome ancestor,
                          IFitnessFunction fitnessFunction,
                          ISelectionMethod selectionMethod)
        {
            if (size < 2)
            {
                throw new ArgumentException("Too small population's size was specified.");
            }

            this.fitnessFunction = fitnessFunction;
            this.selectionMethod = selectionMethod;
            this.size            = size;

            // add ancestor to the population
            ancestor.Evaluate(fitnessFunction);
            population.Add(ancestor.Clone());
            // add more chromosomes to the population
            for (var i = 1; i < size; i++)
            {
                // create new chromosome
                var c = ancestor.CreateNew();
                // calculate it's fitness
                c.Evaluate(fitnessFunction);
                // add it to population
                population.Add(c);
            }
        }
示例#14
0
        public IA(Game game, int players)
            : base(game)
        {
            rndSeedGen      = new Random();
            rndControl      = new Random();
            rndMovControl   = new Random();
            this.comidas    = null;
            this.jugadores  = null;
            this.numWeights = HIDDEN_UNITS0 * (INPUT_UNITS + 1) + HIDDEN_UNITS1 * (HIDDEN_UNITS0 + 1) + OUTPUT_UNITS * (HIDDEN_UNITS1 + 1);
            redes           = new ActivationNetwork[players];
            for (int i = 0; i < redes.Length; i++)
            {
                redes[i] = new ActivationNetwork(new SigmoidFunction(400), INPUT_UNITS, HIDDEN_UNITS0, HIDDEN_UNITS1, OUTPUT_UNITS);
            }
            inputVector  = new double[INPUT_UNITS];
            outputVector = new double[OUTPUT_UNITS];
            doneEvents   = new ManualResetEvent[players];
            for (int i = 0; i < players; i++)
            {
                doneEvents[i] = new ManualResetEvent(false);
            }

            //Se puede jugar con los parametros de los rangos para modificar la evolucion de las redes
            //Tambien se puede modificar el metodo de seleccion.
            chromosomeGenerator         = new UniformGenerator(new Range(-10f, 10f), rndSeedGen.Next(-100, 100));
            mutationAdditionGenerator   = new UniformGenerator(new Range(-8f, 8f), rndSeedGen.Next(-100, 100));
            mutationMultiplierGenerator = new UniformGenerator(new Range(-8f, 8f), rndSeedGen.Next(-100, 100));
            fitnessFunction             = new GameFitnessFunction();
            selectionMethod             = new EliteSelection();
            padre     = new gameChromosome(chromosomeGenerator, mutationMultiplierGenerator, mutationAdditionGenerator, numWeights);
            poblacion = new Population(WorldGame.JUGADORES, padre, fitnessFunction, selectionMethod);
        }
 public GeneticAlgorithmSettings(IFitnessFunction fitnessFunction, int problemSize)
 {
     GenotypeLength            = problemSize;
     Rng                       = new Random();
     FittestSelectionAlgorithm = new BinaryTournamentWithAlpha(Rng);
     FitnessFunction           = fitnessFunction;
 }
示例#16
0
        private void InitializeGeneticAlgorithm()
        {
            fitnessFunction           = new FitnessFunction(cities);
            selectionOperator         = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));
            elitistSelection          = new ElitistSelection();
            crossoverOperator         = GetSelectedCrossoverOperator();
            mutationOperator          = GetSelectedMutationOperator();
            initialPopulationProvider = new InitialPopulationProvider();

            settings = new Settings
            {
                Cities         = cities,
                NumberOfElites = Convert.ToInt32(inputElites.Value),
                PopulationSize = Convert.ToInt32(inputMaxPopulation.Value),
                CrossoverRate  = Convert.ToDouble(inputCrossoverRate.Value),
                MutationRate   = Convert.ToDouble(inputMutationRate.Value)
            };

            selectionOperator = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));

            geneticAlgorithm = new GeneticAlgorithm(settings, initialPopulationProvider, fitnessFunction, selectionOperator, elitistSelection, crossoverOperator, mutationOperator);

            generationsPlotData  = new List <double>();
            averageScorePlotData = new List <double>();
            bestScorePlotData    = new List <double>();
            UpdatePlotData();
            Plot();
            DrawSolution(geneticAlgorithm.CurrentBestSolution, panelBestSolution, bestSolutionGraphics);

            buttonNextGeneration.Enabled = true;
            buttonRun.Enabled            = true;
            buttonReset.Enabled          = true;
        }
示例#17
0
 public Population(IFitnessFunction fitnessFunction, List <IGenome> population)
 {
     //Log.Create("../../Logs/");
     this.selection  = DefaultParameter.selection;
     this.crossover  = DefaultParameter.crossover;
     this.mutation   = DefaultParameter.mutation;
     this.population = population;
 }
示例#18
0
 public override void Transpose(IFitnessFunction <double[], double[]> function)
 {
     PullGpuState();
     if (PersonalBest.FitnessValue == null || CurrentIsBetterThanBest())
     {
         PersonalBest = CurrentState;
     }
 }
示例#19
0
 public Population(IFitnessFunction fitnessFunction, List<IGenome> population)
 {
     //Log.Create("../../Logs/");
     this.selection = DefaultParameter.selection;
     this.crossover = DefaultParameter.crossover;
     this.mutation = DefaultParameter.mutation;
     this.population = population;
 }
示例#20
0
 public GeneticDistributionFilter(GeneticDistributionFilterParams parameters)
 {
     GeneticAlgorithm       = parameters.GeneticAlgorithm;
     DistributionResolution = parameters.DistributionResolution;
     GeneticDistributionFitness.DistributionResolution = parameters.DistributionResolution;
     GetTrunkThreshold = parameters.GetTrunkThreshold;
     _fitnessFunction  = new GeneticDistributionFitness().Make();
 }
示例#21
0
 /// <summary>
 /// Creates PsoAlgorithm with specific parameters to solve given problem using precreated particles
 /// </summary>
 /// <param name="parameters">takes PsoParameters to check what stop conditions are defined.
 ///  PsoAlgorithm looks for TargetValue, Epsilon, TargetValueCondition, IterationsLimit, IterationsLimitCondition
 /// </param>
 /// <param name="fitnessFunction">function whose optimum is to be found</param>
 /// <param name="particles"> particles traversing the search space </param>
 /// <param name="logger"></param>
 public PsoAlgorithm(PsoParameters parameters, IFitnessFunction <double[], double[]> fitnessFunction, IParticle[] particles, ILogger logger = null)
 {
     _parameters      = parameters;
     _fitnessFunction = fitnessFunction;
     _particles       = particles;
     _iteration       = 0;
     _logger          = logger;
     _optimizer       = PsoServiceLocator.Instance.GetService <IOptimization <double[]> >();
 }
示例#22
0
 public WAPPopulation(int size, WAPChromosome ancestor, IFitnessFunction Func, ISelectionMethod sel)
     : base(size, ancestor, Func, sel)
 {
     AddAlternativeRate = 0.01;
     DropConditionRate = 0.6;
     rand = new Random();
     parallelism = false;
     epoch = 0;
 }
示例#23
0
 /// <summary>
 /// Creates PsoAlgorithm with specific parameters to solve given problem using precreated particles
 /// </summary>
 /// <param name="parameters">takes PsoParameters to check what stop conditions are defined.
 ///  PsoAlgorithm looks for TargetValue, Epsilon, TargetValueCondition, IterationsLimit, IterationsLimitCondition
 /// </param>
 /// <param name="fitnessFunction">function whose optimum is to be found</param>
 /// <param name="particles"> particles traversing the search space </param>
 /// <param name="logger"></param>
 public PsoAlgorithm(PsoParameters parameters, IFitnessFunction<double[], double[]> fitnessFunction, IParticle[] particles, ILogger logger = null)
 {
     _parameters = parameters;
     _fitnessFunction = fitnessFunction;
     _particles = particles;
     _iteration = 0;
     _logger = logger;
     _optimizer = PsoServiceLocator.Instance.GetService<IOptimization<double[]>>();
 }
示例#24
0
        private static void Print(IPopulation <MathProgram> pop, uint generation,
                                  IFitnessFunction <MathProgram> fitnessFunction, double diff)
        {
            var elem = pop.BestProgram;

            Console.WriteLine(
                $"Gen {generation:000}, pop: {pop.Count:000}, diff: {diff:0.00}, " +
                $"fitness: {fitnessFunction.Evaluate(elem):0.00} | {elem}");
        }
        public EliminationGeneticAlgorithm(IMutate <Chromosome> mutation, ISelection <Chromosome> selection, ICrossover <Chromosome> crossover,
                                           IFitnessFunction <Chromosome> fitnessFunction, int iterationLimit, double fitnessTerminator, int populationSize, int chromosomeSize)
            : base(mutation, selection, crossover, fitnessFunction, iterationLimit, fitnessTerminator, populationSize)
        {
            Population     = new Population <Chromosome>(populationSize);
            ChromosomeSize = chromosomeSize;

            InitializePopulation();
        }
示例#26
0
 /// <summary>
 /// Constructor
 /// </summary>
 public Population(int size,
     IIndividual ancestor,
     IFitnessFunction fitnessFunction,
     ISelection selectionMethod,
     int iterations,
     double mutationRate)
     : this(size, ancestor, fitnessFunction, selectionMethod, iterations)
 {
     MutationRate = mutationRate;
 }
示例#27
0
 /// <summary>
 /// Constructor
 /// </summary>
 public Population(int size,
     IIndividual ancestor,
     IFitnessFunction fitnessFunction,
     ISelection selectionMethod,
     double randomSelectionPortion,
     int iterations)
     : this(size, ancestor, fitnessFunction, selectionMethod, iterations)
 {
     randomSelectionPortion = Math.Max(0, Math.Min(0.5, randomSelectionPortion));
 }
示例#28
0
        static Population GetPopulation(int count, IFitnessFunction function)
        {
            var elements = new List <Element>();

            for (int i = 0; i < count; i++)
            {
                elements.Add(new Element(GetRandomData(function)));
            }
            return(new Population(elements));
        }
示例#29
0
 static SimpleGeneticAlgorithm GetAlgorithm(IFitnessFunction function, Options options)
 {
     return(new SimpleGeneticAlgorithm
            (
                new TournamentSelection(options.SelectionChance, options.PopulationSize, 5),
                new PMXCrossover(options.CrossoverChance),
                new UniformMutation(options.MutationChance, function.MinValue, function.MaxValue),
                function
            ));
 }
示例#30
0
        private int getFitnessSelectedIndex(IFitnessFunction gPFitness)
        {
            /*
             * 0 = cmbFitnessFuncs.Items.Add("AE	-Apsolute error  (regression) ");
             * 1 = cmbFitnessFuncs.Items.Add("RMSE	-Root mean square error  (regression) ");
             * 2 = cmbFitnessFuncs.Items.Add("SE	-Square error  (regression) ");
             * 3 = cmbFitnessFuncs.Items.Add("MSE	-Mean square error  (regression) ");
             * 4 = cmbFitnessFuncs.Items.Add("MAE	-Mean apsolute error  (regression) ");
             * 5 = cmbFitnessFuncs.Items.Add("RSE	-Root square error  (regression) ");
             * 6 = cmbFitnessFuncs.Items.Add("RRSE	-Relative root square error  (regression) ");
             * 7 = cmbFitnessFuncs.Items.Add("RAE	-Root apsolute error (regression) ");
             * 8 = cmbFitnessFuncs.Items.Add("ACC  -Total accuracy (binary, multiclass) ");
             */

            if (gPFitness is AEFitness)
            {
                return(0);
            }
            else if (gPFitness is RMSEFitness)
            {
                return(1);
            }
            else if (gPFitness is SEFitness)
            {
                return(2);
            }
            else if (gPFitness is MSEFitness)
            {
                return(3);
            }
            else if (gPFitness is MAEFitness)
            {
                return(4);
            }
            else if (gPFitness is RSEFitness)
            {
                return(5);
            }
            else if (gPFitness is RRSEFitness)
            {
                return(6);
            }
            else if (gPFitness is RAEFitness)
            {
                return(7);
            }
            else if (gPFitness is AccuracyFitness)
            {
                return(8);
            }
            else
            {
                return(0);
            }
        }
示例#31
0
 protected GeneticAlgorithm(IMutation <T> mutation, ISelection <T> selection, ICrossover <T> crossover,
                            IFitnessFunction <T> fitnessFunction, int iterationLimit, decimal fitnessTerminator, int populationSize)
 {
     Mutation          = mutation;
     Selection         = selection;
     Crossover         = crossover;
     FitnessFunction   = fitnessFunction;
     IterationLimit    = iterationLimit;
     FitnessTerminator = fitnessTerminator;
     PopulationSize    = populationSize;
 }
示例#32
0
 protected GeneticAlgorithm(IMutation <T> mutation, ISelection <T> selection, List <ICrossover <T> > crossovers,
                            IFitnessFunction <T> fitnessFunction, int iterationLimit, double fitnessTerminator, int populationSize)
 {
     Mutation          = mutation;
     Selection         = selection;
     Crossovers        = crossovers;
     FitnessFunction   = fitnessFunction;
     IterationLimit    = iterationLimit;
     FitnessTerminator = fitnessTerminator;
     PopulationSize    = populationSize;
 }
 public GeneticEngine(IFitnessFunction fitnessFunction)
 {
     this._fitnessFunction = fitnessFunction;
     this.GenomeLength     = fitnessFunction.getAriaty();
     this.GenerationCount  = DEFAULT_GENERATION_COUNT;
     this.IndividualCount  = 100;
     this.SelectionType    = DEFAULT_SELECTION_TYPE;
     this.CrossingType     = DEFAULT_CROSSING_TYPE;
     this.UseMutation      = DEFAULT_USE_MUTATION;
     this.MutationPercent  = 0.1d;
 }
 protected GenericCudaAlgorithm(CudaParams parameters, StateProxy proxy)
 {
     Proxy           = proxy;
     ParticlesCount  = parameters.ParticlesCount;
     DimensionsCount = parameters.LocationDimensions;
     Iterations      = parameters.Iterations;
     FitnessFunction = parameters.FitnessFunction;
     SyncWithCpu     = parameters.SyncWithCpu;
     FunctionNumber  = parameters.FunctionNumber;
     InstanceNumber  = parameters.InstanceNumber;
     evalLogger      = PsoServiceLocator.Instance.GetService <EvaluationsLogger>();
 }
示例#35
0
        public List<IGenome> Generate(int size, IFitnessFunction fitnessFunction)
        {
            List<IGenome> population = new List<IGenome>();

            for (int i = 0; i < size; i++)
            {
                population.Add(new BinaryGenome(DefaultParameter.genomeSize));
                population[i].SetFitnessFunction(fitnessFunction);
            }

            return population;
        }
示例#36
0
 public static void SaveToCache(string id, IFitnessFunction<double[], double[]> function)
 {
     if (functionCache.Count == cacheLimit)
     {
         functionCache.Clear();
     }
     functionCache.Add(id,function);
     if (functionCache.Count > cacheLimit)
     {
         functionCache.Clear();
     }
 }
示例#37
0
        static IEnumerable <double> GetRandomData(IFitnessFunction function)
        {
            var data =
                Enumerable
                .Range(0, function.DataSize)
                .Select(x => Utils.RandomDouble(function.MinValue, function.MaxValue))
                .ToArray();

            Utils.Shuffle(data);

            return(data);
        }
示例#38
0
 public static void SaveToCache(string id, IFitnessFunction <double[], double[]> function)
 {
     if (functionCache.Count == cacheLimit)
     {
         functionCache.Clear();
     }
     functionCache.Add(id, function);
     if (functionCache.Count > cacheLimit)
     {
         functionCache.Clear();
     }
 }
 protected GenericCudaAlgorithm(CudaParams parameters, StateProxy proxy)
 {
     Proxy = proxy;
     ParticlesCount = parameters.ParticlesCount;
     DimensionsCount = parameters.LocationDimensions;
     Iterations = parameters.Iterations;
     FitnessFunction = parameters.FitnessFunction;
     SyncWithCpu = parameters.SyncWithCpu;
     FunctionNumber = parameters.FunctionNumber;
     InstanceNumber = parameters.InstanceNumber;
     evalLogger = PsoServiceLocator.Instance.GetService<EvaluationsLogger>();
 }
示例#40
0
        public List <IGenome> Generate(int size, IFitnessFunction fitnessFunction)
        {
            List <IGenome> population = new List <IGenome>();

            for (int i = 0; i < size; i++)
            {
                population.Add(new BinaryGenome(DefaultParameter.genomeSize));
                population[i].SetFitnessFunction(fitnessFunction);
            }

            return(population);
        }
示例#41
0
        private void Benchmark()
        {
            fitnessFunction           = new FitnessFunction(cities);
            selectionOperator         = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));
            elitistSelection          = new ElitistSelection();
            initialPopulationProvider = new InitialPopulationProvider();
            selectionOperator         = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));


            var csv = "Crossover Operator,Mutation Operator,Avg. Best Score,Avg. Computation Time";

            var result = RunBenchmark(new CycleCrossover(), new InsertMutation());

            csv += $"\nCycle,Insert,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new InversionMutation());
            csv   += $"\nCycle,Inversion,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new ScrambleMutation());
            csv   += $"\nCycle,Scramble,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new SwapMutation());
            csv   += $"\nCycle,Swap,{result.Item1},{result.Item2}";


            result = RunBenchmark(new OrderOneCrossover(), new InsertMutation());
            csv   += $"\nOrder1,Insert,{result.Item1},{result.Item2}";

            result = RunBenchmark(new OrderOneCrossover(), new InversionMutation());
            csv   += $"\nOrder1,Inversion,{result.Item1},{result.Item2}";

            result = RunBenchmark(new OrderOneCrossover(), new ScrambleMutation());
            csv   += $"\nOrder1,Scramble,{result.Item1},{result.Item2}";

            result = RunBenchmark(new OrderOneCrossover(), new SwapMutation());
            csv   += $"\nOrder1,Swap,{result.Item1},{result.Item2}";


            result = RunBenchmark(new PMXCrossover(), new InsertMutation());
            csv   += $"\nPMX,Insert,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new InversionMutation());
            csv   += $"\nPMX,Inversion,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new ScrambleMutation());
            csv   += $"\nPMX,Scramble,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new SwapMutation());
            csv   += $"\nPMX,Swap,{result.Item1},{result.Item2}";

            File.WriteAllText("simulations.csv", csv);
        }
示例#42
0
        public Population(IFitnessFunction fitnessFunction, int size)
        {
            //            Log.Create("../../Logs/");
            this.selection = DefaultParameter.selection;
            this.crossover = DefaultParameter.crossover;
            this.mutation = DefaultParameter.mutation;
            this.generation = 1;
            this.avarageFitness = 0;
            this.fitnessFunction = fitnessFunction;

            IInitialPopulationMethod initial = DefaultParameter.initialPopulation;
            this.population = initial.Generate(DefaultParameter.genomeSize, fitnessFunction);
        }
示例#43
0
        private static List <IParticle> CreateParticles(PsoParameters parameters, IFitnessFunction <double[], double[]> function)
        {
            var particles = new List <IParticle>();

            foreach (var particle in parameters.Particles)
            {
                for (int i = 0; i < particle.Count; i++)
                {
                    var p = ParticleFactory.Create(particle.ParticleType, parameters.FunctionParameters.Dimension, 1, function, parameters.Epsilon, parameters.ParticleIterationsToRestart, parameters.FunctionParameters.SearchSpace);
                    particles.Add(p);
                }
            }
            return(particles);
        }
        public TwoIslandsPopulation(int size, IFitnessFunction fitnessFunction, IReproduction reproductionFunction, INodeMutator mutator, ISelection selection)
        {
            this.populationSize = size;
            this.fitnessFunction = fitnessFunction;
            this.reproductionFunction = reproductionFunction;
            this.mutator = mutator;
            this.selector = selection;

            this.fitnessFunction.Initialise();

            // The main population needs initializing
            this.IntialisePopulation(this.mainPopulation);

            this.IntialisePopulation(this.secondaryPopulation);
        }
示例#45
0
 public GEngine(AbstractTrack[] tracks, int pCrossingover, int pMutation, IFitnessFunction fitnessFunction, IMutation mutation, ICrossingover crossingover, ISelection selection)
 {
     _countOfPerson = tracks.Length;
     _tracks = new AbstractTrack[_countOfPerson];
     _tracks = tracks;
     _pCrossingover = pCrossingover;
     _pMutation = pMutation;
     _fitnessFunction = fitnessFunction;
     _mutation = mutation;
     _crossingover = crossingover;
     _selection = selection;
     _geneticsDataSet = new DB_GeneticsDataSet();
     _launchId = Guid.NewGuid();
     _launchTableAdapter = new DB_GeneticsDataSetTableAdapters.LaunchesTableAdapter();
     _personsTableAdapter = new DB_GeneticsDataSetTableAdapters.PersonsTableAdapter();
 }
示例#46
0
        public GeneticGenerator(IFitnessFunction fitnessFunction, MelodySequence base_seq = null)
        {
            this.fitnessFunction = fitnessFunction;
            this.base_seq = base_seq;
            this.MaxGenerations = 2000;

            if (base_seq != null)
                CreateUniques();

            if (base_seq != null)
            {
                var mark = new MarkovChainGenerator(2);
                mark.AddMelody(base_seq);
                GPCustomTree.generator = mark;
            }
        }
        public List<IGenome> Generate(int size, IFitnessFunction fitnessFunction)
        {
            List<IGenome> population = new List<IGenome>();
            FlipGeneMutation flip = new FlipGeneMutation();

            for (int i = 0; i < size; i+=2)
            {
                population.Add(new BinaryGenome(DefaultParameter.genomeSize));
                population[i].SetFitnessFunction(fitnessFunction);

                IGenome genome = (BinaryGenome)population[i].Clone();
                flip.Mutate(genome);
                population.Add(genome);
                population[i+1].SetFitnessFunction(fitnessFunction);
            }

            return population;
        }
示例#48
0
        public GeneticGenerator(IFitnessFunction fitnessFunction, PatchNames instrument = PatchNames.Acoustic_Grand, CompositionCategory cat=null)
        {
            this.fitnessFunction = fitnessFunction;
            this.cat = cat;
            this.MaxGenerations = 1000;
            this.PrintProgress = true;
            this.instrument = instrument;

            if (cat != null)
            {
                // Markov generator
                var mark = new MarkovChainGenerator(instrument, 2);

                // Allowed notes
                HashSet<Durations> durs = new HashSet<Durations>();
                HashSet<int> fullPitches = new HashSet<int>();

                foreach(var c in cat.Compositions)
                {
                    if (c.Tracks.Count < 1)
                        continue;
                    var cloneMel = (c.Tracks[0].GetMainSequence() as MelodySequence).Clone() as MelodySequence;

                    cloneMel.StandardizeDuration();
                    mark.AddMelody(cloneMel);

                    foreach (var n in cloneMel.Notes)
                    {
                        durs.Add(NoteGene.GetClosestDuration(n.Duration));
                        fullPitches.Add(n.Pitch);
                    }

                    avgLength += cloneMel.Length;
                }
                avgLength /= cat.Compositions.Length;
                GPCustomTree.generator = mark;

                NoteGene.AllowedDurations = durs.ToArray();
                NoteGene.AllowedFullPitches = fullPitches.ToArray();

            }
        }
示例#49
0
        public IA(Game game, int players)
            : base(game)
        {
            rndSeedGen = new Random();
            rndControl = new Random();
            rndMovControl = new Random();
            this.comidas = null;
            this.jugadores = null;
            this.numWeights = HIDDEN_UNITS0 * (INPUT_UNITS + 1) + HIDDEN_UNITS1 * (HIDDEN_UNITS0 + 1) + OUTPUT_UNITS * (HIDDEN_UNITS1 + 1);
            redes = new ActivationNetwork[players];
            for (int i = 0; i < redes.Length; i++)
            {
                redes[i] = new ActivationNetwork(new SigmoidFunction(400), INPUT_UNITS, HIDDEN_UNITS0, HIDDEN_UNITS1, OUTPUT_UNITS);
            }
            inputVector = new double[INPUT_UNITS];
            outputVector = new double[OUTPUT_UNITS];
            doneEvents = new ManualResetEvent[players];
            for (int i = 0; i < players; i++) doneEvents[i] = new ManualResetEvent(false);

            //Se puede jugar con los parametros de los rangos para modificar la evolucion de las redes
            //Tambien se puede modificar el metodo de seleccion.
            chromosomeGenerator = new UniformGenerator(new Range(-10f, 10f), rndSeedGen.Next(-100, 100));
            mutationAdditionGenerator = new UniformGenerator(new Range(-8f, 8f), rndSeedGen.Next(-100, 100));
            mutationMultiplierGenerator = new UniformGenerator(new Range(-8f, 8f), rndSeedGen.Next(-100, 100));
            fitnessFunction = new GameFitnessFunction();
            selectionMethod = new EliteSelection();
            padre = new gameChromosome(chromosomeGenerator, mutationMultiplierGenerator, mutationAdditionGenerator, numWeights);
            poblacion = new Population(WorldGame.JUGADORES, padre, fitnessFunction, selectionMethod);
        }
示例#50
0
 /// <summary>
 /// Builder a new genome from other Binary Genome
 /// </summary>
 /// <param name="binaryGenome">Binary Genome</param>
 public BinaryGenome(BinaryGenome binaryGenome)
 {
     this.genes = binaryGenome.genes;
     this.fitnessFunction = binaryGenome.fitnessFunction;
 }
示例#51
0
 /// <summary>
 /// Set Fitness Function in the Genome
 /// </summary>
 /// <param name="fitnessFunction">Class Implements in the Code of user</param>
 public void SetFitnessFunction(IFitnessFunction fitnessFunction)
 {
     this.fitnessFunction = fitnessFunction;
 }
        public void setupFitnessFunction(string fitnessFunction)
        {
            foreach (Type t in this.GetType().Assembly.GetTypes())
            {
                if (t.GetInterface("IFitnessFunction", true) != null)
                    this.functionComboBox.Items.Add(t.Name);
            }

            fitFun = FitnessFunctionFactory.getFitnessFunction(fitnessFunction);
            if (fitFun != null)
            {
                for (int j = 0; j < functionComboBox.Items.Count; j++)
                    if (functionComboBox.Items[j].ToString().Equals(fitFun.name))
                    {
                        functionComboBox.SelectedIndex = j;
                        break;
                    }
            }
            fillFitnessDescription();
        }
 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     fitFun = FitnessFunctionFactory.getFitnessFunction(this.functionComboBox.SelectedItem.ToString());
     fillFitnessDescription();
 }
示例#54
0
        private static List<IParticle> CreateParticles(PsoParameters parameters, IFitnessFunction<double[],double[]> function)
        {
            var particles = new List<IParticle>();
            foreach (var particle in parameters.Particles)
            {
                for (int i = 0; i < particle.Count; i++)
                {
                    var p = ParticleFactory.Create(particle.ParticleType, parameters.FunctionParameters.Dimension, 1, function, parameters.Epsilon, parameters.ParticleIterationsToRestart, parameters.FunctionParameters.SearchSpace);
                    particles.Add(p);
                }

            }
            return particles;
        }
示例#55
0
        public void Run(PsoParameters psoParameters, IParticle[] proxyParticleServices = null)
        {
            _function = FunctionFactory.GetFitnessFunction(psoParameters.FunctionParameters);

            var useGpu = psoParameters.GpuParameters.UseGpu && GpuController.AnySupportedGpu();

            CudaParticle cudaParticle = null;

            if (useGpu)
                cudaParticle = PrepareCudaAlgorithm(psoParameters);

            var particles = PrepareParticles(psoParameters,proxyParticleServices,cudaParticle);
            RunningParameters = psoParameters;
            _algorithm = new PsoAlgorithm(psoParameters, _function, particles.ToArray());

            _cudaReadyLock = new AutoResetEvent(false);

            if (useGpu)
                RunningCudaAlgorithm = Task<ParticleState>.Factory.StartNew(() =>
                {
                    _cudaAlgorithm.Initialize();
                    _cudaReadyLock.Set();
                    var result = _cudaAlgorithm.Run(_cudaTokenSource.Token);
                    _function.Evaluate(result.Location);
                    _cudaAlgorithm.Dispose();
                    return result;

                }, _cudaTokenSource.Token);
            else
                _cudaReadyLock.Set();

            RunningAlgorithm = Task<ParticleState>.Factory.StartNew(delegate
            {
                _cudaReadyLock.WaitOne();
                _cudaReadyLock.Dispose();
                return StartAlgorithm(_tokenSource.Token);
            }, _tokenSource.Token);
        }
示例#56
0
 public override void Transpose(IFitnessFunction<double[], double[]> function)
 {
 }
 public void setFitnessFunction(string fitnessFunctionName)
 {
     this.fitnessFunctionName = fitnessFunctionName;
     fitnessFunction = FitnessFunctionFactory.getFitnessFunction(fitnessFunctionName);
     fitnessFunction.reset();
 }
示例#58
0
 public override void Transpose(IFitnessFunction<double[], double[]> function)
 {
     PullGpuState();
     if (PersonalBest.FitnessValue == null || CurrentIsBetterThanBest())
         PersonalBest = CurrentState;
 }
 /// <summary>
 /// Evaluate chromosome with specified fitness function.
 /// </summary>
 /// 
 /// <param name="function">Fitness function to use for evaluation of the chromosome.</param>
 /// 
 /// <remarks><para>Calculates chromosome's fitness using the specifed fitness function.</para></remarks>
 ///
 public void Evaluate( IFitnessFunction function )
 {
     fitness = function.Evaluate( this );
 }
示例#60
0
        public virtual void Transpose(IFitnessFunction<double[], double[]> function)
        {
            double[] newLocation;
            var restart = _sinceLastImprovement == _iterationsToRestart;
            if (restart)
            {
                newLocation = RandomGenerator.GetInstance().RandomVector(CurrentState.Location.Length, Bounds);
                _sinceLastImprovement = 0;
            }
            else
            {
                newLocation = GetClampedLocation(CurrentState.Location.Select((x, i) => x + Velocity[i]).ToArray());
            }
            var newVal = function.Evaluate(newLocation);
            var oldBest = PersonalBest;
            CurrentState = new ParticleState(newLocation, newVal);

            if (Optimization.IsBetter(newVal, PersonalBest.FitnessValue) < 0)
            {
                PersonalBest = CurrentState;
                _sinceLastImprovement = 0;
            }
            else
            {
                _sinceLastImprovement++;
            }
        }