Changeset 11823 for branches/OptimizationNetworks/HeuristicLab.Networks/3.3/KSPTSPConcurrentControlNetworkCode.cs
- Timestamp:
- 01/26/15 15:52:03 (9 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/OptimizationNetworks/HeuristicLab.Networks/3.3/KSPTSPConcurrentControlNetworkCode.cs
r11711 r11823 20 20 #endregion 21 21 22 using System.Drawing; 23 using System.Linq; 22 24 using HeuristicLab.Algorithms.GeneticAlgorithm; 23 25 using HeuristicLab.Common; … … 26 28 using HeuristicLab.Data; 27 29 using HeuristicLab.Encodings.BinaryVectorEncoding; 30 using HeuristicLab.Encodings.PermutationEncoding; 28 31 using HeuristicLab.Networks.Programmable; 29 32 using HeuristicLab.Operators; … … 32 35 using HeuristicLab.Problems.Knapsack; 33 36 using HeuristicLab.Problems.TravelingSalesman; 34 using System.Drawing; 35 using System.Linq; 37 using HeuristicLab.Selection; 36 38 37 39 namespace HeuristicLab.Networks { 38 [Item("KSPTSP Network", "An optimization network which connects a KSP and a TSP.")]39 public class CompiledKSPTSP Network : ProgrammableNetwork.CompiledProgrammableNetwork {40 [Item("KSPTSP Concurrent-Control Network", "An optimization network which connects a KSP and a TSP.")] 41 public class CompiledKSPTSPConcurrentControlNetwork : ProgrammableNetwork.CompiledProgrammableNetwork { 40 42 public static new Image StaticItemImage { 41 43 get { return HeuristicLab.Common.Resources.VSImageLibrary.Module; } 42 44 } 43 45 44 protected CompiledKSPTSP Network(CompiledKSPTSPNetwork original, Cloner cloner) : base(original, cloner) { }45 public CompiledKSPTSP Network(ProgrammableNetwork context)46 protected CompiledKSPTSPConcurrentControlNetwork(CompiledKSPTSPConcurrentControlNetwork original, Cloner cloner) : base(original, cloner) { } 47 public CompiledKSPTSPConcurrentControlNetwork(ProgrammableNetwork context) 46 48 : base(context) { 47 49 if (Nodes.Count == 0) … … 50 52 51 53 public override IDeepCloneable Clone(Cloner cloner) { 52 return new CompiledKSPTSPNetwork(this, cloner); 53 } 54 55 public override void Initialize() { 56 base.Initialize(); 57 54 return new CompiledKSPTSPConcurrentControlNetwork(this, cloner); 55 } 56 57 public void Initialize() { 58 58 #region ParametersNode 59 59 var paramsNode = new UserDefinedNode("ParametersNode"); … … 63 63 paramsNode.Ports.Add(paramsPort); 64 64 65 paramsPort.Parameters.Add(new PortParameter<DoubleMatrix>("C ities") {65 paramsPort.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") { 66 66 Type = PortParameterType.Output, 67 67 DefaultValue = new DoubleMatrix(new double[,] { … … 91 91 #endregion 92 92 93 #region ControlNode 94 var controlNode = new KSPTSPControl("KSPTSP Control"); 95 Nodes.Add(controlNode); 96 #endregion 97 93 98 #region KSPNode 94 99 var kspNode = new AlgorithmNode("KSPNode"); 95 100 Nodes.Add(kspNode); 96 101 97 var configPort = new ConfigurationPort("ConfigureKSP"); 98 kspNode.Ports.Add(configPort); 99 100 configPort.Parameters.Add(new PortParameter<IntValue>("KnapsackCapacity") { 101 Type = PortParameterType.Input 102 }); 103 configPort.Parameters.Add(new PortParameter<IntArray>("Values") { 104 Type = PortParameterType.Input 105 }); 106 configPort.Parameters.Add(new PortParameter<IntArray>("Weights") { 107 Type = PortParameterType.Input 108 }); 109 110 var evaluatePort = new MessagePort("EvaluateRoute"); 111 kspNode.Ports.Add(evaluatePort); 112 113 evaluatePort.Parameters.Add(new PortParameter<BinaryVector>("KnapsackSolution") { 114 Type = PortParameterType.Output 115 }); 116 evaluatePort.Parameters.Add(new PortParameter<DoubleValue>("Quality") { 117 Type = PortParameterType.Output | PortParameterType.Input 118 }); 119 evaluatePort.Parameters.Add(new PortParameter<DoubleValue>("TransportCosts") { 120 Type = PortParameterType.Input 121 }); 122 evaluatePort.Parameters.Add(new PortParameter<PathTSPTour>("Route") { 123 Type = PortParameterType.Input 124 }); 125 126 var kspGA = new GeneticAlgorithm(); 127 kspGA.Problem = new KnapsackProblem(); 128 kspGA.MaximumGenerations.Value = 50; 129 kspGA.PopulationSize.Value = 10; 130 kspGA.Mutator = kspGA.MutatorParameter.ValidValues.Where(x => x.Name == "SinglePositionBitflipManipulator").First(); 131 kspNode.Algorithm = kspGA; 132 133 var hook = new HookOperator(); 134 hook.Parameters.Add(new LookupParameter<BinaryVector>("KnapsackSolution") { Hidden = false }); 135 hook.Parameters.Add(new LookupParameter<DoubleValue>("Quality") { Hidden = false }); 136 hook.Parameters.Add(new LookupParameter<DoubleValue>("TransportCosts") { Hidden = false }); 137 hook.Parameters.Add(new LookupParameter<PathTSPTour>("Route") { Hidden = false }); 138 ((FixedValueParameter<OperatorList>)kspGA.Problem.Evaluator.Parameters["AfterExecutionOperators"]).Value.Add(hook); 102 var kspConfigPort = new ConfigurationPort("ConfigureKSP"); 103 kspNode.Ports.Add(kspConfigPort); 104 105 kspConfigPort.Parameters.Add(new PortParameter<IntValue>("KnapsackCapacity") { 106 Type = PortParameterType.Input 107 }); 108 kspConfigPort.Parameters.Add(new PortParameter<IntArray>("Values") { 109 Type = PortParameterType.Input 110 }); 111 kspConfigPort.Parameters.Add(new PortParameter<IntArray>("Weights") { 112 Type = PortParameterType.Input 113 }); 114 115 var kspControlPort = new MessagePort("ControlPort"); 116 kspNode.Ports.Add(kspControlPort); 117 118 kspControlPort.Parameters.Add(new PortParameter<BinaryVector>("KnapsackSolution") { 119 Type = PortParameterType.Output 120 }); 121 kspControlPort.Parameters.Add(new PortParameter<DoubleValue>("Quality") { 122 Type = PortParameterType.Input 123 }); 124 125 var kspReportPort = new MessagePort("ReportPort"); 126 kspNode.Ports.Add(kspReportPort); 127 128 kspReportPort.Parameters.Add(new PortParameter<KnapsackSolution>("BestSolution") { 129 Type = PortParameterType.Output 130 }); 131 132 var kspGa = new GeneticAlgorithm { 133 Problem = new KnapsackProblem(), 134 MaximumGenerations = { Value = 500 }, 135 PopulationSize = { Value = 200 } 136 }; 137 kspGa.Mutator = kspGa.MutatorParameter.ValidValues.First(x => x.Name == "SinglePositionBitflipManipulator"); 138 kspGa.Crossover = kspGa.CrossoverParameter.ValidValues.First(x => x.Name == "SinglePointCrossover"); 139 kspGa.Selector = kspGa.SelectorParameter.ValidValues.First(x => x.Name == "TournamentSelector"); 140 kspNode.Algorithm = kspGa; 141 142 var kspEvalHook = new HookOperator() { Name = "KSP Eval Hook" }; 143 kspEvalHook.Parameters.Add(new LookupParameter<BinaryVector>("KnapsackSolution") { Hidden = false }); 144 kspEvalHook.Parameters.Add(new LookupParameter<DoubleValue>("Quality") { Hidden = false }); 145 ((InstrumentedOperator)kspGa.Problem.Evaluator).AfterExecutionOperators.Add(kspEvalHook); 146 147 var kspIterHook = new HookOperator() { Name = "KSP Iter Hook" }; 148 kspIterHook.Parameters.Add(new LookupParameter<KnapsackSolution>("BestSolution") { Hidden = false }); 149 kspGa.Analyzer.AfterExecutionOperators.Add(kspIterHook); 139 150 #endregion 140 151 … … 143 154 Nodes.Add(tspNode); 144 155 145 var executePort = new ExecutionPort("Execute"); 146 tspNode.Ports.Add(executePort); 147 148 executePort.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") { 149 Type = PortParameterType.Input 150 }); 151 executePort.Parameters.Add(new PortParameter<DoubleValue>("BestQuality") { 152 Type = PortParameterType.Output 153 }); 154 executePort.Parameters.Add(new PortParameter<PathTSPTour>("Best TSP Solution") { 155 Type = PortParameterType.Output 156 }); 157 158 var tspGA = new GeneticAlgorithm(); 159 tspGA.Problem = new TravelingSalesmanProblem(); 160 tspGA.MaximumGenerations.Value = 100; 161 tspGA.PopulationSize.Value = 50; 162 tspGA.Mutator = tspGA.MutatorParameter.ValidValues.Where(x => x.Name == "InversionManipulator").First(); 163 tspNode.Algorithm = tspGA; 164 #endregion 165 166 #region KSPTSPConnector 167 var ksptspConnector = (INode)new KSPTSPConnector(); 168 Nodes.Add(ksptspConnector); 169 #endregion 156 var tspConfigPort = new ConfigurationPort("ConfigureTSP"); 157 tspNode.Ports.Add(tspConfigPort); 158 159 tspConfigPort.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") { 160 Type = PortParameterType.Input 161 }); 162 163 var tspControlPort = new MessagePort("ControlPort"); 164 tspNode.Ports.Add(tspControlPort); 165 166 tspControlPort.Parameters.Add(new PortParameter<Permutation>("TSPTour") { 167 Type = PortParameterType.Output 168 }); 169 tspControlPort.Parameters.Add(new PortParameter<DoubleValue>("TSPTourLength") { 170 Type = PortParameterType.Input 171 }); 172 173 var tspReportPort = new MessagePort("ReportPort"); 174 tspNode.Ports.Add(tspReportPort); 175 176 tspReportPort.Parameters.Add(new PortParameter<PathTSPTour>("BestSolution") { 177 Type = PortParameterType.Output 178 }); 179 180 var tspGa = new GeneticAlgorithm { 181 Problem = new TravelingSalesmanProblem(), 182 MaximumGenerations = { Value = 500 }, 183 PopulationSize = { Value = 200 } 184 }; 185 ((IValueParameter<BoolValue>)tspGa.Problem.MaximizationParameter).Value.Value = true; 186 tspGa.Crossover = tspGa.CrossoverParameter.ValidValues.First(x => x.Name == "EdgeRecombinationCrossover"); 187 tspGa.Mutator = tspGa.MutatorParameter.ValidValues.First(x => x.Name == "InversionManipulator"); 188 tspGa.Selector = tspGa.SelectorParameter.ValidValues.First(x => x.Name == "TournamentSelector"); 189 ((TournamentSelector)tspGa.Selector).GroupSizeParameter.Value.Value = 3; 190 tspNode.Algorithm = tspGa; 191 192 var tspEvalHook = new HookOperator() { Name = "TSP Eval Hook" }; 193 tspEvalHook.Parameters.Add(new LookupParameter<Permutation>("TSPTour") { Hidden = false }); 194 tspEvalHook.Parameters.Add(new LookupParameter<DoubleValue>("TSPTourLength") { Hidden = false }); 195 ((InstrumentedOperator)tspGa.Problem.Evaluator).AfterExecutionOperators.Add(tspEvalHook); 196 197 var tspIterHook = new HookOperator() { Name = "TSP Iter Hook" }; 198 tspIterHook.Parameters.Add(new LookupParameter<PathTSPTour>("BestSolution") { Hidden = false }); 199 tspGa.Analyzer.AfterExecutionOperators.Add(tspIterHook); 200 #endregion 201 170 202 171 203 #region Wire Ports 172 hook.Port = evaluatePort; 173 configPort.ConnectedPort = paramsPort; 174 evaluatePort.ConnectedPort = (IMessagePort)ksptspConnector.Ports["KSP Connector"]; 175 ((IMessagePort)ksptspConnector.Ports["Parameters"]).ConnectedPort = paramsPort; 176 ((IMessagePort)ksptspConnector.Ports["TSP Connector"]).ConnectedPort = executePort; 204 ((ConfigurationPort)((INode)controlNode).Ports["Configure"]).ConnectedPort = paramsPort; 205 kspConfigPort.ConnectedPort = paramsPort; 206 tspConfigPort.ConnectedPort = paramsPort; 207 208 kspEvalHook.Port = kspControlPort; 209 kspControlPort.ConnectedPort = (IMessagePort)((INode)controlNode).Ports["Evaluate KSP"]; 210 tspEvalHook.Port = tspControlPort; 211 tspControlPort.ConnectedPort = (IMessagePort)((INode)controlNode).Ports["Evaluate TSP"]; 212 213 kspIterHook.Port = kspReportPort; 214 kspReportPort.ConnectedPort = (IMessagePort)((INode)controlNode).Ports["Add KSP Solution"]; 215 tspIterHook.Port = tspReportPort; 216 tspReportPort.ConnectedPort = (IMessagePort)((INode)controlNode).Ports["Add TSP Solution"]; 217 #endregion 177 218 178 219 paramsPort.SendMessage(paramsPort.PrepareMessage()); 179 #endregion180 220 } 181 221 }
Note: See TracChangeset
for help on using the changeset viewer.