Accelerating the pace of engineering and science

# Documentation Center

• Trial Software

## Binary Integer Programming Algorithms

### Binary Integer Programming Definition

Binary integer programming is the problem of finding a binary vector x that minimizes a linear function fTx subject to linear constraints:

such that A·x ≤ b, Aeq·x = beq, x binary.

### bintprog Algorithm

bintprog uses a linear programming (LP)-based branch-and-bound algorithm to solve binary integer programming problems. The algorithm searches for an optimal solution to the binary integer programming problem by solving a series of LP-relaxation problems, in which the binary integer requirement on the variables is replaced by the weaker constraint 0 ≤ x ≤ 1. The algorithm

• Searches for a binary integer feasible solution

• Updates the best binary integer feasible point found so far as the search tree grows

• Verifies that no better integer feasible solution is possible by solving a series of linear programming problems

The following sections describe the branch-and-bound method in greater detail.

#### Branching

The algorithm creates a search tree by repeatedly adding constraints to the problem, that is, "branching." At a branching step, the algorithm chooses a variable xj whose current value is not an integer and adds the constraint xj = 0 to form one branch and the constraint xj = 1 to form the other branch. This process can be represented by a binary tree, in which the nodes represent the added constraints. The following picture illustrates a complete binary tree for a problem that has three variables, x1, x2, and x3. Note that, in general, the order of the variables going down the levels in the tree is not the usual order of their subscripts

#### Deciding Whether to Branch

At each node, the algorithm solves an LP-relaxation problem using the constraints at that node and decides whether to branch or to move to another node depending on the outcome. There are three possibilities:

• If the LP-relaxation problem at the current node is infeasible or its optimal value is greater than that of the best integer point, the algorithm removes the node from the tree, after which it does not search any branches below that node. The algorithm then moves to a new node according to the method you specify in NodeSearchStrategy option.

• If the algorithm finds a new feasible integer point with lower objective value than that of the best integer point, it updates the current best integer point and moves to the next node.

• If the LP-relaxation problem is optimal but not integer and the optimal objective value of the LP relaxation problem is less than the best integer point, the algorithm branches according to the method you specify in the BranchStrategy option.

See Options for a description of the NodeSearchStrategy and BranchStrategy options.

#### Bounds

The solution to the LP-relaxation problem provides a lower bound for the binary integer programming problem. If the solution to the LP-relaxation problem is already a binary integer vector, it provides an upper bound for the binary integer programming problem.

As the search tree grows more nodes, the algorithm updates the lower and upper bounds on the objective function, using the bounds obtained in the bounding step. The bound on the objective value serves as the threshold to cut off unnecessary branches.

#### Limits for the Algorithm

The algorithm for bintprog could potentially search all 2n binary integer vectors, where n is the number of variables. As a complete search might take a very long time, you can limit the search using the following options

• MaxNodes — Maximum number of nodes the algorithm searches

• MaxRLPIter — Maximum number of iterations the LP-solver performs at any node

• MaxTime — Maximum amount of time in seconds the algorithm runs
{"found_math": false, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 0, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "url": "http://www.mathworks.com/help/optim/ug/binary-integer-programming-algorithms.html?nocookie=true", "fetch_time": 1386579648000000000, "content_mime_type": "text/html", "warc_filename": "crawl-data/CC-MAIN-2013-48/segments/1386163949658/warc/CC-MAIN-20131204133229-00022-ip-10-33-133-15.ec2.internal.warc.gz", "warc_record_offset": 426922603, "warc_record_length": 8520, "token_count": 773, "char_count": 3853, "score": 3.96875, "int_score": 4, "crawl": "CC-MAIN-2013-48", "snapshot_type": "latest", "language": "en", "language_score": 0.8809054493904114, "file_path": "/sailhome/yjruan/project/latent-lm/data/processed/finemath-4plus/finemath-4plus/train-00038-of-00064.parquet"}