Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/26/15 15:52:03 (9 years ago)
Author:
abeham
Message:

#2205:

  • Added cosolving KSPTSP network
  • Fixed output path in projects for release target
  • Fixed penalty in seqsolving KSPTSP network (would produce infeasible solutions)
  • Added some additional references
File:
1 copied

Legend:

Unmodified
Added
Removed
  • branches/OptimizationNetworks/HeuristicLab.Networks/3.3/KSPTSPConcurrentControlNetworkCode.cs

    r11711 r11823  
    2020#endregion
    2121
     22using System.Drawing;
     23using System.Linq;
    2224using HeuristicLab.Algorithms.GeneticAlgorithm;
    2325using HeuristicLab.Common;
     
    2628using HeuristicLab.Data;
    2729using HeuristicLab.Encodings.BinaryVectorEncoding;
     30using HeuristicLab.Encodings.PermutationEncoding;
    2831using HeuristicLab.Networks.Programmable;
    2932using HeuristicLab.Operators;
     
    3235using HeuristicLab.Problems.Knapsack;
    3336using HeuristicLab.Problems.TravelingSalesman;
    34 using System.Drawing;
    35 using System.Linq;
     37using HeuristicLab.Selection;
    3638
    3739namespace HeuristicLab.Networks {
    38   [Item("KSPTSPNetwork", "An optimization network which connects a KSP and a TSP.")]
    39   public class CompiledKSPTSPNetwork : ProgrammableNetwork.CompiledProgrammableNetwork {
     40  [Item("KSPTSP Concurrent-Control Network", "An optimization network which connects a KSP and a TSP.")]
     41  public class CompiledKSPTSPConcurrentControlNetwork : ProgrammableNetwork.CompiledProgrammableNetwork {
    4042    public static new Image StaticItemImage {
    4143      get { return HeuristicLab.Common.Resources.VSImageLibrary.Module; }
    4244    }
    4345
    44     protected CompiledKSPTSPNetwork(CompiledKSPTSPNetwork original, Cloner cloner) : base(original, cloner) { }
    45     public CompiledKSPTSPNetwork(ProgrammableNetwork context)
     46    protected CompiledKSPTSPConcurrentControlNetwork(CompiledKSPTSPConcurrentControlNetwork original, Cloner cloner) : base(original, cloner) { }
     47    public CompiledKSPTSPConcurrentControlNetwork(ProgrammableNetwork context)
    4648      : base(context) {
    4749      if (Nodes.Count == 0)
     
    5052
    5153    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() {
    5858      #region ParametersNode
    5959      var paramsNode = new UserDefinedNode("ParametersNode");
     
    6363      paramsNode.Ports.Add(paramsPort);
    6464
    65       paramsPort.Parameters.Add(new PortParameter<DoubleMatrix>("Cities") {
     65      paramsPort.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") {
    6666        Type = PortParameterType.Output,
    6767        DefaultValue = new DoubleMatrix(new double[,] {
     
    9191      #endregion
    9292
     93      #region ControlNode
     94      var controlNode = new KSPTSPControl("KSPTSP Control");
     95      Nodes.Add(controlNode);
     96      #endregion
     97
    9398      #region KSPNode
    9499      var kspNode = new AlgorithmNode("KSPNode");
    95100      Nodes.Add(kspNode);
    96101
    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);
    139150      #endregion
    140151
     
    143154      Nodes.Add(tspNode);
    144155
    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
    170202
    171203      #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
    177218
    178219      paramsPort.SendMessage(paramsPort.PrepareMessage());
    179       #endregion
    180220    }
    181221  }
Note: See TracChangeset for help on using the changeset viewer.