using System.Collections.Generic; using System.Linq; using HeuristicLab.Common; using HeuristicLab.Encodings.RealVectorEncoding; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Random; namespace HeuristicLab.BioBoost.Operators.Mutation { [StorableClass] public class PlantSupplierToggler : PlantBasedUtilizationModifier { #region Construction & Cloning [StorableConstructor] public PlantSupplierToggler(bool isDeserializing) {} public PlantSupplierToggler(PlantSupplierToggler orig, Cloner cloner) : base(orig, cloner) {} public PlantSupplierToggler() {} public override IDeepCloneable Clone(Cloner cloner) { return new PlantSupplierToggler(this, cloner); } #endregion public override void Redistribute(RealVector utilizations, List supplierIndices) { var i = supplierIndices.SampleRandom(Random, 1).First(); if (utilizations[i] > 0) { utilizations[i] = 0; } else { var min = Bounds[i%Bounds.Rows, 0]; var max = Bounds[i%Bounds.Rows, 1]; utilizations[i] = (max + min)/2; } } } }