Quadratic knapsack problem

From Wikipedia, the free encyclopedia

The quadratic knapsack problem (QKP), first introduced in 19th century,[1] is an extension of knapsack problem that allows for quadratic terms in the objective function: Given a set of items, each with a weight, a value, and an extra profit that can be earned if two items are selected, determine the number of items to include in a collection without exceeding capacity of the knapsack, so as to maximize the overall profit. Usually, quadratic knapsack problems come with a restriction on the number of copies of each kind of item: either 0, or 1. This special type of QKP forms the 0-1 quadratic knapsack problem, which was first discussed by Gallo et al.[2] The 0-1 quadratic knapsack problem is a variation of knapsack problems, combining the features of unbounded knapsack problem, 0-1 knapsack problem and quadratic knapsack problem.

Definition[]

Specifically, the 0–1 quadratic knapsack problem has the following form:

While the binary variable xi represents whether item i is included in the knapsack, is the profit earned by selecting item i and is the profit achieved if both item i and j are added.

Informally, the problem is to maximize the sum of the values of the items in the knapsack so that the sum of the weights is less than or equal to the knapsack's capacity.

Application[]

As one might expect, QKP has a wide range of applications including telecommunication, transportation network, computer science and economics. In fact, Witzgall first discussed QKP when selecting sites for satellite stations in order to maximize the global traffic with respect to a budget constraint. Similar model applies to problems like considering the location of airports, railway stations, or freight handling terminals.[3] Applications of QKP in the field of computer science is more common after the early days: compiler design problem,[4] clique problem,[5][6] very large scale integration (VLSI) design.[7] Additionally, pricing problems appear to be an application of QKP as described by Johnson et al.[8]

Computational complexity[]

In general, the decision version of the knapsack problem (Can a value of at least V be achieved under a restriction of a certain capacity W?) is NP-complete.[9] Thus, a given solution can be verified to in polynomial time while no algorithm can identify a solution efficiently.

The optimization knapsack problem is NP-hard and there is no known algorithm that can solve the problem in polynomial time.

As a particular variation of the knapsack problem, the 0-1 quadratic knapsack problem is also NP-hard.

While no available efficient algorithm exists in the literature, there is a pseudo-polynomial time based on dynamic programming and other heuristic algorithms that can always generate “good” solutions.

Solving[]

While the knapsack problem is one of the most commonly solved operation research (OR) problems, there are limited efficient algorithms that can solve 0-1 quadratic knapsack problems. Available algorithms include but are not limited to brute force, linearization,[10] and convex reformulation. Just like other NP-hard problems, it is usually enough to find a workable solution even if it is not necessarily optimal. Heuristic algorithms based on greedy algorithm, dynamic programming can give a relatively “good” solution to the 0-1 QKP efficiently.

Brute force[]

The brute-force algorithm to solve this problem is to identify all possible subsets of the items without exceeding the capacity and select the one with the optimal value. The pseudo-code is provided as follows:

// Input:
// Profits (stored in array p)
// Quadratic profits (stored in matrix P)
// Weights (stored in array w)
// Number of items (n)
// Knapsack capacity (W)

int max = 0
for all subset S do
    int value, weight = 0
    for i from 0 to S.size-1 do:
        value = value + p[i]
        weight = weight + w[i]
            for j from i+1 to S.size-1 do: 
                value = value + P[i][j]
    if weight <= W then:
        if value > max then:    
            max = value

Given n items, there will be at most subsets and for each legal candidate set, the running time of computing the values earned is . Thus, the efficiency class of brute-force algorithm is , being exponential.

Linearization[]

Problems of such form are difficult to solve directly using standard solvers and thus people try to reformulate it as a linear program using auxiliary variables and constraints so that the problem can be readily solved using commercial packages. Two well-known linearization approaches for the 0-1 QKP are the standard linearization and Glover’s linearization.[11][12][13]

Standard linearization[]

The first one is the standard linearization strategy, as shown below:

LP1: maximize
subject to
for all
for all
for all
for all
binary

In the formulation LP1, we have replaced the xixj term with a continuous variable zij. This reformulates the QKP into a knapsack problem, which we can then solve optimally using standard solvers.

Glover's linearization[]

The second reformulation, which is more concise, is called Glover’s linearization.[14][15][16] The Glover formulation is shown below, where Li and Ui are lower and upper bounds on , respectively:

LP2: maximize
subject to
for
for
binary

In the formulation LP2, we have replaced the expression with a continuous variable zi. Similarly, we can use standard solvers to solve the linearization problem. Note that Glover’s linearization only includes auxiliary variables with constraints while standard linearization requires auxiliary variables and constraints to achieve linearity.

Convex quadratic reformulation[]

Note that nonlinear programs are hard to solve due to the possibility of being stuck at a local maximum. However, when the program is convex, any local maximum is the global maximum. A convex program is to maximize a concave function or minimize a convex function on a convex set. A set S is convex if , where . That is to say, any point between two points in the set must also be an element of the set. A function f is concave if . A function f is convex if . Informally, a function is concave if the line segment connecting two points on the graph lies above or on the graph, while a function is convex if below or on the graph. Thus, by rewriting the objective function into an equivalent convex function, we can reformulate the program to be convex, which can be solved using optimization packages.

The objective function can be written as using linear algebra notation. We need to make P a positive semi-definite matrix in order to reformulate a convex function. In this case, we modify the objective function to be by applying results from linear algebra, where P is a diagonally dominant matrix and thus a positive semi-definite. This reformulation can be solved using a standard commercial mixed-integer quadratic package.[17]

Greedy heuristic algorithm[]

George Dantzig[18] proposed a greedy approximation algorithm to unbounded knapsack problem which can also be used to solve the 0-1 QKP. The algorithm consists of two phrases: identify an initial solution and improve it.

First compute for each item, the total objective contribution realizable by selecting it, , and sort the items in decreasing order of the potential value per unit of weight, . Then select the items with the maximal value-weight ratio into the knapsack until there is no space for more, which forms the initial solution. Starting with the initial solution, the improvement is conducted by pairwise exchange. For each item in the solution set, identify the items not in the set where swapping results in an improving objective. Select the pair with maximal improvement and swap. There are also possibilities that removing one from the set or adding one to the set will produce the greatest contribution. Repeat until there is no improving swapping. The complexity class of this algorithm is since for the worst case every possible combination of items will be identified.

Quadknap[]

Quadknap is an exact branch-and-bound algorithm proposed by Caprara et al.,[19] where upper bounds are computed by considering a Lagrangian relaxation which approximate a difficult problem by a simpler problem and penalizes violations of constraints using Lagrange multiplier to impost a cost on violations. Quadknap releases the integer requirement when computing the upper bounds. Suboptimal Lagrangian multipliers are derived from sub-gradient optimization and provide a convenient reformulation of the problem. This algorithm is quite efficient since Lagrangian multipliers are stable, and suitable data structures are adopted to compute a tight upper bound in linear expected time in the number of variables. This algorithm was reported to generate exact solutions of instances with up to 400 binary variables, i.e., significantly larger than those solvable by other approaches. The code was written in C and is available online.[20]

Dynamic programming heuristic[]

While dynamic programming can generate optimal solutions to knapsack problems, dynamic programming approaches for QKP[21] can only yield a relatively good quality solution, which can serve as a lower bound to the optimal objectives. While it runs in pseudo-polynomial time, it has a large memory requirement.

Dynamic programming algorithm[]

For simplicity, assume all weights are non-negative. The objective is to maximize total value subject to the constraint: that the total weight is less than or equal to W. Then for each , define to be the value of the most profitable packing of the first m items found with a total weight of w. That is, let

Then, is the solution to the problem. Note that by dynamic programming, the solution to a problem arises from the solution to its smaller sub-problems. In this particular case, start with the first item and try to find a better packing by considering adding items with an expected weight of