Laura,
Thanks for the good question.
The jitter in 3.24 and earlier versions is not very smart, because the amount of the jitter depends on the fraction you set and on the min max of the parameter.
FUNCTION dvariable Check_Parm(const double& Pmin, const double& Pmax, const double& jitter, const prevariable& Pval)
{
dvariable NewVal;
dvariable temp;
NewVal=Pval;
if(jitter>0.0)
{
temp=log((Pmax-Pmin+0.0000002)/(NewVal-Pmin+0.0000001)-1.)/(-2.); // transform the parameter
temp += randn(radm) * jitter;
NewVal=Pmin+(Pmax-Pmin)/(1.+mfexp(-2.*temp));
if(Pmin==-99 || Pmax==99)
{N_warn++; warning<<" use of jitter not advised unless parameter min & max are in reasonable parameter range "<<Pmin<<" "<<Pmax<<endl;}
}
return NewVal;
}
In 3.30, the jitter is smarter by basing it on a cumulative normal distribution, so is much less sensitive to the min and max.
So, even with a jitter of 0.1 in 3.24, some parameter might go to a starting value from which it cannot find its way to the best solution. Of course, the fact that there is a parameter combo that is a local but not global minimum is what you want to learn by doing jitter.
The situation you find is not uncommon. Generally this is due to one alternative being a high F, low biomass result with near asymptotic selectivity. The other being a low F, high biomass, with dome-selectivity. Once the model gets into one or the other of these configurations, it may not be able to smoothly move between them and find which one is better. I note that your survey index 1 and survey index 2 have rather opposite residual patterns, so SS cannot possibly fit both simultaneously.
So, rather than jitter, it might be better to intentionally set up two starting value scenarios to more explicitly contrast these two alternatives.
Hope this helps.
Rick