qap function

Solve Quadratic Assignment Problems (QAP)

Solve Quadratic Assignment Problems (QAP)

This function implements Quadratic Assignment Problems (QAP) heuristics. Currently there is only a simulated annealing heuristic available, but more will be added in the future.

qap(A, B, method = NULL, ...) qap.obj(A, B, o)

Arguments

  • A: a symmetric matrix with positive weights/flows between pairs facilities.
  • B: a symmetric matrix with positive distances between pairs of locations.
  • method: a character string indicating the used solver. Defaults to "SA", the currently only available method.
  • ...: further arguments are passed on to the solver (see details).
  • o: a permutation vector for the assignment of facilities to locations.

Details

The objective of the QAP is to find the best facility to location assignment. The assignment is represented by a permutation matrix XX and the objective is

minXΠ  tr(AXBXT)minpiPItr(AXBXT) \mathrm{min}_{X \in \Pi}\; tr(AXBX^T)min_{pi \in PI} tr(AXBX^T)

qap.obj calculates the objective function for A and B

with the permutation o.

Although, the QAP was introduced as a combinatorial optimization problem for the facility location problem in operations research (see Koopmans and Beckmann;1957), it also has many applications in data analysis (see Hubert and Schultz; 1976).

The QAP is known to be NP-hard. This function implements the simple simulated annealing heuristic described by Burkard and Rendl (1984). The code is based on Rendl's FORTRAN implementation of the algorithm available at the QAPLIB website.

The solver has the additional arguments rep = 1L, miter = 2 * nrow(A), fiter = 1.1, ft = 0.5 and maxsteps = 50L

  • rep: integer; number of restarts.
  • miter: integer; number of iterations at fixed temperature.
  • fiter: multiplication factor for miter after miter random transposition trials.
  • ft: multiplication factor for t after miter random transposition trials (between 0 and 1).
  • maxsteps: integer; maximal number of allowed cooling steps.

Returns

Returns an integer vector with facility to location assignments. The objective function value is provided as attribute "obj".

References

R.E. Burkard and F. Rendl (1984). A thermodynamically motivated simulation procedure for combinatorial optimization problems. European Journal of Operations Research, 17(2):169-174. tools:::Rd_expr_doi("10.1016/0377-2217(84)90231-5")

Koopmans TC, Beckmann M (1957). Assignment problems and the location of economic activities. Econometrica 25(1):53-76. tools:::Rd_expr_doi("10.2307/1907742")

Hubert, L., and Schultz, J. (1976). Quadratic assignment as a general data analysis strategy. British Journal of Mathematical and Statistical Psychology, 29(2), 190-241. tools:::Rd_expr_doi("10.1111/j.2044-8317.1976.tb00714.x")

Author(s)

Michael Hahsler

See Also

read_qaplib

Examples

## load the had12 QAPLIB problem p <- read_qaplib(system.file("qaplib", "had12.dat", package="qap")) p ## run 1 repetitions verbose a <- qap(p$A, p$B, verbose = TRUE) a ## compare with known optimum (gap, % above optimum) (attr(a, "obj") - p$opt)/p$opt * 100 ## run more repetitions quietly a <- qap(p$A, p$B, rep = 100) a ## compare with known optimum (gap, % above optimum) (attr(a, "obj") - p$opt)/p$opt * 100
  • Maintainer: Michael Hahsler
  • License: GPL-3
  • Last published: 2022-06-27