Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/05/16 12:27:19 (8 years ago)
Author:
abeham
Message:

#2701:

  • Worked on MemPR algorithm for permutations
    • Made Evaluate() method mostly thread-safe and moved evaluated solutions counting to caller
  • Removed TSP specific similarity calculator (it is actually not specific to the TSP) and added it to the permutation encoding as HammingSimilarityCalculator
  • Fixed bug in qap basicproblem
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/MemPRAlgorithm.cs

    r14450 r14453  
    252252      var p1 = Context.AtPopulation(i1);
    253253      var p2 = Context.AtPopulation(i2);
    254 
    255       if (double.IsNaN(p1.Fitness)) Evaluate(p1, token);
    256       if (double.IsNaN(p2.Fitness)) Evaluate(p2, token);
    257254
    258255      var parentDist = Dist(p1, p2);
     
    361358
    362359    protected int Replace(ISingleObjectiveSolutionScope<TSolution> child, CancellationToken token) {
    363       if (double.IsNaN(child.Fitness)) Evaluate(child, token);
     360      if (double.IsNaN(child.Fitness)) {
     361        Evaluate(child, token);
     362        Context.IncrementEvaluatedSolutions(1);
     363      }
     364      if (IsBetter(child.Fitness, Context.BestQuality)) {
     365        Context.BestQuality = child.Fitness;
     366        Context.BestSolution = (TSolution)child.Solution.Clone();
     367      }
    364368
    365369      var popSize = MaximumPopulationSize;
     
    460464    protected abstract ISolutionSubspace<TSolution> CalculateSubspace(IEnumerable<TSolution> solutions, bool inverse = false);
    461465    protected virtual void Evaluate(ISingleObjectiveSolutionScope<TSolution> scope, CancellationToken token) {
    462       Context.EvaluatedSolutions++;
    463466      var prob = Problem as ISingleObjectiveProblemDefinition;
    464467      if (prob != null) {
     
    466469        scope.Fitness = prob.Evaluate(ind, Context.Random);
    467470      } else RunOperator(Problem.Evaluator, scope, token);
    468       if (IsBetter(scope.Fitness, Context.BestQuality))
    469         Context.BestQuality = scope.Fitness;
    470471    }
    471472
     
    480481    #region Improve
    481482    protected virtual int HillClimb(ISingleObjectiveSolutionScope<TSolution> scope, CancellationToken token, ISolutionSubspace<TSolution> subspace = null) {
    482       if (double.IsNaN(scope.Fitness)) Evaluate(scope, token);
     483      if (double.IsNaN(scope.Fitness)) {
     484        Evaluate(scope, token);
     485        Context.IncrementEvaluatedSolutions(1);
     486      }
    483487      var before = scope.Fitness;
    484488      var lscontext = Context.CreateSingleSolutionContext(scope);
     
    486490      var after = scope.Fitness;
    487491      Context.HillclimbingStat.Add(Tuple.Create(before, after));
     492      Context.IncrementEvaluatedSolutions(lscontext.EvaluatedSolutions);
    488493      return lscontext.Iterations;
    489494    }
    490495
    491496    protected virtual void PerformTabuWalk(ISingleObjectiveSolutionScope<TSolution> scope, int steps, CancellationToken token, ISolutionSubspace<TSolution> subspace = null) {
    492       if (double.IsNaN(scope.Fitness)) Evaluate(scope, token);
     497      if (double.IsNaN(scope.Fitness)) {
     498        Evaluate(scope, token);
     499        Context.IncrementEvaluatedSolutions(1);
     500      }
    493501      var before = scope.Fitness;
    494502      var newScope = (ISingleObjectiveSolutionScope<TSolution>)scope.Clone();
     
    500508    protected abstract void TabuWalk(ISingleObjectiveSolutionScope<TSolution> scope, int steps, CancellationToken token, ISolutionSubspace<TSolution> subspace = null);
    501509    protected virtual void TabuClimb(ISingleObjectiveSolutionScope<TSolution> scope, int steps, CancellationToken token, ISolutionSubspace<TSolution> subspace = null) {
    502       if (double.IsNaN(scope.Fitness)) Evaluate(scope, token);
     510      if (double.IsNaN(scope.Fitness)) {
     511        Evaluate(scope, token);
     512        Context.IncrementEvaluatedSolutions(1);
     513      }
    503514      var before = scope.Fitness;
    504515      var newScope = (ISingleObjectiveSolutionScope<TSolution>)scope.Clone();
     
    520531      var p2 = Context.AtPopulation(i2);
    521532
    522       if (double.IsNaN(p1.Fitness)) Evaluate(p1, token);
    523       if (double.IsNaN(p2.Fitness)) Evaluate(p2, token);
     533      if (double.IsNaN(p1.Fitness)) {
     534        Evaluate(p1, token);
     535        Context.IncrementEvaluatedSolutions(1);
     536      }
     537      if (double.IsNaN(p2.Fitness)) {
     538        Evaluate(p2, token);
     539        Context.IncrementEvaluatedSolutions(1);
     540      }
    524541
    525542      return BreedAndImprove(p1, p2, token);
     
    532549        Mutate(offspring, token, subspace); // mutate the solutions, especially to widen the sub-space
    533550      }
    534       if (double.IsNaN(offspring.Fitness)) Evaluate(offspring, token);
     551      if (double.IsNaN(offspring.Fitness)) {
     552        Evaluate(offspring, token);
     553        Context.IncrementEvaluatedSolutions(1);
     554      }
    535555      Context.BreedingStat.Add(Tuple.Create(p1.Fitness, p2.Fitness, offspring.Fitness));
    536556      if ((IsBetter(offspring, p1) && IsBetter(offspring, p2))
     
    556576      var p2 = Context.AtPopulation(i2);
    557577
    558       if (double.IsNaN(p1.Fitness)) Evaluate(p1, token);
    559       if (double.IsNaN(p2.Fitness)) Evaluate(p2, token);
    560 
    561578      return RelinkAndImprove(p1, p2, token);
    562579    }
     
    584601      SolutionModelTrainerParameter.Value.TrainModel(Context);
    585602      var sample = ToScope(Context.Model.Sample());
     603      Evaluate(sample, token);
     604      Context.IncrementEvaluatedSolutions(1);
    586605      if (Context.Population.Any(p => IsBetter(sample, p) || sample.Fitness == p.Fitness)) return sample;
    587606
     
    608627
    609628    protected double ProbabilityAccept(ISingleObjectiveSolutionScope<TSolution> scope, IList<Tuple<double, double>> data) {
    610       if (double.IsNaN(scope.Fitness)) Evaluate(scope, CancellationToken.None);
     629      if (double.IsNaN(scope.Fitness)) {
     630        Evaluate(scope, CancellationToken.None);
     631        Context.IncrementEvaluatedSolutions(1);
     632      }
    611633      return ProbabilityAccept(scope.Fitness, data);
    612634    }
Note: See TracChangeset for help on using the changeset viewer.