- Timestamp:
- 12/05/16 12:27:19 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/MemPRAlgorithm.cs
r14450 r14453 252 252 var p1 = Context.AtPopulation(i1); 253 253 var p2 = Context.AtPopulation(i2); 254 255 if (double.IsNaN(p1.Fitness)) Evaluate(p1, token);256 if (double.IsNaN(p2.Fitness)) Evaluate(p2, token);257 254 258 255 var parentDist = Dist(p1, p2); … … 361 358 362 359 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 } 364 368 365 369 var popSize = MaximumPopulationSize; … … 460 464 protected abstract ISolutionSubspace<TSolution> CalculateSubspace(IEnumerable<TSolution> solutions, bool inverse = false); 461 465 protected virtual void Evaluate(ISingleObjectiveSolutionScope<TSolution> scope, CancellationToken token) { 462 Context.EvaluatedSolutions++;463 466 var prob = Problem as ISingleObjectiveProblemDefinition; 464 467 if (prob != null) { … … 466 469 scope.Fitness = prob.Evaluate(ind, Context.Random); 467 470 } else RunOperator(Problem.Evaluator, scope, token); 468 if (IsBetter(scope.Fitness, Context.BestQuality))469 Context.BestQuality = scope.Fitness;470 471 } 471 472 … … 480 481 #region Improve 481 482 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 } 483 487 var before = scope.Fitness; 484 488 var lscontext = Context.CreateSingleSolutionContext(scope); … … 486 490 var after = scope.Fitness; 487 491 Context.HillclimbingStat.Add(Tuple.Create(before, after)); 492 Context.IncrementEvaluatedSolutions(lscontext.EvaluatedSolutions); 488 493 return lscontext.Iterations; 489 494 } 490 495 491 496 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 } 493 501 var before = scope.Fitness; 494 502 var newScope = (ISingleObjectiveSolutionScope<TSolution>)scope.Clone(); … … 500 508 protected abstract void TabuWalk(ISingleObjectiveSolutionScope<TSolution> scope, int steps, CancellationToken token, ISolutionSubspace<TSolution> subspace = null); 501 509 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 } 503 514 var before = scope.Fitness; 504 515 var newScope = (ISingleObjectiveSolutionScope<TSolution>)scope.Clone(); … … 520 531 var p2 = Context.AtPopulation(i2); 521 532 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 } 524 541 525 542 return BreedAndImprove(p1, p2, token); … … 532 549 Mutate(offspring, token, subspace); // mutate the solutions, especially to widen the sub-space 533 550 } 534 if (double.IsNaN(offspring.Fitness)) Evaluate(offspring, token); 551 if (double.IsNaN(offspring.Fitness)) { 552 Evaluate(offspring, token); 553 Context.IncrementEvaluatedSolutions(1); 554 } 535 555 Context.BreedingStat.Add(Tuple.Create(p1.Fitness, p2.Fitness, offspring.Fitness)); 536 556 if ((IsBetter(offspring, p1) && IsBetter(offspring, p2)) … … 556 576 var p2 = Context.AtPopulation(i2); 557 577 558 if (double.IsNaN(p1.Fitness)) Evaluate(p1, token);559 if (double.IsNaN(p2.Fitness)) Evaluate(p2, token);560 561 578 return RelinkAndImprove(p1, p2, token); 562 579 } … … 584 601 SolutionModelTrainerParameter.Value.TrainModel(Context); 585 602 var sample = ToScope(Context.Model.Sample()); 603 Evaluate(sample, token); 604 Context.IncrementEvaluatedSolutions(1); 586 605 if (Context.Population.Any(p => IsBetter(sample, p) || sample.Fitness == p.Fitness)) return sample; 587 606 … … 608 627 609 628 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 } 611 633 return ProbabilityAccept(scope.Fitness, data); 612 634 }
Note: See TracChangeset
for help on using the changeset viewer.