/// <summary> /// Compute the fitness by repeating a number of optimization runs /// and sum the fitnesses achieved in the runs. /// </summary> /// <param name="parameters">Parameters to use for the Optimizer.</param> /// <param name="fitnessLimit">Preemptive Fitness Limit</param> /// <returns>Fitness value.</returns> public override double Fitness(double[] parameters, double fitnessLimit) { // Initialize the fitnses sum. double fitnessSum = 0; // Perform a number of optimization runs. for (int i = 0; i < NumRuns && fitnessSum < fitnessLimit; i++) { // Perform one optimization run. Result result = Optimizer.Optimize(parameters, fitnessLimit - fitnessSum); // Compute the normalized fitness. double fitnessNormalized = result.Fitness - Optimizer.MinFitness; Debug.Assert(fitnessNormalized >= 0); // Accumulate the fitness sum. fitnessSum += fitnessNormalized; } return(fitnessSum); }
/// <summary> /// Compute the fitness by repeating a number of optimization runs /// and sum the fitnesses achieved in the runs. /// </summary> /// <param name="parameters">Parameters to use for the Optimizer.</param> /// <param name="fitnessLimit">Preemptive Fitness Limit</param> /// <returns>Fitness value.</returns> public override double Fitness(double[] parameters, double fitnessLimit) { // Initialize the fitness sum. double fitnessSum = 0; // Perform a number of optimization runs. for (int i = 0; i < NumRuns && fitnessSum < fitnessLimit; i++) { // Perform one optimization run. Result result = Optimizer.Optimize(parameters, fitnessLimit - fitnessSum); // Compute the normalized fitness. double fitnessNormalized = result.Fitness - Optimizer.MinFitness; // This is most likely where your debugger will stop if your problem minimum fitness // is not accurate (most likely defaulting to 0). Debug.Assert(fitnessNormalized >= 0); // Accumulate the fitness sum. fitnessSum += fitnessNormalized; } return(fitnessSum); }
/// <summary> /// Perform one optimization run and return the best found solution. /// This just wraps around the Optimizer and stores the results for /// later computation of statistics. /// </summary> /// <param name="parameters">Control parameters for the optimizer.</param> /// <param name="fitnessLimit">Preemptive Fitness Limit</param> public override Result Optimize(double[] parameters, double fitnessLimit) { // Call through to the Optimizer. Result result = Optimizer.Optimize(parameters, fitnessLimit); // Store optimization result for later use by the Compute() method, // if feasibility is required then only store feasible results. if (!OnlyFeasible || result.Feasible) { Results.Add(result); } if (result.Feasible) { // Increase count of feasible results. CountFeasible++; } // Increase total count of results, regardless of feasibility. Count++; // Return the optimization result. return(result); }