java.lang.Object
com.graphhopper.jsprit.core.algorithm.ruin.Ruin

public final class Ruin extends Object
Factory methods for creating common ruin operator configurations.

Provides pre-configured ruin operators for use with independent operator selection:

 Jsprit.Builder.newInstance(vrp)
     .addRuinOperator(0.3, Ruin.random(0.3))
     .addRuinOperator(0.3, Ruin.radial(0.3))
     .addRuinOperator(0.2, Ruin.cluster())
     .addRuinOperator(0.2, Ruin.kruskalCluster())
     .buildAlgorithm();
 

All factories return RuinOperatorFactory instances that will be instantiated during algorithm construction with proper dependencies.

See Also:
  • Method Details

    • random

      public static RuinOperatorFactory random(double fraction)
      Random ruin that removes a fraction of jobs randomly.
      Parameters:
      fraction - fraction of jobs to remove (0.0-1.0)
      Returns:
      factory for random ruin
    • random

      public static RuinOperatorFactory random(double minFraction, double maxFraction)
      Random ruin with variable removal fraction.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      Returns:
      factory for random ruin
    • random

      public static RuinOperatorFactory random(double minFraction, double maxFraction, int minBound, int maxBound)
      Random ruin with fraction-based scaling and absolute bounds.

      Calculates share as numJobs * fraction, then clamps between bounds.

      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      minBound - absolute minimum jobs to remove (floor)
      maxBound - absolute maximum jobs to remove (ceiling)
      Returns:
      factory for random ruin
    • radial

      public static RuinOperatorFactory radial(double fraction)
      Radial ruin that removes nearby jobs.

      Selects a random job and removes it along with its nearest neighbors.

      Parameters:
      fraction - fraction of jobs to remove (0.0-1.0)
      Returns:
      factory for radial ruin
    • radial

      public static RuinOperatorFactory radial(double minFraction, double maxFraction)
      Radial ruin with variable removal fraction.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      Returns:
      factory for radial ruin
    • radial

      public static RuinOperatorFactory radial(double minFraction, double maxFraction, int minBound, int maxBound)
      Radial ruin with fraction-based scaling and absolute bounds.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      minBound - absolute minimum jobs to remove (floor)
      maxBound - absolute maximum jobs to remove (ceiling)
      Returns:
      factory for radial ruin
    • cluster

      public static RuinOperatorFactory cluster()
      Cluster ruin using DBSCAN clustering (default).

      Clusters jobs spatially and removes entire clusters.

      Returns:
      factory for cluster ruin
    • cluster

      public static RuinOperatorFactory cluster(double minFraction, double maxFraction)
      Cluster ruin with variable removal fraction.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      Returns:
      factory for cluster ruin
    • cluster

      public static RuinOperatorFactory cluster(double minFraction, double maxFraction, int minBound, int maxBound)
      Cluster ruin with fraction-based scaling and absolute bounds.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      minBound - absolute minimum jobs to remove (floor)
      maxBound - absolute maximum jobs to remove (ceiling)
      Returns:
      factory for cluster ruin
    • kruskalCluster

      public static RuinOperatorFactory kruskalCluster()
      Kruskal MST-based cluster ruin (ranked #2 in Voigt 2025).

      Uses minimum spanning tree to identify clusters of related jobs within routes, then removes connected components.

      Returns:
      factory for Kruskal cluster ruin
    • kruskalCluster

      public static RuinOperatorFactory kruskalCluster(double minFraction, double maxFraction)
      Kruskal cluster ruin with variable removal fraction.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      Returns:
      factory for Kruskal cluster ruin
    • kruskalCluster

      public static RuinOperatorFactory kruskalCluster(double minFraction, double maxFraction, int minBound, int maxBound)
      Kruskal cluster ruin with fraction-based scaling and absolute bounds.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      minBound - absolute minimum jobs to remove (floor)
      maxBound - absolute maximum jobs to remove (ceiling)
      Returns:
      factory for Kruskal cluster ruin
    • worst

      public static RuinOperatorFactory worst(double fraction)
      Worst ruin that removes jobs with highest removal benefit.

      Removes jobs that, when removed, provide the largest cost savings. Good for escaping local optima.

      Parameters:
      fraction - fraction of jobs to remove (0.0-1.0)
      Returns:
      factory for worst ruin
    • worst

      public static RuinOperatorFactory worst(double minFraction, double maxFraction, double noiseLevel, double noiseProbability)
      Worst ruin with configurable parameters.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      noiseLevel - noise level for randomization (0.0-1.0)
      noiseProbability - probability of applying noise (0.0-1.0)
      Returns:
      factory for worst ruin
    • worst

      public static RuinOperatorFactory worst(double minFraction, double maxFraction, int minBound, int maxBound)
      Worst ruin with fraction-based scaling and absolute bounds.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      minBound - absolute minimum jobs to remove (floor)
      maxBound - absolute maximum jobs to remove (ceiling)
      Returns:
      factory for worst ruin
    • string

      public static RuinOperatorFactory string()
      String ruin that removes sequences of jobs from routes.

      Selects random routes and removes contiguous sequences of jobs.

      Returns:
      factory for string ruin with default parameters
    • string

      public static RuinOperatorFactory string(int kMin, int kMax, int lMin, int lMax)
      String ruin with configurable parameters.
      Parameters:
      kMin - minimum number of routes to affect
      kMax - maximum number of routes to affect
      lMin - minimum string length per route
      lMax - maximum string length per route
      Returns:
      factory for string ruin
    • timeRelated

      public static RuinOperatorFactory timeRelated(double fraction)
      Time-related ruin that removes jobs with similar time windows.
      Parameters:
      fraction - fraction of jobs to remove (0.0-1.0)
      Returns:
      factory for time-related ruin
    • timeRelated

      public static RuinOperatorFactory timeRelated(double minFraction, double maxFraction)
      Time-related ruin with variable removal fraction.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      Returns:
      factory for time-related ruin
    • timeRelated

      public static RuinOperatorFactory timeRelated(double minFraction, double maxFraction, int minBound, int maxBound)
      Time-related ruin with fraction-based scaling and absolute bounds.
      Parameters:
      minFraction - minimum fraction of jobs to remove
      maxFraction - maximum fraction of jobs to remove
      minBound - absolute minimum jobs to remove (floor)
      maxBound - absolute maximum jobs to remove (ceiling)
      Returns:
      factory for time-related ruin