Пример #1
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 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);
        }
Пример #3
0
        public override DimensionSet <double> Convert(Chromosome source, DimensionalFunction function)
        {
            var doubles =
                source.Representations.Select((x, dimension) =>
                                              BinaryHelper.DecodeBinary(x, function.GetDomain().GetDefinitionForDimension(dimension + 1), function.Precision));

            return(new DimensionSet <double>(doubles));
        }
Пример #4
0
        public double Build()
        {
            var population = GeneticHelper.GeneratePopulation(
                populationSize,
                optimizingFunction.GetDomain(),
                optimizingFunction.GetDimensionDefinition(),
                this.optimizingFunction.Precision);

            var winner = this.GetWinner(population);

            return(this.fitnessFunction.ValueFor(winner));
        }
        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);
        }