Performance mode

Illustration on a dark street grid: a lime stopwatch with a lightning bolt and speed lines, followed by a short route to a pin

This feature guide covers performance mode, a property switch in JOpt.TourOptimizer that shortens the runtime of an optimization run by halving the population size and switching off several optimization operators. It is for developers who need fast results on large problems with few constraints. It assumes a working optimization run as in First optimization.

Table of contents

What it does

Performance mode is a faster optimization strategy. It reduces the number of concurrent solutions that genetic evolution evaluates, and it deactivates certain operators throughout the optimization run.

Performance mode suits optimization problems that are not heavily constrained and leave flexibility in scheduling.

Reduced population size

The optimizer cuts the population size in half, so it processes fewer solution candidates at the same time. This allows faster computations, but it may lead to less variation in the solutions and to slower convergence.

Deactivated optimization operators

Performance mode disables these operators:

  • Single2OptOperator
  • RecombineOptimizationElementsOperator2
  • RecombineOptimizationElementsOperator3
  • InversionOperator
  • ReciprocalExchangeOperator
  • RouteSeedOperator
  • DoubleRouteRandomizeOperator
  • DisplacementOperator

These operators normally introduce variation into the optimization and help to explore different solutions. Disabling them increases the speed, but it may limit the optimizer's ability to find highly complex solutions.

Faster processing

With a smaller population size and fewer optimization operations, the optimizer requires less computation. This results in up to 50% faster processing.

Example evaluation

To assess the impact of performance mode, we ran a series of optimizations under controlled conditions. The problem setup:

  • 2000 nodes and 40 resources;
  • skill matching for 1000 of the 2000 nodes;
  • 13 of the 40 resources provide the required skill.

The example PerformanceModeBigOptiExample.java builds this setup; its switch addSkillConstraints turns the skill matching on. All runs were executed on an Intel i7-1185G7 processor.

The variable of the tests was the number of iterations in the genetic phase. All other settings, including the problem size and the constraints, stayed the same. The runs measured the total optimization time (including warm-up, construction and simulated annealing) for each combination of performance mode and skill matching.

Execution time by configuration

The first graph shows the execution time with performance mode active and inactive, each with skill matching active and inactive. Solid lines are runs without skill matching, dashed lines runs with skill matching. Performance mode reduces the execution time significantly in both cases.

Line chart of the execution time in seconds over 100,000 to 300,000 iterations for four configurations; the two configurations with performance mode active take the least time

Speed-up by configuration

The second graph shows the speed-up of performance mode, made by dividing the curves of the first graph pairwise. The blue dashed line shows the runs with skill matching, the red solid line the runs without skill matching. The y-axis runs from 1.4 to 1.8.

Line chart of the speed-up factor of performance mode over 100,000 to 300,000 iterations, rising from about 1.45 to about 1.70 with skill matching and to about 1.65 without

Despite achieving up to 1.7x faster execution, Performance Mode retained approximately 95% of the solution quality when compared to the standard mode, demonstrating its efficiency for large-scale problems with relaxed constraints.

When to use it

Performance mode is not ideal for every optimization. It suits:

  • low-restriction problems: few constraints such as time windows, skill requirements or zone codes;
  • long opening hours: resources with flexible schedules, which reduce the need for fine-grained optimization;
  • large-scale optimizations: many nodes, where a slightly suboptimal solution is acceptable;
  • cases where speed matters more than absolute precision.

When not to use it

  • Highly constrained problems: if the solution requires strict time windows, skill matching or geographic territories, performance mode might not give the best results.
  • Absolute optimality: if the best possible solution matters more than speed, do not use performance mode.

How to use it

Set the property JOpt.PerformanceMode to true:

props.setProperty("JOpt.PerformanceMode", "true");

Switching performance mode with a boolean

The example PerformanceModeExample.java sets the property from a boolean, together with the other properties of the run. The code below is its method addProperties in a shortened form:

private static void addProperties(IOptimization opti, boolean usePerformanceMode) {

    Properties props = new Properties();

    props.setProperty("JOptExitCondition.JOptGenerationCount", "100000"); // High iteration count
    props.setProperty("JOpt.Algorithm.PreOptimization.SA.NumIterations", "100000000"); // High number of iterations
    props.setProperty("JOpt.Algorithm.PreOptimization.SA.NumRepetitions", "1");
    props.setProperty("JOpt.NumCPUCores", "4");
    
    // Enable Performance Mode
    props.setProperty("JOpt.PerformanceMode", ""+usePerformanceMode);

    opti.addElement(props);
}

With true the run uses performance mode, with false the standard optimization process.

Properties

  • JOpt.PerformanceMode: switches performance mode on (true) or off (false). Its default is on the Optimization properties page.

Limits

Performance mode reduces the variation in the solution space. In highly constrained scenarios this can lead to slower convergence and to less optimal results.

AspectStandard modePerformance mode
Processing speedNormalUp to 50% faster
Optimization accuracyHighReduced
Handling complex constraintsGoodLimited
Geographical optimizationPreciseLess optimized

Authors

DNA Evolutions GmbH


Added: 2026-01-03 (JOpt core 7.5.2-j17) | Last updated: 2026-10-19