Constraints¶
Constraints are used in the optimization scheme to enforce that every ligament experiences at least a nominal amount of force at one point the loading cycle (test cases). These constraints are applied to prevent the optimization algorithm from effectively removing a ligament from the knee model. This can potentially happen if the optimization algorithm assigns an excessively long ligament slack length, preventing that ligament from having an effect on the joint’s kinematics, and therefore the objective function.
There is one inequality constraint for every control variable. There is a total of 22 constraints, and each constraint is enforced using the following (3).
where \(x_i\) is the control variable, and \(f_i\) is the maximum force that the fiber that corresponds to \(x_i\) has experienced throughout the simulated test cases. Notice that if \(f_i\) is less than \(0.1\), then \(h(x_i) < 0\), and there is a violation of the constraint.
The last term in (3) (\(x_i^4\)) is used to provide a unique function value for \(h(x_i)\). This is necessary because the value \(f_i\) can equal zero at multiple values of \(x_i\), and without the last term, \(h(x_i)\) can have the same value at multiple values of \(x_i\). The fourth power is used to increase the order of magnitude of the constraint values.
It is also prudent to use the last term in (3) (\(x_i^4\)) because of the nature of the system. The control variables are used to define the slack lengths of the ligament fibers. When a constraint is violated, i.e. \(h(x_i) < 0\), decreasing \(x_i\) will cause \(h(x_i)\) to be closer to zero. Given the behavior of the model, decreasing ligament slack lengths can increase the force that the ligament carries in the simulation.