Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OptimizationNetworks/HeuristicLab.Networks.IntegratedOptimization/3.3/TtpNetwork5.cs @ 14592

Last change on this file since 14592 was 14586, checked in by jkarder, 8 years ago

#2205: worked on optimization networks

  • added projects for integrated optimization (orchestration)
File size: 6.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using HeuristicLab.Algorithms.CMAEvolutionStrategy;
5using HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm;
6using HeuristicLab.Algorithms.ParameterlessPopulationPyramid;
7using HeuristicLab.Common;
8using HeuristicLab.Core;
9using HeuristicLab.Core.Networks;
10using HeuristicLab.Data;
11using HeuristicLab.Encodings.PermutationEncoding;
12using HeuristicLab.Optimization;
13using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
14using HeuristicLab.Selection;
15
16namespace HeuristicLab.Networks.IntegratedOptimization {
17  [Item("TtpNetwork5", "An optimization network for the TTP.")]
18  [Creatable("Optimization Networks")]
19  [StorableClass]
20  // standard ttp
21  // cmaes variegates ksp values (factors)
22  // 1) init cmaes (length = ksp.values.length)
23  // 2) start cmaes
24  // 3) evaluate vector as follows:
25  // 4) change ksp values (mult by factor in vector)
26  // 5) best ksp
27  // 6) best tsp for ksp selection
28  // 7) return ttp quality
29  public sealed class TtpNetwork5 : Network, IOptimizer {
30    #region Nodes
31    public TtpOrchestratorNode5 Orchestrator {
32      get { return (TtpOrchestratorNode5)Nodes["Orchestrator"]; }
33    }
34
35    public OrchestratedAlgorithmNode MetaSolver {
36      get { return (OrchestratedAlgorithmNode)Nodes["MetaSolver"]; }
37    }
38
39    public OrchestratedAlgorithmNode TspSolver {
40      get { return (OrchestratedAlgorithmNode)Nodes["TspSolver"]; }
41    }
42
43    public OrchestratedAlgorithmNode KspSolver {
44      get { return (OrchestratedAlgorithmNode)Nodes["KspSolver"]; }
45    }
46    #endregion
47
48    [StorableConstructor]
49    private TtpNetwork5(bool deserializing) : base(deserializing) { }
50    private TtpNetwork5(TtpNetwork5 original, Cloner cloner) : base(original, cloner) { }
51    public TtpNetwork5() : base("TtpNetwork5") {
52      var orchestratorNode = new TtpOrchestratorNode5("Orchestrator");
53      Nodes.Add(orchestratorNode);
54
55      var metaSolverNode = new OrchestratedAlgorithmNode("MetaSolver");
56      var cmaes = new CMAEvolutionStrategy();
57      cmaes.MaximumGenerations = 80;
58      cmaes.Engine = new ParallelEngine.ParallelEngine();
59      metaSolverNode.Algorithm = cmaes;
60      orchestratorNode.MetaSolverOrchestrationPort.ConnectedPort = metaSolverNode.OrchestrationPort;
61      Nodes.Add(metaSolverNode);
62
63      var tspSolverNode = new OrchestratedAlgorithmNode("TspSolver") { CloneAlgorithm = true };
64      var osga = new OffspringSelectionGeneticAlgorithm();
65      osga.Problem = new TourProfitProblem();
66      osga.ComparisonFactorLowerBound.Value = 1.0;
67      osga.ComparisonFactorModifier = null;
68      osga.ComparisonFactorUpperBound.Value = 1.0;
69      var crossover = (MultiPermutationCrossover)(osga.Crossover = osga.CrossoverParameter.ValidValues.First(x => x is MultiPermutationCrossover));
70      foreach (var c in crossover.Operators)
71        crossover.Operators.SetItemCheckedState(c, c is CosaCrossover || c is OrderCrossover2 || c is PartiallyMatchedCrossover);
72      osga.MaximumSelectionPressure.Value = 200;
73      osga.Mutator = osga.MutatorParameter.ValidValues.First(x => x is MultiPermutationManipulator);
74      osga.PopulationSize.Value = 200;
75      osga.Selector = osga.SelectorParameter.ValidValues.First(x => x is RandomSelector);
76      tspSolverNode.Algorithm = osga;
77      orchestratorNode.TspSolverOrchestrationPort.ConnectedPort = tspSolverNode.OrchestrationPort;
78      Nodes.Add(tspSolverNode);
79
80      var kspSolverNode = new OrchestratedAlgorithmNode("KspSolver") { CloneAlgorithm = true };
81      var p3 = new ParameterlessPopulationPyramid();
82      p3.Problem = orchestratorNode.KspParameter.Value;
83      p3.MaximumRuntime = 3;
84      kspSolverNode.Algorithm = p3;
85      orchestratorNode.KspSolverOrchestrationPort.ConnectedPort = kspSolverNode.OrchestrationPort;
86      Nodes.Add(kspSolverNode);
87
88      #region Import
89      DoubleMatrix tspCoordinates;
90      IntValue kspCapacity; IntArray kspItemWeights; IntArray kspItemValues;
91      IntArray ttpAvailability; DoubleValue ttpMinSpeed; DoubleValue ttpMaxSpeed; DoubleValue ttpRentingRatio;
92      TtpImporter.ImportTtpInstance(@"ttp-instances\berlin52-ttp\berlin52_n51_uncorr-similar-weights_05.ttp",
93          out tspCoordinates,
94          out kspCapacity, out kspItemValues, out kspItemWeights,
95          out ttpAvailability, out ttpMinSpeed, out ttpMaxSpeed, out ttpRentingRatio);
96
97      var tsp = orchestratorNode.TspParameter.Value;
98      tsp.Coordinates = tspCoordinates;
99
100      var ksp = orchestratorNode.KspParameter.Value;
101      ksp.KnapsackCapacity = kspCapacity;
102      ksp.Encoding.Length = kspItemValues.Length;
103      ksp.Values = kspItemValues;
104      ksp.Weights = kspItemWeights;
105
106      orchestratorNode.AvailabilityParameter.Value = ttpAvailability;
107      orchestratorNode.MinSpeedParameter.Value = ttpMinSpeed;
108      orchestratorNode.MaxSpeedParameter.Value = ttpMaxSpeed;
109      orchestratorNode.RentingRatioParameter.Value = ttpRentingRatio;
110      #endregion
111    }
112
113    public event EventHandler ExecutionStateChanged;
114    public event EventHandler ExecutionTimeChanged;
115    public event EventHandler Prepared;
116    public event EventHandler Started;
117    public event EventHandler Paused;
118    public event EventHandler Stopped;
119    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
120
121    public override IDeepCloneable Clone(Cloner cloner) {
122      return new TtpNetwork5(this, cloner);
123    }
124
125    #region IOptimizer Members
126    public RunCollection Runs { get { return MetaSolver.Algorithm.Runs; } }
127
128    public IEnumerable<IOptimizer> NestedOptimizers { get { yield break; } }
129
130    public ExecutionState ExecutionState { get { return MetaSolver.Algorithm.ExecutionState; } }
131
132    public TimeSpan ExecutionTime { get { return MetaSolver.Algorithm.ExecutionTime; } }
133
134    public void Prepare(bool clearRuns) { MetaSolver.Algorithm.Prepare(clearRuns); }
135
136    public void Prepare() { Orchestrator.Prepare(); }
137
138    public void Start() { Orchestrator.Start(); }
139
140    public void Pause() { Orchestrator.Stop(); }
141
142    public void Stop() { Orchestrator.Stop(); }
143    #endregion
144  }
145}
Note: See TracBrowser for help on using the repository browser.