private static double CalculateAngleToDepot(IVRPProblemInstance instance, int city) { double dx = instance.GetCoordinates(0)[0]; double dy = instance.GetCoordinates(0)[1]; double cx = instance.GetCoordinates(city)[0]; double cy = instance.GetCoordinates(city)[1]; double alpha = Math.Atan((cx - dx) / (dy - cy)) * (180.0 / Math.PI); if (cx > dx && cy > dy) { alpha = (90.0 + alpha) + 90.0; } else if (cx < dx && cy > dy) { alpha = alpha + 180.0; } else if (cx < dx && cy < dy) { alpha = (90.0 + alpha) + 270.0; } return(alpha); }
private double CalculateCentroidDistance(Tour t1, Tour t2, IVRPProblemInstance instance) { double xSum = 0; double ySum = 0; double c1X, c1Y, c2X, c2Y; for (int i = 0; i < t1.Stops.Count; i++) { xSum += instance.GetCoordinates(t1.Stops[i])[0]; ySum += instance.GetCoordinates(t1.Stops[i])[1]; } c1X = xSum / t1.Stops.Count; c1Y = ySum / t1.Stops.Count; for (int i = 0; i < t2.Stops.Count; i++) { xSum += instance.GetCoordinates(t2.Stops[i])[0]; ySum += instance.GetCoordinates(t2.Stops[i])[1]; } c2X = xSum / t1.Stops.Count; c2Y = ySum / t1.Stops.Count; return(Math.Sqrt( (c1X - c2X) * (c1X - c2X) + (c1Y - c2Y) * (c1Y - c2Y))); }
private static double CalculateAngleToDepot(IVRPProblemInstance instance, int city) { double dx = instance.GetCoordinates(0)[0]; double dy = instance.GetCoordinates(0)[1]; double cx = instance.GetCoordinates(city)[0]; double cy = instance.GetCoordinates(city)[1]; double alpha = Math.Atan((cx - dx) / (dy - cy)) * (180.0 / Math.PI); if (cx > dx && cy > dy) alpha = (90.0 + alpha) + 90.0; else if (cx < dx && cy > dy) alpha = alpha + 180.0; else if (cx < dx && cy < dy) alpha = (90.0 + alpha) + 270.0; return alpha; }
private double CalculateCentroidDistance(Tour t1, Tour t2, IVRPProblemInstance instance) { double xSum = 0; double ySum = 0; double c1X, c1Y, c2X, c2Y; for (int i = 0; i < t1.Stops.Count; i++) { xSum += instance.GetCoordinates(t1.Stops[i])[0]; ySum += instance.GetCoordinates(t1.Stops[i])[1]; } c1X = xSum / t1.Stops.Count; c1Y = ySum / t1.Stops.Count; for (int i = 0; i < t2.Stops.Count; i++) { xSum += instance.GetCoordinates(t2.Stops[i])[0]; ySum += instance.GetCoordinates(t2.Stops[i])[1]; } c2X = xSum / t1.Stops.Count; c2Y = ySum / t1.Stops.Count; return Math.Sqrt( (c1X - c2X) * (c1X - c2X) + (c1Y - c2Y) * (c1Y - c2Y)); }