[ADMB Users] a conditional statement under PARAMETER_SECTION
John Sibert
sibert at hawaii.edu
Sat Mar 19 13:01:19 PDT 2011
If your code is generating compiler/linker errors you are probably
referencing an undeclared variable (that is why you cannot put
declarations inside a conditional block). So you if you really want to
"ignore" a variable, you must completely banish if from your code. You
can sometimes use conditional compilation for this purpose (ie #ifdef ).
Otherwise, depending on what you really mean by "ignore", you could try
something like this
DATA_SECTION
// declare some variables for later use in the PARAMETER_SECTION
number sel_par_min
number sel_par_max
init_int ignore_sel_par // read int from the .dat file to control
estimation at run time;
// 1 to ignore; 0 to estimate
LOCAL_CALCS
// set default values
sel_par_min = -5.0;
sel_par_max = 5.0;
sel_phz = 1; // or whatever phase you want
// alternatively you could declare sel_phz to be an init_int and read
it from the the .dat file
if (ignore_sel_par)
{
// set sel_par_min and sel_par_max so their midpoint is the value
you want for sel_par if you don't want 0.0
sel_phz = -1; // forces the sel_par to NOT be active
}
END_CALCS
PARAMETER_SECTION
init_bounded_number(sel_par_min, sel_par_max, sel_phz);
On 03/19/2011 09:14 AM, Saang-Yoon wrote:
> Hello, Steve.
> Thank you very much for your prompt response, which is helpful. By
> the way, the conditional statement in your example is used below
> "init_bounded_matrix_vector sel_par". Now if we want to ignore the
> parameter vector, "sel_par" by an option, then we may want to put the
> parameter declaration ("init_bounded_matrix_vector sel_par") under the
> optional statement, which would lead to a compile/link error. I
> wonder about how you or others get around in "one" TPL file. Again
> thank you.
> Saang-Yoon
>
>
> On Mar 19, 2:35 pm, Steve Martell<s.mart... at fisheries.ubc.ca> wrote:
>> Sanng-Yoon,
>>
>> Statements such as this work fine for me in the PARAMETER_SECTION
>>
>> //Selectivity parameters (A very complicated ragged array)
>> init_bounded_matrix_vector sel_par(1,ngear,1,jsel_npar,1,isel_npar,-5.,5.,sel_phz);
>> LOC_CALCS
>> //initial values for logistic selectivity parameters
>> //set phase to -1 for fixed selectivity.
>> for(int k=1;k<=ngear;k++)
>> {
>> if( isel_type(k)==1 || isel_type(k)==6 )
>> {
>> sel_par(k,1,1) = log(ahat(k));
>> sel_par(k,1,2) = log(ghat(k));
>> }
>> }
>> END_CALCS
>>
>> On 2011-03-19, at 11:31 AM, Saang-Yoon wrote:
>>
>>> Hi, all.
>>> Whenever I put a conditional statement (e.g., if - else) under
>>> PARAMETER_SECTION, I run into an error. I wonder whether ADMB is
>>> designed not to allow a conditional statement under PARAMETER_SECTION
>>> ever. Sometimes I need to consider or ignore a parameter, depending
>>> on a model assumption. If you were, how would you get around in
>>> ADMB? Temporarily I make two TPL files (e.g., two EXE files) by the
>>> assumption. But I suspect some of you may get around in "one" TPL
>>> file (i.e., "one" EXE file).
>>> Saang-Yoon
>>> _______________________________________________
>>> Users mailing list
>>> Us... at admb-project.org
>>> http://lists.admb-project.org/mailman/listinfo/users
>> _______________________________________________
>> Users mailing list
>> Us... at admb-project.orghttp://lists.admb-project.org/mailman/listinfo/users
> _______________________________________________
> Users mailing list
> Users at admb-project.org
> http://lists.admb-project.org/mailman/listinfo/users
>
--
John Sibert
Emeritus Researcher, SOEST
University of Hawaii at Manoa
Visit the ADMB project http://admb-project.org/
More information about the Users
mailing list