Infeasible problem MocoPredict
Posted: Mon Dec 19, 2022 4:46 am
Dear all,
a student of mine has started working off the example2DWalking tutorial to perform some simulations with Moco Predict on data from the 6th edition of the Knee Grand Challenge. However, he incurred in the infeasible Problem error, which we seem unable to solve.
Below I will provide some context and briefly describe what he did and the data he is using:
More specifically, in MocoTrack he defined the modelled as:
In MocoPredict, he gave as input the same model and set the following two objective functions to solve the problem:
The bounds for the (joint) speed were taken as is from the example2DWalking. Same for the solver.
The simulation starts, but stops throwing the following error:
We tried to look for an explanation of the error, and what we found was:
Could you please help us out? If needed we can share model, data and code.
Any help is really appreciated.
Cheers,
Giorgio
a student of mine has started working off the example2DWalking tutorial to perform some simulations with Moco Predict on data from the 6th edition of the Knee Grand Challenge. However, he incurred in the infeasible Problem error, which we seem unable to solve.
Below I will provide some context and briefly describe what he did and the data he is using:
- Model = simplified version of the generic Rajagopal model, scaled to the size of the KGC6 patient. The model does not include the upper limbs and has a reduced number of muscles compared to the original Rajagopal model (see attached picture)
- Experimental data = motion capture and ground reaction forces data from one trial of normal gait (level walking at self-selected speed)
More specifically, in MocoTrack he defined the modelled as:
Code: Select all
modelProcessor = ModelProcessor(model);
modelProcessor.append(ModOpAddExternalLoads("grf_gait_03.xml"));
modelProcessor.append(ModOpIgnoreTendonCompliance());
modelProcessor.append(ModOpReplaceMusclesWithDeGrooteFregly2016());
modelProcessor.append(ModOpIgnorePassiveFiberForcesDGF());
modelProcessor.append(ModOpAddReserves(100.0));
and provided the experimental marker trajectories.
- MocoControlGoal
- MocoAverageSpeed
The bounds for the (joint) speed were taken as is from the example2DWalking. Same for the solver.
The simulation starts, but stops throwing the following error:
I attached a video of the simulation for reference, which is not that bad even when compared to the actual inverse kinematics results associated with the trial in use (see attached picture and video).MocoCasADiSolver did NOT succeed: Infeasible_Problem_Detected
We tried to look for an explanation of the error, and what we found was:
For completeness, the out log file reported the following (which we are not sure how to interpret):EXIT: Converged to a point of local infeasibility. Problem may be infeasible. The restoration phase converged to a point that is a minimizer for the constraint violation (in the l1 -norm) but is not feasible for the original problem. This indicates that the problem may be infeasible (or at least that the algorithm is stuck at a locally infeasible point). The returned point (the minimizer of the constraint violation) might help you to find which constraint is causing the problem. If you believe that the NLP is feasible, it might help to start the optimization from a different point.
We did not manage to understand what caused the problem and how to possibly solve it to move on.EXIT: Converged to a point of local infeasibility. Problem may be infeasible.
t_proc [s] t_wall [s] n_eval
callback_fun 0.008 0.00882 46
nlp 273 273 1
nlp_f 1.29 1.29 57
nlp_g 3.87 3.87 57
nlp_grad_f 17 17 28
nlp_jac_g 232 232 48
Breakdown of objective (including weights):
control_effort: 13.816
Active or violated continuous variable bounds
L and U indicate which bound is active; '*' indicates a bound is violated.
The case of lower==upper==value is ignored.
State bounds: some bounds active but no bounds violated
time lower value upper
/jointset/ground_pelvis/pelvis_tx/value 2.433 -7.00e-01 <= -7.00e-01 <= 6.50e-01 L
/jointset/ground_pelvis/pelvis_tx/value 3.775 -7.00e-01 <= 6.50e-01 <= 6.50e-01 U
/jointset/ground_pelvis/pelvis_tz/value 2.433 1.91e-01 <= 1.91e-01 <= 2.74e-01 L
/jointset/ground_pelvis/pelvis_tz/value 3.775 1.91e-01 <= 2.74e-01 <= 2.74e-01 U
Control bounds: no bounds active or violated
Multiplier bounds: no bounds active or violated
Derivative bounds: no bounds active or violated
Could you please help us out? If needed we can share model, data and code.
Any help is really appreciated.
Cheers,
Giorgio