Exemple #1
0
        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));
    }