A useful concept in constrained optimization is the idea of side constraints. As an example, although mathematically feasible, a negative moment of inertia for a structural element is physically meaningless. As a result, the current problem must contain a subroutine within the optimization process that prevents design variables from taking on negative values. Side constraints restrict the range of values that each design variable can assume. Each iteration of the optimization process can check as to whether a design variable has left the feasible range. When such an event occurs, the algorithm can repeat the current iteration but artificially set the design variable to the maximum or minimum of the feasible range. In turn, the algorithm can adjust the gradient calculations to reflect the restriction on the design variable and the remaining design variables in the feasible range will change accordingly (Cheng et al.). An optimal solution can then be found with each design variable remaining within the feasible range.