Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3133_ProblemModifiers/HeuristicLab.Problems.Modifiers/Hive/ModifiedBasicProblemEvaluationExecutionAlgorithm.cs @ 18029

Last change on this file since 18029 was 18029, checked in by bwerth, 3 years ago

#3133 added implementation of problem modifiers

File size: 2.4 KB
Line 
1using System.Linq;
2using System.Threading;
3using System.Threading.Tasks;
4using HEAL.Attic;
5using HeuristicLab.Common;
6using HeuristicLab.Core;
7using HeuristicLab.Optimization;
8
9namespace HeuristicLab.Problems.Modifiers {
10  [StorableType("19E56ADE-9700-42A1-A5BD-5553CB841E93")]
11  public sealed class ModifiedBasicProblemEvaluationExecutionAlgorithm : BasicAlgorithm {
12    public override bool SupportsPause => false;
13
14    [Storable]
15    public ProblemModifier NextModifier { get; private set; } //private setters are needed for HEAL.Attic
16    [Storable]
17    public IScope IndividualScope { get; private set; } //private setters are needed for HEAL.Attic
18    [Storable]
19    public IRandom Random { get; private set; } //private setters are needed for HEAL.Attic
20    [Storable]
21    public double[] Qualities { get; private set; } //private setters are needed for HEAL.Attic
22
23    #region Constructors & Cloning
24    [StorableConstructor]
25    private ModifiedBasicProblemEvaluationExecutionAlgorithm(StorableConstructorFlag _) : base(_) { }
26    private ModifiedBasicProblemEvaluationExecutionAlgorithm(ModifiedBasicProblemEvaluationExecutionAlgorithm original, Cloner cloner) : base(original, cloner) {
27      IndividualScope = cloner.Clone(original.IndividualScope);
28      Random = cloner.Clone(original.Random);
29      Qualities = original.Qualities.ToArray();
30      NextModifier = cloner.Clone(original.NextModifier);
31
32    }
33    public ModifiedBasicProblemEvaluationExecutionAlgorithm(ProblemModifier nextModifier, IScope individualScope, IRandom random) {
34      NextModifier = nextModifier;
35      IndividualScope = individualScope;
36      Random = random;
37      Qualities = new[] { double.NaN };
38    }
39
40    public override IDeepCloneable Clone(Cloner cloner) {
41      return new ModifiedBasicProblemEvaluationExecutionAlgorithm(this, cloner);
42    }
43    #endregion
44
45    protected override void Run(CancellationToken cancellationToken) {
46      var encoding = NextModifier.Encoding;
47      var individual = encoding is MultiEncoding multiEncoding
48        ? (Individual)new MultiEncodingIndividual(multiEncoding, IndividualScope)
49        : (Individual)new SingleEncodingIndividual(encoding, IndividualScope);
50
51      var evaluationTask = Task.Run(() => NextModifier.ModifiedEvaluate(individual, Random), cancellationToken);
52      evaluationTask.Wait(cancellationToken);
53      Qualities = evaluationTask.Result;
54    }
55  }
56}
Note: See TracBrowser for help on using the repository browser.