Objectives, Decision Variables, Constraints, and Feasibility › Formula

Michael BrenndoerferOctober 29, 202620 min read
Machine Learning from ScratchAll chapters
Part 14 of 15Constrained Optimization
Chapter 84Objectives, Decision Variables, Constraints, and Feasibility › Formula
Reading section 4 of 10 · Formula · 20 minSection 4 of 10 · 20 min

Section 4 of 10 · 20 min read

Objectives, Decision Variables, Constraints, and Feasibility › FormulaSection view · Sections in this chapter4 / 10 ↓
Reading tools Definitions, links & notes

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Notes & comments

We will formulate the plant decision in four steps: collect the quantities we control, choose their domains, define the objective, and impose the constraints. Writing those components separately makes it possible to check the meaning of each formula against the production example.

The first layer is the set of quantities under our control. We do not describe them with a paragraph; we collect them into a single vector so that every later operation (scoring, checking constraints, reporting a plan) addresses them positionally.

x=(x1,x2,…,xn)∈Rn.x = (x_1, x_2, \dots, x_n) \in \mathbb{R}^n.

where:

  • xx: the full decision vector collecting all nn quantities we control
  • xjx_j: the jj-th component, a single decision variable
  • nn: the number of decision variables
  • Rn\mathbb{R}^n: the ambient space allowing each coordinate to be any real number

Each component xjx_j is a decision variable: a quantity we are free to set, as opposed to a quantity we observe or predict. In the packaging example n=2n = 2, x1x_1 is the number of pallets of product 1, and x2x_2 is the number of pallets of product 2. The choice to treat them as real numbers is already a modelling assumption; it says a fractional pallet makes sense, which we will revisit when integrality enters.

The vector alone permits values the application may rule out, such as negative production or fractional vehicle counts. We choose a domain X⊆RnX\subseteq\mathbb{R}^n. Here we use a product of individual variable domains and express coupling requirements as constraints. A domain can also be defined more generally. Nonnegative real variables model divisible quantities, integer variables model counts, and binary variables model yes/no choices.

The third layer is the objective function, a scalar-valued map f:X→Rf:X\to\mathbb{R} that scores a decision. This chapter uses scalar objectives; multiobjective methods require a stated comparison rule. For the general theory we use minimization. The production example is naturally written as profit maximization and is negated before calling a minimization solver. When the extrema are attained,

max⁡x∈Xf(x)  =  − min⁡x∈X(−f(x)),\max_{x \in X} f(x) \;=\; -\,\min_{x \in X}\big(-f(x)\big),

where:

  • XX: the domain, the set of individually admissible decisions
  • ff: the objective function being maximized or negated for minimization
  • xx: the decision vector over which the objective is optimized
  • −f(x)-f(x): the negated objective, so the minimum of the negation equals the negative of the maximum of ff

A maximization of profit therefore becomes a minimization of negative profit. The best decision vectors are the same, while the optimal objective value changes sign. This is why the implementation negates both the coefficients passed to the solver and the returned objective.

The fourth layer is constraints, the rules a decision must satisfy. We write inequality constraints as gi(x)≤0g_i(x) \leq 0 for i=1,…,mi = 1, \dots, m and equality constraints as hj(x)=0h_j(x) = 0 for j=1,…,pj = 1, \dots, p, where:

  • gig_i: the ii-th inequality constraint function, moved to the left-hand side so that gi(x)>0g_i(x) > 0 measures violation
  • hjh_j: the jj-th equality constraint function, moved to the left-hand side so that hj(x)=0h_j(x) = 0 at every feasible decision
  • mm: the number of inequality constraints
  • pp: the number of equality constraints

The convention that everything is moved to the left-hand side is deliberate: it makes the right-hand side a constant, and it makes the sign of gig_i meaningful, since gi(x)>0g_i(x) > 0 now literally measures violation. Without that convention, a positive value of gig_i could mean violation or slack depending on how the modeller wrote the original inequality, and every diagnostic downstream would inherit the ambiguity.

The feasible set collects every decision that breaks no rule:

F={ x∈X  :  gi(x)≤0 for all i,  hj(x)=0 for all j }.\mathcal{F} = \big\{\, x \in X \;:\; g_i(x) \leq 0 \ \text{for all } i, \ \ h_j(x) = 0 \ \text{for all } j \,\big\}.

where:

  • F\mathcal{F}: the feasible set, the collection of all decisions satisfying every constraint
  • xx: a candidate decision vector drawn from the domain XX
  • XX: the domain of individually admissible decisions
  • gi(x)g_i(x): the ii-th inequality constraint function, satisfying gi(x)≤0g_i(x) \leq 0
  • hj(x)h_j(x): the jj-th equality constraint function, satisfying hj(x)=0h_j(x) = 0

Read the braces as "the set of all xx in XX such that...". This set is the central object of the chapter. It is not a score, and it does not rank anything; it only says yes or no. When we later ask a solver to minimize, we are asking two questions at once: is F\mathcal{F} non-empty, and if so, which of its members minimizes ff?

A general mathematical program is

z⋆=inf⁡x∈Ff(x),z^\star = \inf_{x \in \mathcal{F}} f(x),

where:

  • xx: the decision vector chosen from the feasible set
  • F\mathcal{F}: the feasible set of admissible decisions defined above
  • ff: the objective function that scores a decision
  • z⋆z^\star: the optimal value, defined as the greatest lower bound of feasible objective values

Read this as the greatest lower bound of f(x)f(x) over feasible decisions. If some feasible x⋆x^\star attains that value, it is an optimal solution. If F=∅\mathcal{F}=\varnothing, the problem is infeasible and we conventionally set z⋆=+∞z^\star=+\infty. If feasible objective values decrease without bound, then z⋆=−∞z^\star=-\infty. A fourth possibility is a finite value that is not attained: minimizing 1/x1/x over x>0x>0 has infimum zero but no minimizer. Infeasibility can reflect incompatible requirements, and unboundedness can be a property of the model; neither automatically proves a modelling error.

For the packaging example, with profit coefficients c1=40c_1 = 40 and c2=30c_2 = 30, the problem is

max⁡x1, x240x1+30x2subject to2x1+x2≤8(machine-hours)x1+2x2≤8(labour-hours)x1≥0,x2≥0.\begin{aligned} \max_{x_1,\,x_2} \quad & 40x_1 + 30x_2 \\ \text{subject to} \quad & 2x_1 + x_2 \leq 8 && \text{(machine-hours)} \\ & x_1 + 2x_2 \leq 8 && \text{(labour-hours)} \\ & x_1 \geq 0, \quad x_2 \geq 0. \end{aligned}

where:

  • x1x_1: number of pallets of product 1 to build
  • x2x_2: number of pallets of product 2 to build
  • max⁡x1, x2\max_{x_1,\,x_2}: maximize the objective over the two decision variables
  • 2x1+x22x_1 + x_2: machine-hours consumed, with 2 hours per pallet of product 1 and 1 per pallet of product 2; must not exceed 8
  • x1+2x2x_1 + 2x_2: labour-hours consumed, with 1 hour per pallet of product 1 and 2 per pallet of product 2; must not exceed 8
  • 4040: profit per pallet of product 1
  • 3030: profit per pallet of product 2

Compressing this into matrix notation is mostly bookkeeping, but the bookkeeping is what lets us talk to software. Let

A=(2112),b=(88),c=(4030),x=(x1x2).A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix}, \qquad b = \begin{pmatrix} 8 \\ 8 \end{pmatrix}, \qquad c = \begin{pmatrix} 40 \\ 30 \end{pmatrix}, \qquad x = \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}.

where:

  • AA: the resource-consumption matrix, with AijA_{ij} the amount of resource ii that one unit of activity jj consumes
  • bb: the vector of available resource capacities
  • cc: the vector of profit coefficients per pallet
  • xx: the decision vector of activity levels

The product c⊤xc^\top x is a row vector times a column vector, which by definition equals 40x1+30x240x_1 + 30x_2: the transpose turns the column cc on its side so the shapes line up, and the single resulting number is the objective value. Likewise AxAx is a 2×12 \times 1 vector whose first entry is 2x1+x22x_1 + x_2 and whose second entry is x1+2x2x_1 + 2x_2, so the pair of inequalities is exactly Ax≤bAx \leq b, where the comparison is applied entry by entry. The compact form of our problem is

max⁡x  c⊤xsubject toAx≤b,x≥0.\max_{x} \; c^\top x \quad \text{subject to} \quad Ax \leq b, \quad x \geq 0 .

where:

  • AA: the resource-consumption matrix defined above
  • bb: the capacity vector, so each entry of AxAx must not exceed its paired entry in bb
  • cc: the profit-coefficient vector, so c⊤xc^\top x is total profit
  • xx: the non-negative decision vector

Each row of AA is one resource constraint and each column is one variable. In this model, AijA_{ij} records the amount of resource ii consumed by one unit of activity jj. A transposed or mislabelled entry changes that meaning. Check a small known decision by multiplying it by AA and independently calculating each resource total.

Decision variables, domains, and objective functions

Choosing the variables shapes how we write the objective, domains, and constraints. A good variable is something a decision maker can set, measured in a unit that appears in the objective and the constraints. Two habits make a formulation easier to check:

  • Keep units consistent within a column. If x1x_1 is pallets per day, the objective coefficient must be profit per pallet and the constraint coefficient must be hours per pallet, not hours per week.
  • Prefer marginal coefficients to average quantities when the model aggregates by addition. If the first 100 pallets cost 5 per unit to make and the next 100 cost 7, a single linear coefficient cannot express that; we need two variables with a capacity link, or a piecewise-linear construction.

A physically divisible quantity, such as litres of solvent, can use a continuous domain. A head count or indivisible pallet count uses an integer domain; an open-or-closed facility decision uses a binary domain {0,1}\{0,1\}. An aggregate quantity such as full-time-equivalent staffing may still be divisible, so choose the domain from the actual decision. Integrality creates combinatorial choices and can substantially change computational difficulty, even when the coefficients stay linear.

Suppose a planning team wants to balance profit, service level, emissions, and overtime. Common ways to specify priorities include a weighted scalar objective, optimizing one measure subject to targets on the others, and lexicographic optimization. The weighted objective is ∑kwkfk(x)\sum_k w_k f_k(x), where:

  • kk: indexes the objective components being combined
  • wkw_k: the weight assigned to objective component kk, a policy choice that must be stated openly
  • fk(x)f_k(x): the value of the kk-th objective component for decision xx

For a lexicographic solve, first obtain the primary optimum, then constrain that objective to its attained optimal value while optimizing the secondary measure. With numerical solvers the allowed primary tolerance must be stated. Weighted sums also require explicit policy weights and compatible scales. Changing weights can change the objective and selected decision, but different weights need not produce different optimal decisions.

Hard constraints, soft penalties, and feasibility

A hard constraint excludes violations from the mathematical feasible set. It is appropriate when violating the rule is unacceptable for the modeled decision. That mathematical exclusion does not guarantee a numerically returned or operationally executed plan is valid: the model, data, numerical tolerances, and final decision still need checking.

A soft constraint is a rule we would like to respect but are willing to trade off. The standard encoding is a penalty added to the objective. Using the positive-part function (u)+=max⁡(0,u)(u)_+ = \max(0, u), which equals uu when uu is positive and zero otherwise, the penalty formulation is (note λ\lambda here is the fixed penalty weight, distinct from the Lagrange multipliers λi\lambda_i discussed in the duality subsection):

min⁡x∈Xhj(x)=0∀j  f(x)+λ∑i=1m(gi(x))+ 2,\min_{\substack{x \in X\\[2pt] h_j(x)=0\;\forall j}}\; f(x) + \lambda \sum_{i=1}^{m} \big(g_i(x)\big)_+^{\,2},

where:

  • xx: the decision vector, chosen from the domain XX
  • XX: the domain of individually admissible decisions
  • f(x)f(x): the original objective value of decision xx
  • mm: the number of soft inequalities being penalized; unpenalized equalities remain hard constraints
  • gi(x)g_i(x): the ii-th constraint function, positive where the rule is violated
  • (gi(x))+(g_i(x))_+: the positive part max⁡(0,gi(x))\max(0, g_i(x)), the amount by which constraint ii is violated
  • λ>0\lambda > 0: a weight with units of objective per unit of squared violation

If every gi(x)≤0g_i(x)\leq0, the penalty vanishes and the original objective is unchanged. The squared positive part is continuously differentiable as a function of its scalar residual; composition is continuously differentiable when the constraint functions are. This does not generally enforce exact feasibility at a finite weight. In the later one-dimensional example, every finite quadratic weight leaves a violation, although other problems can already have feasible penalized minimizers. A linear positive-part penalty ρ∑i(gi(x))+\rho\sum_i(g_i(x))_+ can be exact under additional conditions. For example, with the hard equalities retained in the minimization domain, an attained primal optimum, and attained strong-dual multipliers λi⋆≥0\lambda_i^\star\geq0, a weight ρ>max⁡iλi⋆\rho>\max_i\lambda_i^\star makes every globally optimal penalized decision feasible, provided it is minimized globally over the same domain. This is a conditional result, not a guarantee for arbitrary local solvers. Residuals must have compatible scales or use separate weights per constraint.

To investigate feasibility separately from the original objective, minimize a scaled measure of total constraint violation:

v⋆=inf⁡x∈X[∑i=1m(gi(x))++∑j=1p∣hj(x)∣].v^\star = \inf_{x \in X} \left[\sum_{i=1}^{m}\big(g_i(x)\big)_+ + \sum_{j=1}^{p}|h_j(x)|\right].

where:

  • xx: the decision vector, chosen from the domain XX
  • mm: the number of constraints being checked for violation
  • gi(x)g_i(x): the ii-th constraint function, positive where the rule is violated
  • (gi(x))+(g_i(x))_+: the positive part max⁡(0,gi(x))\max(0, g_i(x)), the amount by which constraint ii is violated
  • ∣hj(x)∣|h_j(x)|: the magnitude of equality violation for equality jj, with pp equalities
  • v⋆v^\star: the infimum of the summed violation measures; normalize residual units before adding them

An actual decision with zero total violation is a feasible witness. If the globally optimal violation value is strictly positive, no feasible decision exists in XX. An infimum of zero alone does not establish feasibility: x>0x>0 together with x≤0x\leq0 is infeasible even though violations can approach zero. A local solver finding a positive violation is also not an infeasibility proof. This phase-one diagnostic shows which requirements the chosen minimum-violation compromise relaxes; it need not identify a unique or irreducible conflict. Residual scales determine which compromises it prefers.

A related construction is the Lagrangian, whose minimization over the retained domain gives a dual bound. Define

L(x,λ)=f(x)+∑i=1mλi gi(x),L(x, \lambda) = f(x) + \sum_{i=1}^{m} \lambda_i\, g_i(x),

where:

  • f(x)f(x): the objective value of decision xx
  • gi(x)g_i(x): the ii-th constraint function
  • λi≥0\lambda_i \geq 0: the Lagrange multiplier for constraint ii; with the gi(x)≤0g_i(x) \leq 0 convention non-negative multipliers make the infimum of the Lagrangian over the domain a lower bound on z⋆z^\star
  • λ\lambda: the vector of all multipliers

For each non-negative multiplier λi\lambda_i, the term λigi(x)\lambda_i g_i(x) is non-positive when constraint ii is satisfied and non-negative when that individual constraint is violated. For a fixed positive multiplier, larger slack makes the term more negative, while a larger positive violation makes it more positive. If the multiplier is zero, the term remains zero. The sum can contain both signs at an infeasible decision, so one violation does not imply that the entire Lagrangian lies above the objective. Unlike a positive-part penalty, the signed Lagrangian term need not be zero throughout the feasible set. Its purpose here is to construct lower bounds by minimizing over the domain; it does not directly impose feasibility. Equality constraints may remain in that domain, or be dualized separately with unrestricted multipliers. The next subsection derives the bound.

Linear, integer, quadratic, and nonlinear formulations

The formulation classes distinguish permitted expressions and variable domains. Their computational properties depend on structure and assumptions. Remember the four names LP, MILP, QP, and NLP: they identify the model classes discussed in solver documentation.

Linear programs (LPs) have affine objectives and affine constraints over continuous variables. Their feasible regions are polyhedra. For a nonempty bounded feasible polyhedron, a linear objective attains an optimum at a vertex, although other optimal points may exist along an edge. Without suitable conditions a polyhedron may have no vertices. LP relaxations provide bounds for mixed-integer linear models and are used in branch-and-bound.

Mixed-integer linear programs (MILPs) retain affine objectives and affine constraints while restricting some variables to integers or binaries. Binary variables can encode logical decisions; a big-M construction needs valid finite bounds and a justified M. General MILP is NP-hard, while special structures may permit efficient methods. Its continuous LP relaxation enlarges the feasible set, which gives the bound derived below.

Quadratic programs (QPs) use an objective 12x⊤Qx+c⊤x\tfrac12x^\top Qx+c^\top x and affine constraints. For symmetric positive-semidefinite QQ over a convex continuous domain, the objective is convex. Mean-variance portfolio models use this form. Ridge regression gives another example. Within that regression example, XX denotes the design matrix, yy the response vector, β\beta the coefficient vector, and II the identity matrix of the coefficient dimension; this use of XX is separate from the optimization-domain notation above. For penalty weight λ≥0\lambda\geq0, expanding ∥y−Xβ∥2+λ∥β∥2\lVert y-X\beta\rVert^2+\lambda\lVert\beta\rVert^2 gives β⊤(X⊤X+λI)β−2y⊤Xβ+y⊤y\beta^\top(X^\top X+\lambda I)\beta-2y^\top X\beta+y^\top y. Thus Q=2(X⊤X+λI)Q=2(X^\top X+\lambda I) and c=−2X⊤yc=-2X^\top y reproduce the objective apart from the constant y⊤yy^\top y, which does not change its minimizers. The unconstrained case has no additional constraints.

Nonlinear programs (NLPs) allow nonlinear objectives or constraints. They can model blending or physical relationships, but convexity must be checked. Local methods need not find a global optimum and may stop without reaching a local minimum. Finite-domain constraint programming is another modelling style, combining discrete domains with logical and arithmetic constraints, as in rostering.

Removing integrality from a MILP gives its continuous LP relaxation. Removing integrality from a nonlinear mixed-integer problem gives a continuous relaxation that may still be nonlinear. If a globally solved relaxation returns a decision satisfying the original domains and constraints, that decision also solves the original problem, because it attains the relaxation bound. A fractional relaxation solution remains a bound, rather than a valid integer plan.

Bounds, optimality gaps, and independent solution checks

Suppose we cannot solve a problem exactly, or we want to know how much we would gain from trying harder. We need a number that no feasible decision can beat. Any such number is a valid bound, and a relaxation supplies one.

Take a mixed-integer problem and delete the integrality restrictions, obtaining a relaxation with feasible set Frel⊇F\mathcal{F}_{\text{rel}} \supseteq \mathcal{F}. Because we minimized over a larger set, the relaxed optimum cannot be larger:

zrel≤z⋆.z_{\text{rel}} \leq z^\star .

where:

  • zrelz_{\text{rel}}: the optimal value of the continuous relaxation (integrality removed); for a MILP, this is an LP
  • z⋆z^\star: the optimal value of the original mixed-integer problem
  • F\mathcal{F}: the feasible set of the original problem
  • Frel\mathcal{F}_{\text{rel}}: the feasible set of the relaxation, with Frel⊇F\mathcal{F}_{\text{rel}} \supseteq \mathcal{F}

For a maximization this reverses to zrel≥z⋆z_{\text{rel}} \geq z^\star, so the relaxation is optimistically better than reality: it says "if fractions were allowed, you could earn 186.67", whereas the true integer profit is only 180. Note that the LP value 186.67 is the maximization value; in the minimization form used earlier for the gap the corresponding numbers are −186.67-186.67 and −180-180. Every real plan is bounded by that promise, which is exactly what makes the number useful. The bound does not depend on the quality of our incumbent; it depends only on the model, so it can certify even a plan we have not found yet.

The Lagrangian also gives a lower bound. Let λi≥0\lambda_i \geq 0 for every inequality constraint and let yy be any feasible decision. Then each gi(y)≤0g_i(y)\leq 0, so

L(y,λ)=f(y)+∑i=1mλigi(y)≤f(y).L(y,\lambda)=f(y)+\sum_{i=1}^{m}\lambda_i g_i(y)\leq f(y).

Here LL is the Lagrangian, ff is the minimization objective, and the multipliers λi\lambda_i weight the inequality residuals gig_i. Each added term is non-positive at a feasible point. Now minimize over the entire domain XX, which includes yy:

d(λ):=inf⁡x∈XL(x,λ)≤L(y,λ)≤f(y).d(\lambda):=\inf_{x\in X}L(x,\lambda)\leq L(y,\lambda)\leq f(y).

The function dd is the dual function: its value is the infimum of the Lagrangian over all domain-allowed decisions, without requiring the relaxed inequalities. Because this chain holds for every feasible yy, it also gives

d(λ)≤inf⁡y∈Ff(y)=z⋆.d(\lambda)\leq\inf_{y\in\mathcal{F}}f(y)=z^\star.

The infimum is the greatest lower bound, which need not be attained by a decision. This is weak duality. Maximizing d(λ)d(\lambda) over non-negative multipliers seeks the strongest bound in this family; it does not guarantee equality with the primal optimum. A feasible incumbent supplies an upper bound for minimization, while this dual value supplies a lower bound. Together they bracket the unknown optimum.

With a candidate value zincz_{\text{inc}} from some plan or incumbent and a lower bound zLBz_{\text{LB}}, the relative optimality gap is

gap=zinc−zLB∣zinc∣,\text{gap} = \frac{z_{\text{inc}} - z_{\text{LB}}}{\lvert z_{\text{inc}} \rvert},

where:

  • zincz_{\text{inc}}: the objective value of the best incumbent plan found so far
  • zLBz_{\text{LB}}: a valid lower bound on the optimal value
  • zinc−zLBz_{\text{inc}} - z_{\text{LB}}: the absolute optimality gap, the amount the incumbent might still be improvable
  • ∣zinc∣\lvert z_{\text{inc}} \rvert: the absolute value of the incumbent, normalizing the gap to a relative fraction

The numerator bounds the possible improvement of a feasible incumbent over the unknown minimum. Dividing by ∣zinc∣\lvert z_{\text{inc}}\rvert expresses that bound relative to the magnitude of the incumbent, not relative to the unknown optimum. This formula is undefined when zinc=0z_{\text{inc}}=0; report the absolute bound gap or state the solver's explicit convention for that case.

Bounds and gaps quantify search quality, but a small gap does not replace checking candidate feasibility, objective accounting, or model inputs. Use three independent cross-checks:

  • Recompute the objective from the reported decision and compare it with the solver's reported value, checking for sign errors and truncated output.
  • Check variable domains, including bounds and integrality, and recompute every constraint residual with stated tolerances. For a general inequality gi(x)≤0g_i(x) \leq 0, the violation is max⁡(0,gi(x))\max(0,g_i(x)). For an affine inequality ai⊤x≤bia_i^\top x \leq b_i, the signed slack is bi−ai⊤xb_i-a_i^\top x, where bib_i is the ii-th capacity and aia_i is the ii-th coefficient row. A negative slack means the inequality is violated; a non-negative slack is unused capacity. Report the largest violation in each relevant residual scale. For an equality hj(x)=0h_j(x)=0, check the magnitude ∣hj(x)∣\lvert h_j(x)\rvert against its tolerance.
  • On small problems, compare with a second method such as exhaustive enumeration. When enumeration is impossible, compare with a different solver or a differently formulated model. Different implementations can still share input or formulation errors.

These checks connect a solver status to a plan whose objective and feasibility have been independently examined.

Mathematical Properties

  • A convex domain, convex inequality functions, and affine equality functions give a convex feasible set. With a convex objective, any local minimum over that set is global.
  • A linear objective over a nonempty bounded polyhedron has at least one optimal vertex. A constant objective on the entire real line has a finite optimum but no vertex, illustrating why the geometric conditions matter.
  • Adding constraints to a fixed model can only shrink its feasible set, so its optimal minimization value cannot decrease. If every old feasible decision embeds in an expanded model with the same objective value, the expanded minimization value cannot increase. Without that embedding, adding variables alone gives no such monotonicity guarantee.
  • Weak duality does not require convexity. Convexity with a suitable constraint qualification, such as Slater's condition, is a sufficient route to strong duality, not a necessary one. Dual attainment is an additional issue; equality of optimal values alone does not guarantee an optimal multiplier exists.
  • Integrality is not preserved by relaxation, and the difference between the integer optimum and the relaxed optimum is the integrality gap. It can be zero, small, or arbitrarily large, so LP bounds are informative in some models and nearly useless in others.
  • Floating-point feasibility is checked with stated tolerances. Choose checks appropriate to each constraint's units and scales, inspect signed residuals, and report violations rather than assuming one numerical threshold suits every model.

Comments

Add to the conversation

A question, a correction, or an example from your own work.

No comments yet. Be the first to share your thoughts!

Newsletter

Stay up to date

Get new articles, book updates, and notes on AI and technology.

Unsubscribe at any time. Privacy policy