using System; using System.Globalization; using System.Linq; using HeuristicLab.BioBoost.Data; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Encodings.IntegerVectorEncoding; using HeuristicLab.Encodings.RealVectorEncoding; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using System.Collections.Generic; using HeuristicLab.BioBoost.Representation; namespace HeuristicLab.BioBoost.Operators.Transformation { [StorableClass] public class FeedstockDeflater : FeedstockTransformer { public ILookupParameter ViableSourcesParameter { get { return (ILookupParameter) Parameters["ViableSources"]; } } public ILookupParameter ViableTargetsParameter { get { return (ILookupParameter) Parameters["ViableTargets"]; } } public IntArray ViableSources { set { ViableSourcesParameter.ActualValue = value; } } public IntArray ViableTargets { set { ViableTargetsParameter.ActualValue = value; } } #region Construction & Cloning [StorableConstructor] protected FeedstockDeflater(bool isDeserializing) : base(isDeserializing) {} protected FeedstockDeflater(FeedstockDeflater orig, Cloner cloner) : base(orig, cloner) {} public FeedstockDeflater() { Parameters.Add(new LookupParameter("ViableSources", "A list with all indices of viable source regions.")); Parameters.Add(new LookupParameter("ViableTargets", "A list with all indices of viable target regions.")); } public override IDeepCloneable Clone(Cloner cloner) { return new FeedstockDeflater(this, cloner); } #endregion public override IOperation Apply() { var product = ProductName; var potentials = GetFromProblemData(LayerDescriptor.PotentialsFromProblemData.NameWithPrefix(product)); var utilizations = GetFromScope(LayerDescriptor.Utilizations.NameWithPrefix(product)); if (potentials != null && utilizations != null) { var newUtilizations = new List(); for (int i = 0; i < potentials.Length; i++) { if (potentials[i] > 0) { newUtilizations.Add(utilizations[i]); } } TransformValue(LayerDescriptor.Utilizations.NameWithPrefix(product), new RealVector(newUtilizations.ToArray())); } var targets = GetFromScope(LayerDescriptor.TransportTargets.NameWithPrefix(product)); var viableSources = new List(); if (potentials != null && targets != null) { for (int i = 0; i < potentials.Length; i++) { if (potentials[i] > 0) { viableSources.Add(i); } } ViableSources = new IntArray(viableSources.ToArray()); } var conversion = ProblemData.Conversions[product].FirstOrDefault(); var viableTargets = new List(); if (conversion != null && targets != null) { for (int i = 0; i < targets.Length; i++) { if (GetMaxCapacity(i, conversion.MaxCapacities, Double.MaxValue) > 0) { viableTargets.Add(i); } } ViableTargets = new IntArray(viableTargets.ToArray()); } return base.Apply(); } } }