public bool IsDominatesOver(sParetoDataSet other, bool useNormalized = false)
        {
            bool dom = false;

            double xVal = this.dataX.getValueForCompare(useNormalized);
            double yVal = this.dataY.getValueForCompare(useNormalized);
            double zVal = this.dataZ.getValueForCompare(useNormalized);

            double xValOther = other.dataX.getValueForCompare(useNormalized);
            double yValOther = other.dataY.getValueForCompare(useNormalized);
            double zValOther = other.dataZ.getValueForCompare(useNormalized);

            if (this.dataZ.name != null && this.dataZ.name.Length > 0)
            {
                if (xVal >= xValOther && yVal >= yValOther && zVal >= zValOther)
                {
                    dom = true;
                }
            }
            else
            {
                if (xVal >= xValOther && yVal >= yValOther)
                {
                    dom = true;
                }
            }
            return(dom);
        }
        public double DistanceTo(sParetoDataSet other, bool useNormalized = false)
        {
            double deltaX = other.dataX.value - this.dataX.value;
            double deltaY = other.dataY.value - this.dataY.value;
            double deltaZ = other.dataZ.value - this.dataZ.value;

            if (useNormalized)
            {
                deltaX = other.dataX.value_Normalized - this.dataX.value_Normalized;
                deltaY = other.dataY.value_Normalized - this.dataY.value_Normalized;
                deltaZ = other.dataZ.value_Normalized - this.dataZ.value_Normalized;
            }

            return(Math.Sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ));
        }
        public sParetoDataSet getClosestDataSet(List <sParetoDataSet> data, bool useNormalized = false)
        {
            sParetoDataSet clData = data[0];
            double         minDis = double.MaxValue;

            foreach (sParetoDataSet d in data)
            {
                double dis = this.DistanceTo(d);
                if (dis < minDis)
                {
                    minDis = dis;
                    clData = d;
                }
            }
            this.dataDistance = minDis;
            return(clData);
        }
Example #4
0
        public void CalculateParetoFrontiers(double factor)
        {
            List <sParetoDataSet> temp      = this.data.ToList();
            List <int>            paretoIDs = new List <int>();
            int candidateRowNr = 0;

            while (true)
            {
                sParetoDataSet candidateRow = this.data[candidateRowNr];
                this.data.RemoveAt(candidateRowNr);

                int  rowNr        = 0;
                bool nonDominated = true;

                while (this.data.Count != 0 && rowNr < this.data.Count)
                {
                    sParetoDataSet row = this.data[rowNr];

                    if (candidateRow.IsDominatesOver(row, false))
                    {
                        this.data.RemoveAt(rowNr);
                    }
                    else if (row.IsDominatesOver(candidateRow, false))
                    {
                        nonDominated = false;
                        rowNr       += 1;
                    }
                    else
                    {
                        rowNr += 1;
                    }
                }

                if (nonDominated)
                {
                    paretoIDs.Add(candidateRow.ID);
                }

                if (this.data.Count == 0)
                {
                    break;
                }
            }

            foreach (sParetoDataSet ps in temp)
            {
                foreach (int idd in paretoIDs)
                {
                    if (ps.ID == idd)
                    {
                        ps.IsParetoFront = true;
                        break;
                    }
                }
            }

            this.data.Clear();
            this.data = temp.ToList();

            this.NormalizeData(factor);
        }