ADMB Documentation  -a65f1c97
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
set.cpp
Go to the documentation of this file.
1 /*
2  * $Id$
3  *
4  * Author: David Fournier
5  * Copyright (c) 2008-2012 Regents of the University of California
6  */
11 #include <admodel.h>
12 #include "fvar.hpp"
13 #define USE_BARD_PEN
14 
19 void set_value(const prevariable& _x, const dvar_vector& v, const int& _ii)
20 {
21  int& ii = (int&) _ii;
22  prevariable& x= (prevariable&)( _x);
23  x=v(ii++);
24 }
25 
30 void set_value(const prevariable& _x,const dvar_vector& v, const int& _ii,
31  double s)
32 {
33  prevariable& x= (prevariable&)( _x);
34  int& ii=(int&)(_ii);
35  x=v(ii++)/s;
36 }
37 
42 void set_value_inv(const prevariable& x,const dvector& _v,const int& _ii,
43  double s)
44 {
45  dvector& v=(dvector&)(_v);
46  int& ii=(int&)(_ii);
47  v(ii++)=s*value(x);
48 }
49 
54 void set_value(const prevariable& _x,const dvar_vector& v,const int& _ii,
55  double fmin, double fmax,const dvariable& _fpen,double s)
56 {
57  int& ii=(int&)_ii;
58  prevariable& x=(prevariable&) _x;
59  dvariable& fpen=(dvariable&) _fpen;
60  x=boundp(v(ii++),fmin,fmax,fpen,s);
61 }
62 
67 void set_value_inv(const prevariable& x,const dvector& _v,const int& _ii,
68  double fmin, double fmax,double s)
69 {
70  dvector& v=(dvector&)(_v);
71  int& ii=(int&)(_ii);
72  v(ii++)=boundpin(x,fmin,fmax,s);
73 }
74 
79 void set_value(const prevariable& _u, const dvar_vector& x, const int& _ii,
80  const double fmin, const double fmax,const dvariable& _fpen)
81 {
82  int& ii = (int&) _ii;
83  prevariable& u= (prevariable&) _u;
84  dvariable& fpen= (dvariable&) _fpen;
86  {
87  u=boundp(x(ii++),fmin,fmax,fpen);
88  }
89  else
90  {
91  u=x(ii);
92  value(u)=boundp(value(x(ii++)),fmin,fmax);
93  double diff=fmax-fmin;
94  //t=fmin + diff*ss;
95  dvariable ss=(u-fmin)/diff;
96 # ifdef USE_BARD_PEN
97  const double l4=log(4.0);
98  double pen=.000001/diff;
99  fpen-=pen*(log(ss+1.e-40)+log((1.0-ss)+1.e-40)+l4);
100 # else
101  XXXX
102 # endif
103  }
104 }
105 
110 void set_value(const dvar_vector& x, const dvar_vector& v, const int& _ii)
111 {
112  int& ii = (int&) _ii;
113  if (!(!(x)))
114  {
115  int min=x.indexmin();
116  int max=x.indexmax();
117  for (int i=min;i<=max;i++)
118  {
119  ((dvar_vector&)x)(i)=v(ii++);
120  }
121  }
122 }
123 
128 void set_value(const dvar_vector& _x,const dvar_vector& v, const int& _ii,
129  double s)
130 {
131  dvar_vector& x=(dvar_vector&) _x;
132  int& ii = (int&) _ii;
133  if (!(!(x)))
134  {
135  int min=x.indexmin();
136  int max=x.indexmax();
137  for (int i=min;i<=max;i++)
138  {
139  x(i)=v(ii++)/s;
140  }
141  }
142 }
143 
148 void set_value(const dvar_vector& x, const dvar_vector& v, const int& _ii,
149  double fmin,double fmax,const dvariable& fpen)
150 {
151  int& ii = (int&) _ii;
152  if (!(!(x)))
153  {
154  int min=x.indexmin();
155  int max=x.indexmax();
156  for (int i=min;i<=max;i++)
157  {
158  ((dvar_vector&)(x))(i)=boundp(v(ii++),fmin,fmax,fpen);
159  }
160  }
161 }
162 //dvariable boundp(const prevariable &,double fmin,double fmax,
163 // const dvariable& fpen);
164 
169 void set_value(const dvar_vector& _x,const dvar_vector& v,const int& _ii,
170  double fmin,double fmax,const dvariable& fpen,double s)
171 {
172  dvar_vector& x=(dvar_vector&)(_x);
173  int& ii = (int&) _ii;
174  if (!(!(x)))
175  {
176  int min=x.indexmin();
177  int max=x.indexmax();
178  for (int i=min;i<=max;i++)
179  {
180  ((dvar_vector&)(x))(i)=boundp(v(ii++)/s,fmin,fmax,fpen);
181  }
182  }
183 }
184 
189 void set_value(const dvar_vector& _x,const dvar_vector& v,const int& _ii,
190  double fmin,double fmax,const dvariable& fpen,double s,const ivector& flags,
191  double off_value)
192 {
193  dvar_vector& x=(dvar_vector&)(_x);
194  int& ii = (int&) _ii;
195  if (!(!(x)))
196  {
197  int min=x.indexmin();
198  int max=x.indexmax();
199  for (int i=min;i<=max;i++)
200  {
201  if (flags(i))
202  {
203  x(i)=boundp(v(ii++)/s,fmin,fmax,fpen);
204  }
205  else
206  {
207  x(i)=off_value;
208  }
209  }
210  }
211 }
212 
217 void set_value(const dvar_matrix& x, const dvar_vector& v, const int& _ii)
218 {
219  int& ii = (int&) _ii;
220  if (!(!(x)))
221  {
222  int min=x.rowmin();
223  int max=x.rowmax();
224  for (int i=min;i<=max;i++)
225  {
226  set_value(x(i),v,ii);
227  }
228  }
229 }
230 
235 void set_value(const dvar_matrix& x,const dvar_vector& v,const int& _ii,
236  double s)
237 {
238  int& ii = (int&) _ii;
239  if (!(!(x)))
240  {
241  int min=x.rowmin();
242  int max=x.rowmax();
243  for (int i=min;i<=max;i++)
244  {
245  set_value(x(i),v,ii,s);
246  }
247  }
248 }
249 
254 void set_value(const dvar_matrix& x, const dvar_vector& v, const int& ii,
255  const double fmin, const double fmax,const dvariable& fpen)
256 {
257  if (!(!(x)))
258  {
259  int min=x.rowmin();
260  int max=x.rowmax();
261  for (int i=min;i<=max;i++)
262  {
263  set_value(x(i),v,ii,fmin,fmax,fpen);
264  }
265  }
266 }
267 
272 void set_value(const dvar_matrix& x,const dvar_vector& v, const int& ii,
273  double fmin,double fmax,const dvariable& fpen,double s)
274 {
275  if (!(!(x)))
276  {
277  int min=x.rowmin();
278  int max=x.rowmax();
279  for (int i=min;i<=max;i++)
280  {
281  set_value(x(i),v,ii,fmin,fmax,fpen,s);
282  }
283  }
284 }
285 
290 void set_value(dvar3_array& x, const dvar_vector& v, const int& ii,
291  const double fmin, const double fmax,const dvariable& fpen)
292 {
293  if (!(!(x)))
294  {
295  int min=x.slicemin();
296  int max=x.slicemax();
297  for (int i=min;i<=max;i++)
298  {
299  set_value(x(i),v,ii,fmin,fmax,fpen);
300  }
301  }
302 }
303 
309  const int& _ii, int n)
310 {
311  int mmin=x.indexmin();
312  int mmax=x.indexmax();
313  for (int i=mmin;i<=mmax;i++)
314  {
315  set_value_partial(x(i),v,_ii,n);
316  }
317 }
318 
324  const int& _ii, int n)
325 {
326  int& ii = (int&) _ii;
327  if (!(!(x)))
328  {
329  int min=x.indexmin();
330  int max=min+n-1;
331  if (max >x.indexmax())
332  {
333  cerr <<
334  "index out of range in set_value_patial(const dvar_vector&, ... "
335  << endl;
336  }
337  for (int i=min;i<=max;i++)
338  {
339  ((dvar_vector&)(x))(i)=v(ii++);
340  }
341  }
342 }
343 
349  const int& _ii, int n, const double fmin, const double fmax,
350  const dvariable& fpen)
351 {
352  int& ii = (int&) _ii;
353  if (!(!(x)))
354  {
355  int min=x.indexmin();
356  int max=min+n-1;
357  if (max >x.indexmax())
358  {
359  cerr <<
360  "index out of range in set_value_patial(const dvar_vector&, ... "
361  << endl;
362  }
363  for (int i=min;i<=max;i++)
364  {
365  ((dvar_vector&)(x))(i)=boundp(v(ii++),fmin,fmax,fpen);
366  }
367  }
368 }
369 
374 void set_value(dvar3_array& x, const dvar_vector& v, const int& ii)
375 {
376  if (!(!(x)))
377  {
378  int min=x.slicemin();
379  int max=x.slicemax();
380  for (int i=min;i<=max;i++)
381  {
382  set_value(x(i),v,ii);
383  }
384  }
385 }
static int straight_through_flag
Definition: admodel.h:839
Base class for dvariable.
Definition: fvar.hpp:1315
int rowmax(void) const
Definition: fvar.hpp:2564
int slicemin() const
Definition: fvar.hpp:4274
#define x
Vector of double precision numbers.
Definition: dvector.h:50
void fmin(double f, const independent_variables &x, const dvector &g, const int &n, const dvector &w, const dvector &h, const fmm_control &fmc)
int slicemax() const
Definition: fvar.hpp:4275
ADMB variable vector.
Definition: fvar.hpp:2172
prnstream & endl(prnstream &)
double boundpin(double x, double fmin, double fmax, double s)
Scale model variable over [-1,1]; constant objects.
Definition: boundfun.cpp:378
Array of integers(int) with indexes from index_min to indexmax.
Definition: ivector.h:50
#define min(a, b)
Definition: cbivnorm.cpp:188
void set_value_partial(const dvar_vector &x, const dvar_vector &v, const int &ii, int n)
Description not yet available.
Definition: set.cpp:323
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Description not yet available.
int rowmin(void) const
Definition: fvar.hpp:2560
Description not yet available.
Definition: fvar.hpp:4197
void set_value(const dvar_matrix &x, const dvar_vector &v, const int &_ii, double s)
Description not yet available.
Definition: set.cpp:235
void set_value_inv(const dvar_matrix &x, const dvector &v, const int &ii, double s)
Description not yet available.
Definition: setin.cpp:412
int indexmin() const
Definition: fvar.hpp:2287
int indexmax(void) const
Definition: fvar.hpp:2572
Class definition of matrix with derivitive information .
Definition: fvar.hpp:2480
dvariable boundp(const prevariable &x, double fmin, double fmax, const prevariable &_fpen, double s)
Compute penalty for exceeding bounds on parameter; variable ojbects.
Definition: boundfun.cpp:89
dvector value(const df1_one_vector &v)
Definition: df11fun.cpp:69
#define max(a, b)
Definition: cbivnorm.cpp:189
int indexmin(void) const
Definition: fvar.hpp:2568
int indexmax() const
Definition: fvar.hpp:2292
Fundamental data type for reverse mode automatic differentiation.
Definition: fvar.hpp:1518
d3_array log(const d3_array &arr3)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: d3arr2a.cpp:13