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 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); }
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); }