Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ExperimentConverter.cs

Last change on this file was 18077, checked in by dpiringe, 2 years ago

#3026

  • added the dockerhub readme file
  • fixed a bug which caused changed values (changed by events) to be overwritten with wrong values
File size: 1.8 KB
Line 
1using System;
2using HeuristicLab.Core;
3using HeuristicLab.Optimization;
4
5namespace HeuristicLab.JsonInterface {
6  public class ExperimentConverter : BaseConverter {
7    public override int Priority => 10;
8
9    public override bool CanConvertType(Type t) =>
10      HEAL.Attic.Mapper.StaticCache.GetType(new Guid("A8A4536B-54C1-4A17-AB58-A6006F7F394B")).IsAssignableFrom(t);
11
12    public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
13      dynamic experiment = (dynamic)value;
14      EmptyJsonItem experimentJI = new EmptyJsonItem() {
15        Name = experiment.Name,
16        Description = value.ItemDescription
17      };
18
19      OptimizerList optimizers = experiment.Optimizers;
20      foreach(var o in optimizers) {
21        var optimizerJI = root.Extract(o, root);
22        if (!(optimizerJI is UnsupportedJsonItem)) {
23          experimentJI.AddChildren(optimizerJI);
24        }
25      }
26
27      int worker = (int)experiment.NumberOfWorkers;
28      experimentJI.AddChildren(new IntJsonItem() {
29        Name = "NumberOfWorkers",
30        Description = "The number of workers for this experiment.",
31        Value = worker,
32        Minimum = 1,
33        Maximum = int.MaxValue
34      });
35
36      return experimentJI;
37    }
38
39    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
40      dynamic experiment = (dynamic)item;
41      OptimizerList optimizers = experiment.Optimizers;
42      if (data.Children != null) {
43        foreach (var i in data.Children) {
44          if (i.Path.EndsWith("NumberOfWorkers") && i is IntJsonItem worker && i.Active) {
45            experiment.NumberOfWorkers = worker.Value;
46          } else {
47            var optimizer = optimizers.Find(o => i.Path.EndsWith(o.Name));
48            root.Inject(optimizer, i, root);
49          }
50        }
51      }
52    }
53  }
54}
Note: See TracBrowser for help on using the repository browser.