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); }
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); }