コード例 #1
0
        public virtual void Analyze(TSol[] individuals, double[] qualities, ResultCollection results, IRandom random)
        {
            var bestSolutionResultName  = "Best Packing Solution";
            var numContainersResultName = "Nr of Containers";
            var binUtilResultName       = "Overall Bin Utilization";

            if (!results.ContainsKey(bestSolutionResultName))
            {
                results.Add(new Result(bestSolutionResultName, typeof(Solution)));
            }
            if (!results.ContainsKey(numContainersResultName))
            {
                results.Add(new Result(numContainersResultName, typeof(IntValue)));
            }
            if (!results.ContainsKey(binUtilResultName))
            {
                results.Add(new Result(binUtilResultName, typeof(DoubleValue)));
            }


            // find index of item with max quality
            int bestIdx = 0;

            for (int j = 1; j < qualities.Length; j++)
            {
                if (qualities[j] > qualities[bestIdx])
                {
                    bestIdx = j;
                }
            }


            // update best solution so far
            var bestSolution = results[bestSolutionResultName].Value as Solution;

            if (bestSolution == null ||
                bestSolution.Quality.Value < qualities[bestIdx])
            {
                var newBestSolution = Decoder.Decode(individuals[bestIdx], BinShape, Items);
                newBestSolution.Quality = new DoubleValue(qualities[bestIdx]);
                results[bestSolutionResultName].Value  = newBestSolution;
                results[numContainersResultName].Value = new IntValue(newBestSolution.NrOfBins);
                results[binUtilResultName].Value       = new DoubleValue(BinUtilizationEvaluator.CalculateBinUtilization(newBestSolution));

                // update best known solution
                var bestKnownQuality = BestKnownQualityParameter.Value;
                if (bestKnownQuality == null ||
                    bestKnownQuality.Value < qualities[bestIdx])
                {
                    BestKnownQualityParameter.ActualValue  = new DoubleValue(qualities[bestIdx]);
                    BestKnownSolutionParameter.ActualValue = newBestSolution;
                }
            }
        }
コード例 #2
0
 protected BinUtilizationEvaluator(BinUtilizationEvaluator original, Cloner cloner)
     : base(original, cloner)
 {
 }
コード例 #3
0
 protected BinUtilizationEvaluator(BinUtilizationEvaluator original, Cloner cloner)
   : base(original, cloner) {
 }