Linear Constraints

Many methods can make use of linear equality or inequality constraints.

As the name implies, linear constraints are constraints that are linear functions of the variables. Constraints that are nonlinear functions of variables are specified using the topic-nonlinear_constraints family of keywords. From a Dakota usage point of view, the most important difference between linear and nonlinear constraints is that the former are specified entirely within the Dakota input file and calculated by Dakota itself, while the latter must be calculated by the user’s simulation and returned as responses to Dakota.

The Optimization chapter of the User’s Manual states which methods support linear constraints. Of those methods, a subset strictly obey linear constraints; that is, no candidate points are generated by the optimizer that violate the constraints. These include method-asynch_pattern_search, the optpp_* family of optimizers (with the exception of optpp_fd_newton), and method-npsol_sqp. The other methods seek feasible solutions (i.e. solutions that satisfy the linear constraints), but may violate the constraints as they run. Linear constraints may also be violated, even when using an optimizer that itself strictly respects them, if responses-numerical_gradients are used. In this case, Dakota may request evaluations that lie outside of the feasible region when computing a gradient near the boundary.

One final limitation that bears mentioning is that linear constraints are compatible only with continuous variables. No discrete types are permitted when using linear constraints.