<div dir="ltr">I don't see that I was conflating things nor that it's too complicated (though Dave would surely know better).<div><br></div><div>As noted in <a href="http://www.admb-project.org/redmine/issues/109">the Redmine Issue</a>, the file <a href="http://admb-project.org/documentation/api/fmm__disp_8cpp_source.html">fmm_disp.cpp</a> is what currently displays the gradient values during the minimization process. If this is not the ideal time to calculate gradient values, then we've been looking at the wrong numbers all along. If it is indeed the right time, one option would be to revise fmm_disp.cpp to display them in an alternative order as John suggests. Another (or parallel) option would be to add a section to fmm_disp.cpp to write the same values to a file which could be sorted in any order. Presumably writing to a file would slow things down slightly, so you would want it as an option, not the default behavior.</div>

<div><br></div><div>Currently you can redirect all the command window text to a file and then parse this file to get the gradient info. However, the 3-column format for the gradients makes this slightly more tedious than it has to be.</div>

<div><br></div><div>-Ian</div><div><br></div><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 20, 2013 at 8:27 AM, dave fournier <span dir="ltr"><<a href="mailto:davef@otter-rsch.com" target="_blank">davef@otter-rsch.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Well this is a bit complicated because there are various loops where the function and<br>
gradient are calculated and various function minimizers.  What I would do is to<br>
compile my code with debug info and but a breakpoint in the userfunction. Then<br>
a stack trace will find where you are.  In my case df1b2qnm.cpp around line 185.<br>
the loop looks like<br>
<br>
<br>
<br>
  while (fmc.ireturn>=0)<br>
      {<br>
        fmc.fmin(f,x,g);<br>
        if (fmc.ireturn>0)<br>
        {<br>
          dvariable vf=0.0;<br>
          vf=initial_params::reset(dvar_<u></u>vector(x));<br>
          *objective_function_value::<u></u>pobjfun=0.0;<br>
          pre_userfunction();<br>
          vf+=*objective_function_value:<u></u>:pobjfun;<br>
          f=value(vf);<br>
          gradcalc(nvar,g);<br>
        }<br>
      }<br>
<br>
To make it simple lets print out every function evaluation.<br>
<br>
  ofstream ofs("stuff");<br>
<br>
  while (fmc.ireturn>=0)<br>
      {<br>
        fmc.fmin(f,x,g);<br>
        if (fmc.ireturn>0)<br>
        {<br>
          dvariable vf=0.0;<br>
          vf=initial_params::reset(dvar_<u></u>vector(x));<br>
          *objective_function_value::<u></u>pobjfun=0.0;<br>
          pre_userfunction();<br>
          vf+=*objective_function_value:<u></u>:pobjfun;<br>
          f=value(vf);<br>
          gradcalc(nvar,g);<br>
<br>
          printstuff(f,x,g,ofs);<br>
        }<br>
      }<br>
<br>
void printstuff(double f,const dvector& x,const dvector& g,const ofstream& ofs)<br>
{<br>
   int n=g.indexmax();<br>
   dmatrix TS(1,2,1,n);<br>
<br>
   TS(1).fill_seqadd(1,1);<br>
   TS(2)=fabs(g);<br>
<br>
    dmatrix S=trans(TS);<br>
<br>
    S=sort(S,2);<br>
<br>
   ivector index=ivector(column(S,1));   // can use index to print out what you want<br>
<br>
   for (int i=n;i>=n;i--)<br>
   {<br>
       ofs << x(ind(i)) << " " << g(ind(i)) << endl;<br>
   }<br>
<br>
This is probably in decreasing order<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
Users mailing list<br>
<a href="mailto:Users@admb-project.org" target="_blank">Users@admb-project.org</a><br>
<a href="http://lists.admb-project.org/mailman/listinfo/users" target="_blank">http://lists.admb-project.org/<u></u>mailman/listinfo/users</a><br>
</div></div></blockquote></div><br></div></div>