Example #1
0
        public override IOperation Apply()
        {
            ItemArray <RealVector>  realVectors = RealVectorParameter.ActualValue;
            ItemArray <DoubleValue> qualities   = QualityParameter.ActualValue;
            bool        max = MaximizationParameter.ActualValue.Value;
            DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
            SingleObjectiveTestFunctionSolution solution = BestSolutionParameter.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 = (RealVector)realVectors[i].Clone();
                if (solution != null)
                {
                    solution.BestKnownRealVector = BestKnownSolutionParameter.ActualValue;
                }
            }

            if (solution == null)
            {
                ResultCollection results = ResultsParameter.ActualValue;
                solution = new SingleObjectiveTestFunctionSolution((RealVector)realVectors[i].Clone(),
                                                                   (DoubleValue)qualities[i].Clone(),
                                                                   EvaluatorParameter.ActualValue);
                solution.Population = realVectors[i].Length == 2
          ? new ItemArray <RealVector>(realVectors.Select(x => x.Clone()).Cast <RealVector>())
          : null;
                solution.BestKnownRealVector = BestKnownSolutionParameter.ActualValue;
                solution.Bounds = BoundsParameter.ActualValue;
                BestSolutionParameter.ActualValue = solution;
                results.Add(new Result("Best Solution", solution));
            }
            else
            {
                if (max && qualities[i].Value > solution.BestQuality.Value ||
                    !max && qualities[i].Value < solution.BestQuality.Value)
                {
                    solution.BestRealVector = (RealVector)realVectors[i].Clone();
                    solution.BestQuality    = (DoubleValue)qualities[i].Clone();
                }
                solution.Population = realVectors[i].Length == 2
          ? new ItemArray <RealVector>(realVectors.Select(x => x.Clone()).Cast <RealVector>())
          : null;
            }

            return(base.Apply());
        }
Example #2
0
 protected SingleObjectiveTestFunctionSolution(SingleObjectiveTestFunctionSolution original, Cloner cloner)
     : base(original, cloner)
 {
     bestKnownRealVector = cloner.Clone(original.bestKnownRealVector);
     bestRealVector      = cloner.Clone(original.bestRealVector);
     bestQuality         = cloner.Clone(original.bestQuality);
     population          = cloner.Clone(original.population);
     evaluator           = cloner.Clone(original.evaluator);
     bounds = cloner.Clone(original.bounds);
     Initialize();
 }
    public override IOperation Apply() {
      ItemArray<RealVector> realVectors = RealVectorParameter.ActualValue;
      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
      bool max = MaximizationParameter.ActualValue.Value;
      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
      SingleObjectiveTestFunctionSolution solution = BestSolutionParameter.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 = (RealVector)realVectors[i].Clone();
        if (solution != null)
          solution.BestKnownRealVector = BestKnownSolutionParameter.ActualValue;
      }

      if (solution == null) {
        ResultCollection results = ResultsParameter.ActualValue;
        solution = new SingleObjectiveTestFunctionSolution((RealVector)realVectors[i].Clone(),
                                                           (DoubleValue)qualities[i].Clone(),
                                                           EvaluatorParameter.ActualValue);
        solution.Population = realVectors[i].Length == 2
          ? new ItemArray<RealVector>(realVectors.Select(x => x.Clone()).Cast<RealVector>())
          : null;
        solution.BestKnownRealVector = BestKnownSolutionParameter.ActualValue;
        solution.Bounds = BoundsParameter.ActualValue;
        BestSolutionParameter.ActualValue = solution;
        results.Add(new Result("Best Solution", solution));
      } else {
        if (max && qualities[i].Value > solution.BestQuality.Value
          || !max && qualities[i].Value < solution.BestQuality.Value) {
          solution.BestRealVector = (RealVector)realVectors[i].Clone();
          solution.BestQuality = (DoubleValue)qualities[i].Clone();
        }
        solution.Population = realVectors[i].Length == 2
          ? new ItemArray<RealVector>(realVectors.Select(x => x.Clone()).Cast<RealVector>())
          : null;
      }

      return base.Apply();
    }
 protected SingleObjectiveTestFunctionSolution(SingleObjectiveTestFunctionSolution original, Cloner cloner)
   : base(original, cloner) {
   bestKnownRealVector = cloner.Clone(original.bestKnownRealVector);
   bestRealVector = cloner.Clone(original.bestRealVector);
   bestQuality = cloner.Clone(original.bestQuality);
   population = cloner.Clone(original.population);
   evaluator = cloner.Clone(original.evaluator);
   bounds = cloner.Clone(original.bounds);
   Initialize();
 }