procrustes.kopt
K-opt (Greedy) Heuristic Module.
- procrustes.kopt.kopt_heuristic_single(fun: Callable, p0: ndarray, k: int = 3, tol: float = 1e-08) Tuple[ndarray, float] [source]
Find a locally-optimal permutation matrix using the k-opt (greedy) heuristic.
\[\underbrace{\text{min}}_{\left\{\mathbf{P} \left| {[\mathbf{P}]_{ij} \in \{0, 1\} \atop \sum_{i=1}^n [\mathbf{P}]_{ij} = \sum_{j=1}^n [\mathbf{P}]_{ij} = 1} \right. \right\}} f(\mathbf{P})\]All possible 2-, ..., k-fold column-permutations of the initial permutation matrix are tried to identify one which gives a lower value of objective function \(f\). Starting from this updated permutation matrix, the process is repeated until no further k-fold column-reordering of a given permutation matrix lower the objective function.
- Parameters:
fun (callable) -- The objective function \(f\) to be minimized.
p0 (ndarray) -- The 2D-array permutation matrix representing the initial guess for \(\mathbf{P}\).
k (int, optional) -- The order of the permutation. For example, k=3 swaps all possible 3-permutations.
tol (float, optional) -- When value of the objective function is less than given tolerance, the algorithm stops.
- Returns:
p_opt (ndarray) -- The locally-optimal permutation matrix \(\mathbf{P}\) (i.e., solution).
f_opt (float) -- The locally-optimal value of objective function given by \(\text{fun(p_opt)}\).
- procrustes.kopt.kopt_heuristic_double(fun: Callable, p1: ndarray, p2: ndarray, k: int = 3, tol: float = 1e-08) Tuple[ndarray, ndarray, float] [source]
Find locally-optimal permutation matrices using the k-opt (greedy) heuristic.
\[\underbrace{\text{arg min}}_{ \left\{ {\mathbf{P}_1, \mathbf{P}_2} \left| {{[\mathbf{P}_1]_{ij} \in \{0, 1\} \atop [\mathbf{P}_2]_{ij} \in \{0, 1\}} \atop {\sum_{i=1}^m [\mathbf{P}_1]_{ij} = \sum_{j=1}^m [\mathbf{P}_1]_{ij} = 1 \atop \sum_{i=1}^n [\mathbf{P}_2]_{ij} = \sum_{j=1}^n [\mathbf{P}_2]_{ij} = 1}} \right. \right\}} f(\mathbf{P}_1, \mathbf{P}_2)\]All possible 2-, ..., k-fold permutations of the initial permutation matrices are tried to identify ones which give a lower value of objective function \(f\). This corresponds to row-swaps for \(\mathbf{ P}_1\) and column-swaps for \(\mathbf{ P}_2\). Starting from these updated permutation matrices, the process is repeated until no further k-fold reordering of either permutation matrix lower the objective function.
- Parameters:
fun (callable) -- The objective function \(f\) to be minimized.
p1 (ndarray) -- The 2D-array permutation matrix representing the initial guess for \(\mathbf{P}_1\).
p2 (ndarray) -- The 2D-array permutation matrix representing the initial guess for \(\mathbf{P}_2\).
k (int, optional) -- The order of the permutation. For example,
k=3
swaps all possible 3-permutations.tol (float, optional) -- When value of the objective function is less than given tolerance, the algorithm stops.
- Returns:
p1_opt (ndarray) -- The locally-optimal permutation matrix \(\mathbf{P}_1\).
p2_opt (ndarray) -- The locally-optimal permutation matrix \(\mathbf{P}_2\).
f_opt (float) -- The locally-optimal value of objective function given by \(\text{fun(p1_opt, p2_opt)}\).