[ADMB Users] Missing overloaded operators (+=, -=) in random effects

Mark Payne mpa at aqua.dtu.dk
Tue Apr 5 06:27:47 PDT 2011


I have been developing a model in ADMB using the "standard" (ie non-RE) system. However, I now want to start to use this in conjunction with some random effects, but unfortunately, making the switch has thrown up some problems. First, heres a very stripped down version of my tpl file

[mpayne at oleander run]$ cat transient.tpl

  int nboxes
  !!nboxes = 14;
  vector bprodredf(1,nboxes)
  vector dbn(1,nboxes)

  //Fitting parameters
  init_number alpha
  random_effects_vector N15(1,nboxes)

  //Objective function
  objective_function_value nll

  bprodredf= 1;
  dbn= 1;

  nll = 0;

FUNCTION dvar_vector SMS(dvar_vector ninv,int t)
  //Source minus sink terms
  //Given a set of (total) nitrogen concentrations, ninv, calculate net
  //production of N at time step t
  dvar_vector bs(1,nboxes);
  //Sum the invidiual terms
  //bs += bprodredf ;        //Jprod - biological productivity
  bs -= dbn ;              //Si - Sediment burial
  return bs;

If you remove the random_effects_vector line, this builds fine under normal ADMB. However, compiling with the -r line throws the following error

[mpayne at oleander run]$ admb -r transient

*** Parsing: tpl2rem transient

*** Compiling: adcomp -r transient
g++ -c  -O3 -Wno-deprecated  -DOPT_LIB -D__GNUDOS__ -Dlinux -DUSE_LAPLACE -fpermissive -I. -I/home/mpayne/admb/include transient.cpp
transient.cpp: In member function ‘df1b2vector df1b2_parameters::SMS(df1b2vector, int)’:
transient.cpp:123: error: no match for ‘operator-=’ in ‘bs -= ((df1b2_parameters*)this)->df1b2_parameters::<anonymous>.df1b2_pre_parameters::<anonymous>.model_parameters::<anonymous>.model_data::dbn’
/home/mpayne/admb/include/df1b2fun.h:979: note: candidates are: df1b2vector& df1b2vector::operator-=(const df1b2vector&)
/home/mpayne/admb/include/df1b2fun.h:983: note:                 df1b2vector& df1b2vector::operator-=(const df1b2variable&)

Error: Failed to build executable.
[mpayne at oleander run]$

If you replace "bs -= dbn" with "bs = bs + dbn" it compiles correctly. Similar bugs are encountered if you reinstate the currently commented out the commented out line "//bs += bprodredf ;" I interpret this  as meaning that the += and -= operators have not been overloaded in ADMB-RE for this type of variable. Is this a correct interpretation, or am I doing something silly?

Best wishes,


More information about the Users mailing list