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