is the process of optimizing an objective function with respect to some variables in the presence of constraints on those variables.
Constraints can be either hard constraints which set conditions for the variables that are required to be satisfied, or soft constraints which have some variable values that are penalized in the objective function if, and based on the extent that, the conditions on the variables are not satisfied.