protected KnapsackSolution(KnapsackSolution original, Cloner cloner)
     : base(original, cloner)
 {
     this.binaryVector = cloner.Clone(original.binaryVector);
     this.quality      = cloner.Clone(original.quality);
     this.capacity     = cloner.Clone(original.capacity);
     this.weights      = cloner.Clone(original.weights);
     this.values       = cloner.Clone(original.values);
     Initialize();
 }
        public override IOperation Apply()
        {
            ItemArray <BinaryVector> binaryVectors = BinaryVectorParameter.ActualValue;
            ItemArray <DoubleValue>  qualities     = QualityParameter.ActualValue;
            ResultCollection         results       = ResultsParameter.ActualValue;
            bool        max = MaximizationParameter.ActualValue.Value;
            DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;

            int i = -1;

            if (!max)
            {
                i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
            }
            else
            {
                i = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;
            }

            if (bestKnownQuality == null ||
                max && qualities[i].Value > bestKnownQuality.Value ||
                !max && qualities[i].Value < bestKnownQuality.Value)
            {
                BestKnownQualityParameter.ActualValue  = new DoubleValue(qualities[i].Value);
                BestKnownSolutionParameter.ActualValue = (BinaryVector)binaryVectors[i].Clone();
            }

            KnapsackSolution solution = BestSolutionParameter.ActualValue;

            if (solution == null)
            {
                solution = new KnapsackSolution((BinaryVector)binaryVectors[i].Clone(), new DoubleValue(qualities[i].Value),
                                                KnapsackCapacityParameter.ActualValue, WeightsParameter.ActualValue, ValuesParameter.ActualValue);
                BestSolutionParameter.ActualValue = solution;
                results.Add(new Result("Best Knapsack Solution", solution));
            }
            else
            {
                if (max && qualities[i].Value > solution.Quality.Value ||
                    !max && qualities[i].Value < solution.Quality.Value)
                {
                    solution.BinaryVector = (BinaryVector)binaryVectors[i].Clone();
                    solution.Quality      = new DoubleValue(qualities[i].Value);
                    solution.Capacity     = KnapsackCapacityParameter.ActualValue;
                    solution.Weights      = WeightsParameter.ActualValue;
                    solution.Values       = ValuesParameter.ActualValue;
                }
            }

            return(base.Apply());
        }
    public override IOperation Apply() {
      ItemArray<BinaryVector> binaryVectors = BinaryVectorParameter.ActualValue;
      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
      ResultCollection results = ResultsParameter.ActualValue;
      bool max = MaximizationParameter.ActualValue.Value;
      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;

      int i = -1;
      if (!max)
        i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
      else i = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;

      if (bestKnownQuality == null ||
          max && qualities[i].Value > bestKnownQuality.Value ||
          !max && qualities[i].Value < bestKnownQuality.Value) {
        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
        BestKnownSolutionParameter.ActualValue = (BinaryVector)binaryVectors[i].Clone();
      }

      KnapsackSolution solution = BestSolutionParameter.ActualValue;
      if (solution == null) {
        solution = new KnapsackSolution((BinaryVector)binaryVectors[i].Clone(), new DoubleValue(qualities[i].Value),
          KnapsackCapacityParameter.ActualValue, WeightsParameter.ActualValue, ValuesParameter.ActualValue);
        BestSolutionParameter.ActualValue = solution;
        results.Add(new Result("Best Knapsack Solution", solution));
      } else {
        if (max && qualities[i].Value > solution.Quality.Value ||
          !max && qualities[i].Value < solution.Quality.Value) {
          solution.BinaryVector = (BinaryVector)binaryVectors[i].Clone();
          solution.Quality = new DoubleValue(qualities[i].Value);
          solution.Capacity = KnapsackCapacityParameter.ActualValue;
          solution.Weights = WeightsParameter.ActualValue;
          solution.Values = ValuesParameter.ActualValue;
        }
      }

      return base.Apply();
    }
 protected KnapsackSolution(KnapsackSolution original, Cloner cloner)
   : base(original, cloner) {
   this.binaryVector = cloner.Clone(original.binaryVector);
   this.quality = cloner.Clone(original.quality);
   this.capacity = cloner.Clone(original.capacity);
   this.weights = cloner.Clone(original.weights);
   this.values = cloner.Clone(original.values);
   Initialize();
 }