Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3133_ProblemModifiers/HeuristicLab.Problems.Modifiers/Hive/MultiObjectiveBasicProblemEvaluation.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.3 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("3985D750-03D4-4842-A34D-A352BED95190")]
11  public sealed class MultiObjectiveBasicProblemEvaluation : BasicAlgorithm {
12    public override bool SupportsPause => false;
13
14    public new MultiObjectiveBasicProblem<IEncoding> Problem {
15      get => (MultiObjectiveBasicProblem<IEncoding>)base.Problem;
16      private set => base.Problem = value;
17    }
18
19    [Storable]
20    public IScope IndividualScope { get; private set; }
21    [Storable]
22    public IRandom Random { get; private set; }
23    [Storable]
24    public double[] Qualities { get; private set; }
25
26    #region Constructors & Cloning
27    [StorableConstructor]
28    private MultiObjectiveBasicProblemEvaluation(StorableConstructorFlag _) : base(_) { }
29    private MultiObjectiveBasicProblemEvaluation(MultiObjectiveBasicProblemEvaluation original, Cloner cloner) : base(original, cloner) {
30      IndividualScope = cloner.Clone(original.IndividualScope);
31      Random = cloner.Clone(original.Random);
32      Qualities = (double[])original.Qualities.Clone();
33    }
34    public MultiObjectiveBasicProblemEvaluation(MultiObjectiveBasicProblem<IEncoding> problem, IScope individualScope, IRandom random) {
35      Problem = problem;
36      IndividualScope = individualScope;
37      Random = random;
38      Qualities = Enumerable.Repeat(double.NaN, problem.Maximization.Length).ToArray();
39    }
40
41    public override IDeepCloneable Clone(Cloner cloner) {
42      return new MultiObjectiveBasicProblemEvaluation(this, cloner);
43    }
44    #endregion
45
46    protected override void Run(CancellationToken cancellationToken) {
47      var singleEncoding = Problem.Encoding;
48      var individual = Problem.Encoding is MultiEncoding multiEncoding
49        ? (Individual)new MultiEncodingIndividual(multiEncoding, IndividualScope)
50        : (Individual)new SingleEncodingIndividual(singleEncoding, IndividualScope);
51      var evaluationTask = Task.Run(() => Problem.Evaluate(individual, Random), cancellationToken);
52      evaluationTask.Wait(cancellationToken);
53      Qualities = evaluationTask.Result;
54    }
55  }
56}
Note: See TracBrowser for help on using the repository browser.