A feasible region, or feasible set, is the collection of all variable values that satisfy every constraint in an optimization problem. The objective function is minimized or maximized only over these allowed points; constraints can therefore move an optimum to an endpoint rather than the point where a derivative is zero. section 10.1.1
Feasibility matters to iterative optimization. An algorithm may begin at a feasible point and repeatedly step in a direction that improves the objective. When the feasible region is convex, every point on the line segment between any two feasible points is also feasible. A nonconvex region can contain holes that block an improving path, even when feasible points exist beyond the gap. A convex objective together with a convex feasible set forms a convex optimization problem, for which efficient solution methods exist. section 10.1.2
Figure 10.7 Two nonconvex sets. The line segments shown connect two points in each set but don’t lie completely in the set.
Compare nonconvex sets with the line segments that leave each set: the missing segment illustrates the hole that violates convexity. section 10.1.2
Portfolio constraints can empty the set
Consider a portfolio constrained to be long-only, fully invested, below a volatility target, and no more than 25% in any position. With a 15% volatility bound, capped weights can produce a portfolio spread across VTI, VEA, VWO, and EMB. Tightening the volatility bound to 5% can make the feasible set empty: no portfolio satisfies all constraints simultaneously. In that case, cvxpy returns a vector of NaN, so adding a diversification constraint requires checking that the combined requirements remain feasible. section 10.3.2 section 10.3.2

