Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OptimizationNetworks/HeuristicLab.Networks.IntegratedOptimization/3.3/Problems/TourProfitProblem.cs @ 14598

Last change on this file since 14598 was 14598, checked in by jkarder, 7 years ago

#2205: worked on optimization networks

  • switched from IConfigurationPorts to IMessagePorts
  • removed option to clone algorithms in OrchestratedAlgorithmNodes
  • made properties of TourProfitProblem storable
  • fixed event handler registration
File size: 3.8 KB
Line 
1using System.Collections.Generic;
2using System.Linq;
3using HeuristicLab.Common;
4using HeuristicLab.Core;
5using HeuristicLab.Encodings.BinaryVectorEncoding;
6using HeuristicLab.Encodings.PermutationEncoding;
7using HeuristicLab.Optimization;
8using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
9using HeuristicLab.Problems.TravelingSalesman;
10
11namespace HeuristicLab.Networks.IntegratedOptimization {
12  [Item("Tour Profit Problem", "Represents a problem whose objective is to optimize a TTP tour for fixed TTP loot.")]
13  [Creatable(CreatableAttribute.Categories.Problems, Priority = 999)]
14  [StorableClass]
15  public class TourProfitProblem : SingleObjectiveBasicProblem<PermutationEncoding> {
16    public override bool Maximization {
17      get { return true; }
18    }
19
20    [Storable]
21    public TravelingSalesmanProblem Tsp { get; set; }
22    [Storable]
23    public BinaryKnapsackProblem Ksp { get; set; }
24    [Storable]
25    public BinaryVector FixedKspSolution { get; set; }
26    [Storable]
27    public int[] Availability { get; set; }
28    [Storable]
29    public double RentingRatio { get; set; }
30    [Storable]
31    public double MinSpeed { get; set; }
32    [Storable]
33    public double MaxSpeed { get; set; }
34
35    [StorableConstructor]
36    protected TourProfitProblem(bool deserializing) : base(deserializing) { }
37    protected TourProfitProblem(TourProfitProblem original, Cloner cloner) : base(original, cloner) {
38      Tsp = cloner.Clone(original.Tsp);
39      Ksp = cloner.Clone(original.Ksp);
40      FixedKspSolution = cloner.Clone(original.FixedKspSolution);
41      Availability = original.Availability != null ? (int[])original.Availability.Clone() : null;
42      RentingRatio = original.RentingRatio;
43      MinSpeed = original.MinSpeed;
44      MaxSpeed = original.MaxSpeed;
45    }
46    public TourProfitProblem() : base() {
47      Encoding.Length = 5;
48    }
49
50    public override IDeepCloneable Clone(Cloner cloner) {
51      return new TourProfitProblem(this, cloner);
52    }
53
54    public override double Evaluate(Individual individual, IRandom random) {
55      return TtpUtils.EvaluateTtp(Tsp, individual.Permutation().CloneAsArray(),
56                                  Ksp, FixedKspSolution.CloneAsArray(),
57                                  Availability, RentingRatio, MinSpeed, MaxSpeed);
58    }
59
60    public override IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
61      while (true) {
62        var neighbor = individual.Copy();
63        switch (random.Next(7)) {
64          case 0: InsertionManipulator.Apply(random, neighbor.Permutation()); break;
65          case 1: InversionManipulator.Apply(random, neighbor.Permutation()); break;
66          case 2: ScrambleManipulator.Apply(random, neighbor.Permutation()); break;
67          case 3: Swap2Manipulator.Apply(random, neighbor.Permutation()); break;
68          case 4: Swap3Manipulator.Apply(random, neighbor.Permutation()); break;
69          case 5: TranslocationInversionManipulator.Apply(random, neighbor.Permutation()); break;
70          case 6: TranslocationManipulator.Apply(random, neighbor.Permutation()); break;
71        }
72        yield return neighbor;
73      }
74    }
75
76    public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
77      base.Analyze(individuals, qualities, results, random);
78      var orderedIndividuals = individuals.Zip(qualities, (i, q) => new { Individual = i, Quality = q }).OrderBy(z => z.Quality);
79      var best = Maximization ? orderedIndividuals.Last().Individual : orderedIndividuals.First().Individual;
80
81      if (!results.ContainsKey("Best TSP Solution"))
82        results.Add(new Result("Best TSP Solution", typeof(Permutation)));
83      results["Best TSP Solution"].Value = (IItem)best.Permutation().Clone();
84    }
85  }
86}
Note: See TracBrowser for help on using the repository browser.