Changeset 17363 for branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators
- Timestamp:
- 11/21/19 17:58:32 (5 years ago)
- Location:
- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveAnalyzer.cs
r17226 r17363 53 53 } 54 54 55 public Action< TEncodedSolution[], double[], ResultCollection, IRandom> AnalyzeAction{ get; set; }55 public Action<ISingleObjectiveSolutionContext<TEncodedSolution>[], ResultCollection, IRandom> Analyze { get; set; } 56 56 57 57 [StorableConstructor] … … 78 78 scopes = scopes.Select(x => (IEnumerable<IScope>)x.SubScopes).Aggregate((a, b) => a.Concat(b)); 79 79 80 var individuals = scopes.Select(s => ScopeUtil.GetEncodedSolution(s, encoding)).ToArray(); 81 AnalyzeAction(individuals, QualityParameter.ActualValue.Select(x => x.Value).ToArray(), results, random); 80 var solutionContexts = scopes.Select(scope => { 81 var solution = ScopeUtil.GetEncodedSolution(scope, encoding); 82 var quality = ((DoubleValue)scope.Variables[QualityParameter.ActualName].Value).Value; 83 var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(scope, solution); 84 solutionContext.EvaluationResult = new SingleObjectiveEvaluationResult(quality); 85 return solutionContext; 86 }).ToArray(); 87 88 Analyze(solutionContexts, results, random); 82 89 return base.Apply(); 83 90 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs
r17226 r17363 46 46 } 47 47 48 public Func<TEncodedSolution, IRandom, double> EvaluateFunc{ get; set; }48 public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; } 49 49 50 50 [StorableConstructor] … … 63 63 var encoding = EncodingParameter.ActualValue; 64 64 var solution = ScopeUtil.GetEncodedSolution(ExecutionContext.Scope, encoding); 65 QualityParameter.ActualValue = new DoubleValue(EvaluateFunc(solution, random)); 65 var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(ExecutionContext.Scope, solution); 66 67 Evaluate(solutionContext, random); 68 var qualityValue = solutionContext.EvaluationResult.Quality; 69 70 QualityParameter.ActualValue = new DoubleValue(qualityValue); 66 71 return base.InstrumentedApply(); 67 72 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs
r17226 r17363 63 63 } 64 64 65 public Func<TEncodedSolution, IRandom, double> EvaluateFunc{ get; set; }66 public Func< TEncodedSolution, IRandom, IEnumerable<TEncodedSolution>> GetNeighborsFunc{ get; set; }65 public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; } 66 public Func<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, IEnumerable<ISingleObjectiveSolutionContext<TEncodedSolution>>> GetNeighbors { get; set; } 67 67 68 68 [StorableConstructor] … … 90 90 var sampleSize = SampleSizeParameter.ActualValue.Value; 91 91 var solution = ScopeUtil.GetEncodedSolution(ExecutionContext.Scope, encoding); 92 var quality = QualityParameter.ActualValue == null ? EvaluateFunc(solution, random) : QualityParameter.ActualValue.Value; 92 var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(ExecutionContext.Scope, solution); 93 94 double quality; 95 if (QualityParameter.ActualValue == null) { 96 if (!solutionContext.IsEvaluated) Evaluate(solutionContext, random); 97 98 quality = solutionContext.EvaluationResult.Quality; 99 } else quality = QualityParameter.ActualValue.Value; 93 100 94 101 var count = 0; … … 96 103 TEncodedSolution best = default(TEncodedSolution); 97 104 var bestQuality = quality; 98 foreach (var neighbor in GetNeighborsFunc(solution, random).Take(sampleSize)) { 99 var q = EvaluateFunc(neighbor, random); 105 foreach (var neighbor in GetNeighbors(solutionContext, random).Take(sampleSize)) { 106 Evaluate(neighbor, random); 107 var q = neighbor.EvaluationResult.Quality; 100 108 count++; 101 109 if (maximize && bestQuality > q || !maximize && bestQuality < q) continue; 102 best = neighbor ;110 best = neighbor.EncodedSolution; 103 111 bestQuality = q; 104 112 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs
r17226 r17363 50 50 } 51 51 52 public Func<TEncodedSolution, IRandom, double> EvaluateFunc{ get; set; }52 public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; } 53 53 54 54 [StorableConstructor] … … 69 69 var random = RandomParameter.ActualValue; 70 70 var encoding = EncodingParameter.ActualValue; 71 var individual = ScopeUtil.GetEncodedSolution(ExecutionContext.Scope, encoding); 72 MoveQualityParameter.ActualValue = new DoubleValue(EvaluateFunc(individual, random)); 71 var solution = ScopeUtil.GetEncodedSolution(ExecutionContext.Scope, encoding); 72 var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(ExecutionContext.Scope, solution); 73 74 Evaluate(solutionContext, random); 75 var qualityValue = solutionContext.EvaluationResult.Quality; 76 77 MoveQualityParameter.ActualValue = new DoubleValue(qualityValue); 73 78 return base.Apply(); 74 79 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveGenerator.cs
r17226 r17363 48 48 } 49 49 50 public Func< TEncodedSolution, IRandom, IEnumerable<TEncodedSolution>> GetNeighborsFunc{ get; set; }50 public Func<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, IEnumerable<ISingleObjectiveSolutionContext<TEncodedSolution>>> GetNeighbors { get; set; } 51 51 52 52 [StorableConstructor] … … 69 69 var encoding = EncodingParameter.ActualValue; 70 70 var solution = ScopeUtil.GetEncodedSolution(ExecutionContext.Scope, encoding); 71 var nbhood = GetNeighborsFunc(solution, random).Take(sampleSize).ToList();71 var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(ExecutionContext.Scope, solution); 72 72 73 var nbhood = GetNeighbors(solutionContext, random).Take(sampleSize).ToList(); 73 74 var moveScopes = new Scope[nbhood.Count]; 74 75 for (int i = 0; i < moveScopes.Length; i++) { 75 76 moveScopes[i] = new Scope(i.ToString(CultureInfo.InvariantCulture.NumberFormat)); 76 ScopeUtil.CopyEncodedSolutionToScope(moveScopes[i], encoding, nbhood[i] );77 ScopeUtil.CopyEncodedSolutionToScope(moveScopes[i], encoding, nbhood[i].EncodedSolution); 77 78 } 78 79 ExecutionContext.Scope.SubScopes.AddRange(moveScopes);
Note: See TracChangeset
for help on using the changeset viewer.