[R] A combinatorial optimization problem: finding the best permutation of a complex vector
Ravi Varadhan
rvaradhan at jhmi.edu
Thu Nov 12 16:09:23 CET 2009
Hi,
I have a complex-valued vector X in C^n. Given another complex-valued vector Y in C^n, I want to find a permutation of Y, say, Y*, that minimizes ||X - Y*||, the distance between X and Y*.
Note that this problem can be trivially solved for "Real" vectors, since real numbers possess the ordering property. Complex numbers, however, do not possess this property. Hence the challenge.
The obvious solution is to enumerate all the permutations of Y and pick out the one that yields the smallest distance. This, however, is only feasible for small n. I would like to be able to solve this for n as large as 100 - 1000, in which cases the permutation approach is infeasible.
I am looking for algorithms, possibly iterative, that can provide a "good" approximate solutions that are not necessarily optimal for high-dimensional vectors. I can do random sampling, but this can be very inefficient in high-dimensional problems. I am looking for efficient algorithms because this step has to be performed in each iteration of an "outer" algorithm.
Are there any clever adaptive algorithms out there?
Here is an example illustrating the problem:
require(e1071)
n <- 8
x <- runif(n) + 1i * runif(n)
y <- runif(n) + 1i * runif(n)
dist <- function(x, y) sqrt(sum(Mod(x - y)^2))
perms <- permutations(n)
dim(perms) # [1] 40320 8
tmp <- apply(perms, 1, function(ord) dist(x, y[ord]))
z <- y[perms[which.min(tmp), ]] # exact solution
dist(x, z)
# an aproximate random-sampling approach
nsamp <- 10000
perms <- t(replicate(nsamp, sample(1:n, size=n, replace=FALSE)))
tmp <- apply(perms, 1, function(ord) dist(x, y[ord]))
z.app <- y[perms[which.min(tmp), ]] # approximate solution
dist(x, z.app)
Thanks for any help.
Best,
Ravi.
____________________________________________________________________
Ravi Varadhan, Ph.D.
Assistant Professor,
Division of Geriatric Medicine and Gerontology
School of Medicine
Johns Hopkins University
Ph. (410) 502-2619
email: rvaradhan at jhmi.edu
More information about the R-help
mailing list