Esempio n. 1
0
        public ParetoSolver(SolutionSet solutions)
        {
            _solutions = solutions;
            var size       = _solutions.GetObjectives().GetUpperBound(0) + 1;
            var ocount     = _solutions.GetObjectives()[0].Length;
            var objectives = _solutions.GetObjectives();

            var f1 = new double[size];
            var f2 = new double[size];
            var f3 = new double[] { };

            if (ocount == 3)
            {
                f3 = new double[size];
            }

            for (var i = 0; i < size; i++)
            {
                f1[i] = objectives[i][0];
                if (ocount > 1)
                {
                    f2[i] = objectives[i][1];
                }
                if (ocount > 2)
                {
                    f3[i] = objectives[i][2];
                }
            }

            var f1min = f1.Min();
            var f1max = f1.Max();
            var f2min = f2.Min();
            var f2max = f2.Max();

            double f3min = 0;
            double f3max = 0;

            if (ocount == 3)
            {
                f3min = f3.Min();
                f3max = f3.Max();
            }

            _f1Scaled = new double[size];
            _f2Scaled = new double[size];
            _f3Scaled = new double[size];
            for (var i = 0; i < size; i++)
            {
                _f1Scaled[i] = FMScaling.ScaleFromTo(f1min, f1max, 0, 1, f1[i]);
                if (ocount > 1)
                {
                    _f2Scaled[i] = FMScaling.ScaleFromTo(f2min, f2max, 0, 1, f2[i]);
                }
                if (ocount == 3)
                {
                    _f3Scaled[i] = FMScaling.ScaleFromTo(f3min, f3max, 0, 1, f3[i]);
                }
            }
        }