Module org.cicirello.jpt
Class CyclicReversalIndependentDistance
java.lang.Object
org.cicirello.permutations.distance.CyclicReversalIndependentDistance
- All Implemented Interfaces:
PermutationDistanceMeasurer
,PermutationDistanceMeasurerDouble
public final class CyclicReversalIndependentDistance
extends Object
implements PermutationDistanceMeasurer
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
ConstructorDescriptionConstructs 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
Modifier and TypeMethodDescriptionint
distance
(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
Methods inherited from interface org.cicirello.permutations.distance.PermutationDistanceMeasurer
distancef
-
Constructor Details
-
CyclicReversalIndependentDistance
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 Details
-
distance
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:
distance
in interfacePermutationDistanceMeasurer
- Parameters:
p1
- first permutationp2
- second permutation- Returns:
- distance between p1 and p2
- Throws:
IllegalArgumentException
- if p1.length() is not equal to p2.length().
-