Constrained expected improvement (constrained EI) selects points that promise objective improvement while remaining likely to satisfy constraints. It multiplies regular expected improvement by the probability of feasibility, reducing the priority of attractive but probably infeasible points. section 8.2 section 8.6
Evaluate a candidate point by combining two signals:
- Compute expected improvement from the GP modeling the objective. section 8.2
- Use a separate GP for each constraint to obtain the probability that the candidate satisfies its inequality; for a cost constraint, feasibility means cost is at most zero. section 8.2 section 8.3
- Multiply expected improvement by the feasibility probability, then query the candidate with the largest resulting acquisition score. section 8.2 section 8.4
BoTorch configuration
Train one GP on utility values and another on cost values, combine them in a ModelListGP, and declare the feasible cost bound with ConstrainedExpectedImprovement: best_f=train_utility[train_cost <= 0].max(), objective_index=0, constraints={1: [None, 0]}. Retrain both models after each observation. section 8.4
Manual verification
On a dense grid from −5 to 5, use the cost GP's normal predictive distribution and its CDF at zero to calculate feasibility probabilities. Multiply them by regular EI values and compare the result with BoTorch's constrained EI scores. section 8.3
