## Class CyclicReversalIndependentDistanceDouble

• java.lang.Object
• org.cicirello.permutations.distance.CyclicReversalIndependentDistanceDouble
• All Implemented Interfaces:
`PermutationDistanceMeasurerDouble`

```public final class CyclicReversalIndependentDistanceDouble
extends Object
implements PermutationDistanceMeasurerDouble```

This class implements the combination of cyclic independence and reversal independence. This is relevant if any rotation of the permutation or its reverse has the same problem dependent interpretation. For example, if the permutation represents a solution to a traveling salesperson problem (i.e. a tour of a set of cities), then the cost of that tour is the same if you rotate it, reverse it, or reverse it and rotate it.

In this case, this class computes the minimum of the distance from permutation p1 to rotations of p2 and rotations of the reverse of p2, where the underlying distance measure is passed as a parameter to the constructor.

• ### Constructor Summary

Constructors
Constructor Description
`CyclicReversalIndependentDistanceDouble​(PermutationDistanceMeasurerDouble d)`
Constructs a distance measure for measuring distance with cyclic and reversal independence, such that distance = min_{i in [0,N)} { distance(p1,rotate(p2,i)), distance(p1,rotate(reverse(p2),i)) }
• ### Method Summary

All Methods
Modifier and Type Method Description
`double` ```distancef​(Permutation p1, Permutation p2)```
Measures the distance between two permutations, with cyclic and reversal independence: distance = min_{i in [0,N)} { distance(p1,rotate(p2,i)), distance(p1,rotate(reverse(p2),i)) }
• ### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
• ### Constructor Detail

• #### CyclicReversalIndependentDistanceDouble

`public CyclicReversalIndependentDistanceDouble​(PermutationDistanceMeasurerDouble d)`
Constructs a distance measure for measuring distance with cyclic and reversal independence, such that distance = min_{i in [0,N)} { distance(p1,rotate(p2,i)), distance(p1,rotate(reverse(p2),i)) }
Parameters:
`d` - A distance measure.
• ### Method Detail

• #### distancef

```public double distancef​(Permutation p1,
Permutation p2)```
Measures the distance between two permutations, with cyclic and reversal independence: distance = min_{i in [0,N)} { distance(p1,rotate(p2,i)), distance(p1,rotate(reverse(p2),i)) }
Specified by:
`distancef` in interface `PermutationDistanceMeasurerDouble`
Parameters:
`p1` - first permutation
`p2` - second permutation
Returns:
distance between p1 and p2
Throws:
`IllegalArgumentException` - if p1.length() is not equal to p2.length().