Muscle recruitment solver : solver aborted after maximum number of iterations

#1

Hello,

I am using the Main.any skript from the BVH_Xsens Demo Version. I try to import my own data from Xsens. While running the inverse dynamic analysis I got this error:

Muscle recruitment solver : solver aborted after maximum number of iterations

I have already tried to change the LimitDistHigh and FrictionCoefficient in ForcePlates.any as someone descriped in this forum for a similar problem. But it still does not work.
Also I don’t have own time sync Force Plate data to replace the GRF.
So are there any other options, which I can change, to solve that problem?

Kind regards,
Leandra

#2

Hi Leandra

This is an annoying problem which I also experience a lot. It is bacially caused by the numerical problems in the muscle recruitment solver, and I do have some suggestions to handle it.

I think the root cause is often the pelvis residual forces. In the Ground Reaction Force prediction models, pelvis residuals are implemented as very weak recruited actuators (artificial muscle). They should only be recruited if the model is dynamically out of balance. So the strength of those weak actuators is very low compared to the contract point on the feet.

The problem appears to be the difference in strength between the elements. It causes a numerical problem with the recruitment algorithm. One solution is to increase the strength of the artificial muscles uses by the pelvis residuals:

Main.Studies.InverseDynamicStudy.ModelEnvironmentConnection.HumanGroundResiduals.WeakGeneralMuscles.MusMoldel1.F0

Main.Studies.InverseDynamicStudy.ModelEnvironmentConnection.HumanGroundResiduals.WeakGeneralMuscles.MusMoldel2.F0

But this is not a really good solution as it will make the model more likely to use the residuals, even if it shouldn’t.

The other work-around is to change the muscle to recruitment criterion from a third to a second order polynomial. You do this by setting the following in your model:

Main.Studies.InverseDynamicStudy.InverseDynamics.Criterion.Power = 2;

This seems to make the algorithm much more stable, and we are seriously considering changing all the examples to use this as default. It is not likely to influence your results. Some researcher has also suggested that the second order criterion could be better in some cases.

So try that. At least until we can find a way to make the recruitment algorithm more robust to big differences in strength.

1 Like
#3

Hello,

How can I change the value of power? It’s gray.

Thank you!

#4

Thank you very much for your answer!
Changing the recruitment criterion to a second order looks better!
I have already tried to change the Human Ground Residuals, but it took away too much load from the leg muscles.
So now my model is stable.

Thank you very much,

Leandra

#5

Hello,
you should write in the main file:

Main = {
Main.Studies.InverseDynamicStudy.InverseDynamics.Criterion.Power=2;
}

That’s how it works at my script.

#6

Not everything can be changed after the model is loaded. Sometimes it is possible to force a later evaluation time by wrapping the value with the DesignVar() function. But in this case I don’t think it is possible. I am on holiday at the moment so I can’t check for certain.