Changeset 16575 for addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Operators/Mutation/PlantSplitter.cs
- Timestamp:
- 01/28/19 18:24:59 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
addons/HeuristicLab.Problems.BioBoost/HeuristicLab.Problems.BioBoost/3.3/Operators/Mutation/PlantSplitter.cs
r13071 r16575 33 33 using HeuristicLab.Parameters; 34 34 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 35 using HEAL.Attic; 35 36 36 37 namespace HeuristicLab.BioBoost.Operators.Mutation { 37 38 [StorableType("FCC0115E-1465-4C76-A422-E9242B3AB8CA")] 38 39 public class PlantSplitter : SingleSuccessorOperator, IManipulator, IStochasticOperator { 39 40 40 41 #region Parameters 41 public LookupParameter<BioBoostProblemData> ProblemDataParameter { get { return (LookupParameter<BioBoostProblemData>) 42 public LookupParameter<DistanceMatrix> DistanceMatrixParameter { get { return (LookupParameter<DistanceMatrix>) 43 public ValueParameter<BoolValue> DistanceMatrixInProblemDataParameter { get { return (ValueParameter<BoolValue>) 44 public ValueLookupParameter<IntMatrix> RegionBoundsParameter { get { return (ValueLookupParameter<IntMatrix>) Parameters["RegionBounds"]; } }45 public ILookupParameter<IRandom> RandomParameter { get { return (ILookupParameter<IRandom>) 46 public IValueLookupParameter<PercentValue> MergeAvoidanceProbabilityParameter { get { return (IValueLookupParameter<PercentValue>) 47 public IValueLookupParameter<PercentValue> SplitProbabilityParameter { get { return (IValueLookupParameter<PercentValue>) 48 public IValueLookupParameter<PercentValue> MovePercentageParameter { get { return (IValueLookupParameter<PercentValue>) 42 public LookupParameter<BioBoostProblemData> ProblemDataParameter { get { return (LookupParameter<BioBoostProblemData>)Parameters["ProblemData"]; } } 43 public LookupParameter<DistanceMatrix> DistanceMatrixParameter { get { return (LookupParameter<DistanceMatrix>)Parameters["DistanceMatrix"]; } } 44 public ValueParameter<BoolValue> DistanceMatrixInProblemDataParameter { get { return (ValueParameter<BoolValue>)Parameters["DistanceMatrixInProblemData"]; } } 45 public ValueLookupParameter<IntMatrix> RegionBoundsParameter { get { return (ValueLookupParameter<IntMatrix>)Parameters["RegionBounds"]; } } 46 public ILookupParameter<IRandom> RandomParameter { get { return (ILookupParameter<IRandom>)Parameters["Random"]; } } 47 public IValueLookupParameter<PercentValue> MergeAvoidanceProbabilityParameter { get { return (IValueLookupParameter<PercentValue>)Parameters["MergeAvoidanceProbability"]; } } 48 public IValueLookupParameter<PercentValue> SplitProbabilityParameter { get { return (IValueLookupParameter<PercentValue>)Parameters["SplitProbability"]; } } 49 public IValueLookupParameter<PercentValue> MovePercentageParameter { get { return (IValueLookupParameter<PercentValue>)Parameters["MovePercentage"]; } } 49 50 #endregion 50 51 … … 54 55 public IRandom Random { get { return RandomParameter.ActualValue; } } 55 56 public bool DistanceMatrixInProblemData { get { return DistanceMatrixInProblemDataParameter.Value.Value; } } 56 public DistanceMatrix DistanceMatrix { 57 public DistanceMatrix DistanceMatrix 58 { 57 59 get { 58 60 if (DistanceMatrixInProblemData) { 59 return ((IValueParameter<DistanceMatrix>) 61 return ((IValueParameter<DistanceMatrix>)ProblemData.Parameters[DistanceMatrixParameter.ActualName]).Value; 60 62 } else { 61 63 return DistanceMatrixParameter.ActualValue; … … 70 72 #region Construction & Cloning 71 73 [StorableConstructor] 72 public PlantSplitter( bool isDeserializing) {}73 public PlantSplitter(PlantSplitter orig, Cloner cloner) : base(orig, cloner) { }74 public PlantSplitter(StorableConstructorFlag _) : base(_) { } 75 public PlantSplitter(PlantSplitter orig, Cloner cloner) : base(orig, cloner) { } 74 76 75 77 public PlantSplitter() { … … 106 108 : scope.Variables[productTransportName].Value as IntegerVector; 107 109 if (supplyTransports != null) { 108 var plants = supplyTransports.Select((target, source) => new { target, source}).GroupBy(p => p.target).ToList();110 var plants = supplyTransports.Select((target, source) => new { target, source }).GroupBy(p => p.target).ToList(); 109 111 var plant = plants.ElementAt(Random.Next(plants.Count)); 110 112 var forbiddenRegions = new HashSet<int>(); … … 129 131 130 132 private int FindNewTarget(int oldTarget, IRandom random, DistanceMatrix distances, HashSet<int> forbiddenRegions) { 131 var neighborDistances = new double[0].Select((d, idx) => new { index = idx, distance = d}).ToList();133 var neighborDistances = new double[0].Select((d, idx) => new { index = idx, distance = d }).ToList(); 132 134 var maxDistance = 0d; 133 135 for (int j = 0; j < distances.Columns; j++) { 134 136 if (forbiddenRegions.Contains(j)) continue; 135 137 var dist = distances[oldTarget, j]; 136 neighborDistances.Add(new { index = j, distance = dist});138 neighborDistances.Add(new { index = j, distance = dist }); 137 139 maxDistance = Math.Max(dist, maxDistance); 138 140 } 139 neighborDistances = neighborDistances.Select(p => new { p.index, distance = maxDistance - p.distance}).ToList();141 neighborDistances = neighborDistances.Select(p => new { p.index, distance = maxDistance - p.distance }).ToList(); 140 142 neighborDistances.Sort((a, b) => b.distance.CompareTo(a.distance)); 141 143 var totalDistance = neighborDistances.Sum(p => p.distance); 142 var threshold = random.NextDouble() *totalDistance;144 var threshold = random.NextDouble() * totalDistance; 143 145 var sum = 0d; 144 146 var index = 0;
Note: See TracChangeset
for help on using the changeset viewer.