Why Constraint Classification Matters
A price optimization problem has two distinct parts: an objective to optimize and a feasible set of prices the model is allowed to consider. The objective might be expected contribution or another portfolio measure. Constraints describe requirements that must hold regardless of which objective is selected. A price vector that improves the objective is not an acceptable solution if it violates even one applicable constraint.
Let \(p_i\) denote the price decision for customer or segment \(i\), and collect the decisions in the vector \(\mathbf{p}=(p_1,\ldots,p_n)\). A constraint can apply to one decision, several decisions jointly, or an outcome calculated for the whole portfolio. Classification helps prevent a frequent modeling error: expressing a requirement as if it applied separately to each customer when it is actually an aggregate requirement, or treating a target as exact when deviations are allowed.
Four Constraint Types
An equality constraint has the form \(h(\mathbf{p})=b\), where \(h\) is a function of the decision variables and \(b\) is a required value. It is appropriate when a condition must hold exactly, such as a prescribed weighted average or an exact accounting identity. A target that is merely desirable is not an equality constraint unless the problem explicitly makes it mandatory.
An inequality constraint has the form \(g(\mathbf{p})\leq b\) or \(g(\mathbf{p})\geq b\). The permitted side matters: “no more than” translates to \(\leq\), while “at least” translates to \(\geq\). If an inequality holds exactly at its limit, it is binding; if it holds strictly, it has slack. Equality constraints have no slack when satisfied.
A decision-variable bound applies directly to one or more coordinates. In general, the bounds for decision \(i\) can be written \(l_i\leq p_i\leq u_i\), when both a lower and an upper bound are specified. One-sided bounds are written separately, such as \(p_i\geq l_i\). The mathematical form is important: a restriction on each customer’s price is different from a restriction on an average price across all customers.
A portfolio guardrail restricts an aggregate outcome, often represented by \(G(\mathbf{p})\). For example, a hypothetical organization might require an exposure-weighted portfolio index to remain within an approved range. The guardrail acts on the combined decisions; it does not necessarily require every individual decision to meet that same range.
| Type | General form | What it requires |
|---|---|---|
| Equality | \(h(\mathbf{p})=b\) | An exact relationship or target |
| Inequality | \(g(\mathbf{p})\leq b\) or \(g(\mathbf{p})\geq b\) | A limit that may allow slack |
| Decision-variable bound | \(l_i\leq p_i\leq u_i\) | An allowed range for an individual decision |
| Portfolio guardrail | \(G(\mathbf{p})\leq b\), for example | A restriction on an aggregate outcome |
These labels describe the role and scope of a restriction. A portfolio guardrail may itself be an equality or inequality, and a bound is mathematically an inequality. Classifying it separately is useful because it emphasizes that the restriction applies directly to a decision variable rather than to a calculated portfolio result.
Writing Constraints for a Weighted Portfolio
Suppose segment \(i\) has a fixed exposure weight \(w_i\), with \(w_i\geq 0\) and \(\sum_i w_i=1\). If \(p_i\) is a price index for that segment, the exposure-weighted portfolio index is \(\sum_i w_i p_i\). A requirement that this index equal a target \(c\) is an equality; a requirement that it not exceed \(c\) is an inequality. The same decision vector may therefore be subject to both individual bounds and aggregate guardrails.
The weights must match the definition of the portfolio measure. An exposure-weighted average is not generally the simple arithmetic average of segment prices. If raw exposure amounts \(e_i\) are provided instead of normalized weights, set \(w_i=e_i/\sum_j e_j\), assuming total exposure is positive.
Worked Example: Classifying an Exact Portfolio Target
A hypothetical portfolio has 300 units of exposure in segment A and 200 in segment B. Let \(p_A\) and \(p_B\) be the segments’ price indices. The required exposure-weighted portfolio index is exactly 1.04. A proposed pair is \(p_A=1.10\), \(p_B=0.95\). Write the restriction, classify it, and test the proposal.
Method. Normalize each exposure by total exposure. The total is \(300+200=500\), so \(w_A=300/500=0.60\) and \(w_B=200/500=0.40\). The exact requirement is the equality
Substitute the proposed indices: \(0.60(1.10)=0.66\) and \(0.40(0.95)=0.38\). Their sum is \(0.66+0.38=1.04\). The proposal satisfies the equality exactly, so it is feasible with respect to this restriction.
Common mistake avoided. Using the unweighted mean gives \((1.10+0.95)/2=1.025\), which is not the specified portfolio measure because the segments have different exposures. Also, \(300(1.10)+200(0.95)=520\) is an exposure-weighted total, not an average index; dividing by 500 gives \(520/500=1.04\).
Decision-Variable Bounds Are Coordinate by Coordinate
When a model specifies an allowed range for each decision, check each coordinate separately. A candidate may satisfy the restriction for one segment and violate it for another. Bounds do not become an aggregate condition merely because the decisions are solved together. Conversely, satisfying all individual bounds does not establish that a separate portfolio guardrail is satisfied.
Worked Example: Testing Individual Decision Bounds
A hypothetical optimization uses price indices \(p_A\) and \(p_B\). Its allowed domains are \(0.80\leq p_A\leq1.20\) and \(0.90\leq p_B\leq1.10\). Test the proposed vector \((1.18,1.12)\), then test \((1.18,1.10)\). Classify the restrictions.
Method. These are decision-variable bounds: each inequality applies to one coordinate. For the first vector, \(p_A=1.18\) satisfies \(0.80\leq1.18\leq1.20\). But \(p_B=1.12\) exceeds its upper bound of 1.10. The vector is therefore infeasible, even though its A decision is allowed.
For the second vector, \(p_A=1.18\) still satisfies its bounds. The B decision is \(p_B=1.10\), and \(0.90\leq1.10\leq1.10\), so it satisfies its bounds at the endpoint. This second vector is feasible with respect to the stated bounds.
Common mistake avoided. It is incorrect to call the first vector feasible because its average index is within some plausible range. No aggregate test replaces the two coordinate-by-coordinate checks required here.
Portfolio Guardrails Restrict Combined Outcomes
A portfolio guardrail is evaluated after applying its specified aggregation rule. In a weighted-index example, individual decisions can each lie within their own allowed domains while their weighted average violates the portfolio restriction. The reverse can also occur: one decision may be high and another low, while the aggregate remains within its required range. Feasibility requires checking both levels whenever both types of constraints are present.
For an interval guardrail, write both sides explicitly, such as \(a\leq G(\mathbf{p})\leq b\). This is equivalent to the pair \(G(\mathbf{p})\geq a\) and \(G(\mathbf{p})\leq b\). Do not replace an interval with just one side, and do not treat the range as applying separately to every \(p_i\) unless that is what the requirement says.
Worked Example: Separating Bounds From a Portfolio Guardrail
For two hypothetical segments, suppose the individual domains are \(0.90\leq p_A\leq1.12\) and \(0.95\leq p_B\leq1.08\). A portfolio guardrail requires the exposure-weighted index to lie between 0.97 and 1.03, inclusive. The fixed weights are \(w_A=0.25\) and \(w_B=0.75\). Test \((1.10,1.02)\), then test \((1.08,1.00)\).
Method. First check the variable bounds. In the first vector, \(1.10\) is between 0.90 and 1.12, and \(1.02\) is between 0.95 and 1.08. Both bounds are satisfied. The portfolio value is
The value 1.040 exceeds the upper guardrail 1.03, so the first vector is infeasible overall despite satisfying both individual bounds.
For the second vector, the bounds also hold: \(0.90\leq1.08\leq1.12\) and \(0.95\leq1.00\leq1.08\). Its portfolio value is \(0.25(1.08)+0.75(1.00)=0.270+0.750=1.020\). Since \(0.97\leq1.020\leq1.03\), the second vector satisfies the guardrail and is feasible with respect to all restrictions given.
Common mistake avoided. Checking only the two individual domains would incorrectly label the first proposal feasible. The portfolio condition is a separate restriction on the weighted outcome.
A Reliable Constraint-Classification Process
Translate each requirement by identifying what is restricted, whether it must hold exactly, and how its value is calculated. Then test every condition independently. A feasible price vector is one that passes the full set of checks; it is not enough to satisfy the most visible or most restrictive-looking condition.
Determine whether the requirement applies to one decision \(p_i\), a function of several decisions, or an aggregate portfolio outcome.
Translate “equals” to an equality, “at most” to \(\leq\), and “at least” to \(\geq\). Preserve any stated inclusive endpoints.
Use the specified weights and normalize them when the requirement is an average based on raw exposure amounts.
Test each decision-variable bound and each joint or portfolio condition. A failure in any one condition makes the proposed vector infeasible.
Common Classification Traps
- Turning a preference into an equality. A desired target is not necessarily mandatory. Use equality only when the specification requires an exact result.
- Reversing an inequality. “No more than” means \(\leq\); “no less than” means \(\geq\). Translate the wording before evaluating candidate values.
- Confusing a bound with a portfolio rule. A bound checks a particular decision; a portfolio guardrail checks a calculated combined outcome.
- Using the wrong weights. An exposure-weighted average requires exposure weights, not equal weights unless the exposures are equal.
- Checking only the objective. A better objective value cannot compensate for violating a constraint. Feasibility is a separate test.
Check Your Understanding
For each problem, classify the relevant condition and evaluate the proposed decision where requested.
- A hypothetical portfolio has exposure shares 0.25 and 0.75. The required weighted index is exactly 1.00. Test \(p_A=1.12\) and \(p_B=0.96\). Is the condition an equality or an inequality? (Answer: Equality; \(0.25(1.12)+0.75(0.96)=0.28+0.72=1.00\), so the proposal satisfies it.)
- Two decision bounds are \(0.85\leq p_1\leq1.15\) and \(0.90\leq p_2\leq1.08\). Test \((1.14,1.09)\). (Answer: Infeasible; \(p_1\) satisfies its bounds, but \(p_2=1.09>1.08\).)
- With exposure shares 0.60 and 0.40, a portfolio guardrail is \(0.98\leq0.60p_1+0.40p_2\leq1.02\). Test \((1.05,0.95)\). (Answer: The weighted value is \(0.60(1.05)+0.40(0.95)=0.63+0.38=1.01\), so the guardrail is satisfied.)
- A hypothetical requirement states that an aggregate index must be at least 0.97, where the index is \(0.40p_A+0.60p_B\). Write the restriction and classify it. (Answer: \(0.40p_A+0.60p_B\geq0.97\); it is a portfolio-level inequality guardrail.)
- Suppose \(0.92\leq p_A,p_B\leq1.10\), \(0.50p_A+0.50p_B=1.00\), and \(0.70p_A+0.30p_B\leq1.05\). Test \((1.08,0.92)\) against all conditions. (Answer: Feasible; both individual bounds hold, the equality gives \(0.50(1.08)+0.50(0.92)=1.00\), and the guardrail gives \(0.70(1.08)+0.30(0.92)=0.756+0.276=1.032\leq1.05\).)