<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=WordSection1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Jim,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Does </span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>++X(1,9); permanently shift the index so you would have to do  <o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>X(2,10) – ++X(1,9);<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>--X(1,9);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I vaguely remember something like that when I used it many years
ago.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Mark<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:#1F497D'> </span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p></o:p></span></p>

</div>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
users-bounces@admb-project.org [mailto:users-bounces@admb-project.org] <b>On
Behalf Of </b>Jim Ianelli<br>
<b>Sent:</b> Thursday, October 07, 2010 8:31 AM<br>
<b>To:</b> 'Luis Ridao'; users@admb-project.org<br>
<b>Subject:</b> Re: [ADMB Users] error when imposing penalty on objective
function<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>In ADMB the indices of vector operations must be
consistent.  I.e., if you subtract a (sub)vector of X which has dimension
1,10 e.g., :<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>X(2,10) – X(1,9); <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>will return an error.  A shift operator is required (page
15-10 in my manual).  A shorthand way to do this is:<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>X(2,10) – ++X(1,9);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>A long hand way is:<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>X(2,10) – X(1,9).shift(1);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Cheers,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Jim<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'> <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>James Ianelli<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><a href="http://www.afsc.noaa.gov/REFM/stocks/assessments.htm">REFM
Division, Alaska Fisheries Science Center</a><o:p></o:p></span></p>

<p class=MsoNormal><i><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>National Marine Fisheries Service, National Oceanic and
Atmospheric Administration<o:p></o:p></span></i></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>7600 Sand Point Way NE<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Seattle WA 98115<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Ph. 206 526 6510<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
users-bounces@admb-project.org [mailto:users-bounces@admb-project.org] <b>On
Behalf Of </b>Luis Ridao<br>
<b>Sent:</b> Thursday, October 07, 2010 7:45 AM<br>
<b>To:</b> users@admb-project.org<br>
<b>Subject:</b> [ADMB Users] error when imposing penalty on objective function<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>ADMB-help,<o:p></o:p></p>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>This is my first e-mail to this mailing-list. I'm new to
ADMB and <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>trying to learn little by little.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>I'm working on a catch-at-age model provided in the admb
manual.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>The first step was to import my personal stock data set. As
a second step <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>I wish to impose a penalty on the objective function based
on the differences in the fishing mortality<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>coefficient ("log_fy_coff")<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>ADMB fails to run the model with the following message:<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>"Incompatible bounds in prevariable operator * (_CONST
dvar_vector& v1,_CONST dvar_vector& v2)"<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>The line causing the error is the  FUNCTION
"evaluate_the_objective_function" section at the of the file<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal># originally (from the manual admb.pdf)<o:p></o:p></p>

</div>

<div>

<div>

<p class=MsoNormal>FUNCTION evaluate_the_objective_function<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // penalty functions to ``regularize '' the
solution<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  f+=.01*norm2(log_relpop);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  avg_F=sum(F)/double(size_count(F));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  if (last_phase())<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    // a very small penalty on the average
fishing mortality<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    f+= .001*square(log(avg_F/.2));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  else<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    f+= 1000.*square(log(avg_F/.2));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  f+=0.5*double(size_count(C)+size_count(log_fy_coff)) <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    * log(
sum(elem_div(square(C-obs_catch_at_age),.01+C))<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    + 100*norm2(log_fy_coff)));    
// ORIGINAL LINE <o:p></o:p></p>

</div>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal># the modification of the original code (last line)<o:p></o:p></p>

</div>

<div>

<div>

<p class=MsoNormal>FUNCTION evaluate_the_objective_function<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // penalty functions to ``regularize '' the
solution<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  f+=.01*norm2(log_relpop);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  avg_F=sum(F)/double(size_count(F));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  if (last_phase())<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    // a very small penalty on the average
fishing mortality<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    f+= .001*square(log(avg_F/.2));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  else<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    f+= 1000.*square(log(avg_F/.2));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  f+=0.5*double(size_count(C)+size_count(log_fy_coff)) <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    * log(
sum(elem_div(square(C-obs_catch_at_age),.01+C))<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    +
100*norm2(log_fy_coff(2,nyrs)-log_fy_coff(1,nyrs-1))); // MODIFIED LINE<o:p></o:p></p>

</div>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>The .tpl file is provided below.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>I'm running on a Windows machine.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>########################################################################################<o:p></o:p></p>

</div>

<div>

<div>

<p class=MsoNormal>DATA_SECTION<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_int nyrs          
                      //
the number of years odf data<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_int nages        
                     
 // the number of age classess in the population<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_matrix obs_catch_at_age(1,nyrs,1,nages)
 // observed catch-at-age data<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_number M          
                      //
estimate of natural mortality rate<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_vector relwt(2,nages);      
            // need to have relative
weight-at-age to calculate B2+<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  vector ages(1,nages);      
                  // ages of data<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  vector ages4plus(1,nages-1);    
             // non-recruiting ages in the
population<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  vector years(1,nyrs);      
                  // years of data<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  int pred_year;        
                     
 // prediction year<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>INITIALIZATION_SECTION<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  //log_q -1          
                     
   // original -1<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  log_popscale 5        
                     
 // original 5<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>PARAMETER_SECTION<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  //init_number log_q(1)      
                 //
log-catchability<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_number log_popscale(1)      
            // overall population scaling
parameter<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_bounded_dev_vector
log_sel_coff(1,nages-1,-15.,15.,2)        // original
log_sel_coff(1,nages-1,-15.,15.,2)       <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_bounded_dev_vector
log_relpop(1,nyrs+nages-1,-15.,15.,2)     // original
log_relpop(1,nyrs+nages-1,-15.,15.,2)    <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  init_bounded_dev_vector
log_fy_coff(1,nyrs,-.3,.3,3)              //
original log_fy_coff(1,nyrs,-2.,2.,3)         <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  vector log_sel(1,nages)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  vector log_fy(1,nyrs)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  vector log_initpop(1,nyrs+nages-1);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  matrix F(1,nyrs,1,nages)      
              // instantaneous fishing
mortality<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  matrix Z(1,nyrs,1,nages)      
              // instantaneous total
mortality<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  matrix S(1,nyrs,1,nages)      
              // survival rate<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  matrix N(1,nyrs,1,nages)      
              // predicted numbers-at-age<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  matrix C(1,nyrs,1,nages)      
              // predicted catch-at-age<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  objective_function_value f<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  number recsum<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  number initsum<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  sdreport_number avg_F<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  sdreport_vector predicted_N(2,nages)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  sdreport_vector ratio_N(2,nages)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // changed from the manual because adjusted
likelihood routine doesn't<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // work<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  likeprof_number pred_B<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>PRELIMINARY_CALCS_SECTION<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  ages.fill_seqadd(3,1);      
    // vector of ages<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  ages4plus.fill_seqadd(4,1);    
 // vector of non recruiting ages<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  years.fill_seqadd(1975,1);      
// fill vector of years with years<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  pred_year=years[nyrs]+1;      
  // year of prediction = last_year +1<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>PROCEDURE_SECTION<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // example of using FUNCTION to structure the
procedure section<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  get_mortality_and_survivial_rates();<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>  get_numbers_at_age();<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>  get_catch_at_age();<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>  evaluate_the_objective_function();<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>FUNCTION get_mortality_and_survivial_rates<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  int i, j;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>   //calculate the selectivity from the sel_coffs
---------------------<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  for (j=1;j<nages;j++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  log_sel(j)=log_sel_coff(j);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  //the selectivity is the same for the last two
age classes<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  log_sel(nages)=log_sel_coff(nages-1);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>  for (i=1;i<=nyrs;i++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    log_fy(i)=log_fy_coff(i);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  F=outer_prod(mfexp(log_fy),mfexp(log_sel));
 // F=outer_prod(mfexp(log_fy),mfexp(log_sel)) ;
F=outer_prod(mfexp(log_q)*effort,mfexp(log_sel));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  Z=F+M;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // get the survival rate<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  S=mfexp(-1.0*Z);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>FUNCTION get_numbers_at_age<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  int i, j;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  log_initpop=log_relpop+log_popscale;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  for (i=1;i<=nyrs;i++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    N(i,1)=mfexp(log_initpop(i));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  for (j=2;j<=nages;j++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    N(1,j)=mfexp(log_initpop(nyrs+j-1));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  for (i=1;i<nyrs;i++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    for (j=1;j<nages;j++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>      N(i+1,j+1)=N(i,j)*S(i,j);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // calculated predicted numbers at age for next
year<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  for (j=1;j<nages;j++)<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    predicted_N(j+1)=N(nyrs,j)*S(nyrs,j);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    ratio_N(j+1)=predicted_N(j+1)/N(1,j+1);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // calculated predicted Biomass for next year
for<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // adjusted profile likelihood<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  pred_B=(predicted_N * relwt);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>FUNCTION get_catch_at_age<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  C=elem_prod(elem_div(F,Z),elem_prod(1.-S,N));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

<div>

<p class=MsoNormal>FUNCTION evaluate_the_objective_function<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  // penalty functions to ``regularize '' the
solution<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  f+=.01*norm2(log_relpop);<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  avg_F=sum(F)/double(size_count(F));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  if (last_phase())<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    // a very small penalty on the average
fishing mortality<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    f+= .001*square(log(avg_F/.2));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  else<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  {<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    f+= 1000.*square(log(avg_F/.2));<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  }<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>  f+=0.5*double(size_count(C)+size_count(log_fy_coff)) <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    * log(
sum(elem_div(square(C-obs_catch_at_age),.01+C))<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>    +
100*norm2(log_fy_coff(2,nyrs)-log_fy_coff(1,nyrs-1))); <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>########################################################################################<o:p></o:p></p>

</div>

</div>

</div>

</div>

</body>

</html>