Example #1
0
        protected override Chromosome GetBestFromPopulation(Population <Chromosome, BinaryRepresentation> population)
        {
            var populationMinimum = population.Chromosomes.Min(c =>
                                                               optimizingFunction.GetValue(c, new ChromosomeToDoubleSetConverter()));

            return(population.Chromosomes.First(
                       c => optimizingFunction.GetValue(c, new ChromosomeToDoubleSetConverter()) == populationMinimum));
        }
Example #2
0
        public double Build()
        {
            function.Precision = precision;
            var minimum = double.MaxValue;

            for (var currentIteration = 1; currentIteration <= iterations; currentIteration++)
            {
                var randomState =
                    DomainHelper.RandomDimensionalBinaryValueInDomainRange(
                        function.GetDomain(),
                        function.GetDimensionDefinition(),
                        precision);

                var neighboursExhausted = false;

                while (!neighboursExhausted)
                {
                    var neighbourhood = GetNeighbourhood(randomState);
                    var improvement   = strategy.PickImprovement(neighbourhood, function, minimum);

                    if (improvement == null)
                    {
                        neighboursExhausted = true;
                    }
                    else
                    {
                        minimum = function.GetValue(improvement, new BinarySetToDoubleSetConverter());
                    }
                }
            }

            return(minimum);
        }
 public override DimensionSet <BinaryRepresentation> PickImprovement(
     IEnumerable <DimensionSet <BinaryRepresentation> > neighbourhood,
     DimensionalFunction function,
     double currentMinimum)
 {
     return(neighbourhood.FirstOrDefault(n => function.GetValue(n, new BinarySetToDoubleSetConverter()) < currentMinimum));
 }
 public override DimensionSet <double> PickImprovement(
     IEnumerable <DimensionSet <double> > neighbourhood,
     DimensionalFunction function,
     double currentMinimum)
 {
     return(neighbourhood.FirstOrDefault(n => function.GetValue(n) < currentMinimum));
 }
        public double Build()
        {
            var temperature = startingTemperature;

            function.Precision = precision;

            var minimum      = double.MaxValue;
            var currentState =
                DomainHelper.RandomDimensionalBinaryValueInDomainRange(function.GetDomain(), function.GetDimensionDefinition(), precision);

            while (temperature > minimumTemperature)
            {
                var neighbour      = GetNeighbour(currentState);
                var neighbourValue = function.GetValue(neighbour, new BinarySetToDoubleSetConverter());

                var randomNumber = new Random().NextDouble();

                if (minimum > neighbourValue || randomNumber < Math.Exp((neighbourValue - minimum) / temperature))
                {
                    minimum      = neighbourValue;
                    currentState = neighbour;
                }

                temperature *= alpha;
            }

            return(minimum);
        }
        public double Build()
        {
            var currentMinimum = double.MaxValue;

            for (var currentTry = 1.0; currentTry <= randomTriesCount; currentTry += step)
            {
                var functionParameters =
                    DomainHelper.RandomDimensionalValueInDomainRange(function.GetDomain(), function.GetDimensionDefinition());

                var functionValue = function.GetValue(functionParameters);

                currentMinimum = TestMinimum(currentMinimum, functionValue);
            }

            return(currentMinimum);
        }
Example #7
0
        public override DimensionSet <BinaryRepresentation> PickImprovement(
            IEnumerable <DimensionSet <BinaryRepresentation> > neighbourhood,
            DimensionalFunction function,
            double currentMinimum)
        {
            DimensionSet <BinaryRepresentation> bestImprovement = null;

            foreach (var neighbour in neighbourhood)
            {
                var value = function.GetValue(neighbour, new BinarySetToDoubleSetConverter());
                if (currentMinimum <= value)
                {
                    continue;
                }

                currentMinimum  = value;
                bestImprovement = neighbour;
            }

            return(bestImprovement);
        }
Example #8
0
        public override DimensionSet <double> PickImprovement(
            IEnumerable <DimensionSet <double> > neighbourhood,
            DimensionalFunction function,
            double currentMinimum)
        {
            DimensionSet <double> bestImprovement = null;

            foreach (var neighbour in neighbourhood)
            {
                var value = function.GetValue(neighbour);
                if (currentMinimum <= value)
                {
                    continue;
                }

                currentMinimum  = value;
                bestImprovement = neighbour;
            }

            return(bestImprovement);
        }