using System.Collections.Generic; using HeuristicLab.BioBoost.Utils; using HeuristicLab.Common; using HeuristicLab.Encodings.RealVectorEncoding; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.BioBoost.Operators.Mutation { [StorableClass] public class PlantScalingMutator : PlantBasedUtilizationModifier { #region Construction & Cloning [StorableConstructor] public PlantScalingMutator(bool isDeserializing) {} public PlantScalingMutator(PlantScalingMutator orig, Cloner cloner) : base(orig, cloner) {} public PlantScalingMutator() {} public override IDeepCloneable Clone(Cloner cloner) { return new PlantScalingMutator(this, cloner); } #endregion public override void Redistribute(RealVector utilizations, List supplierIndices) { var scale = Util.Sqr(Random.NextDouble() + 0.5); // 25% - 225% foreach (var i in supplierIndices) { utilizations[i] = EnforceBounds(utilizations[i] * scale, i); } } } }