Prev | Next |
f.optimize()
f.optimize(options)
flag = f.exceed_collision_limit()
f.optimize
procedure reduces the number of operations,
and thereby the time and the memory, required to
compute function and derivative values.
f
has prototype
ADFun<Base> f
const std::string& options
The default for
options
is the empty string.
If it is present, it must consist of one or more of the options below
separated by a single space character.
optimize
function can create conditional skip operators
to improve the speed of conditional expressions; see
optimize
.
If the sub-string no_conditional_skip
appears in
options
,
conditional skip operations are not be generated.
This may make the optimize routine use significantly less memory
and take less time to optimize
f
.
If conditional skip operations are generated,
it may save a significant amount of time when
using
f
for forward
or reverse
mode calculations;
see number_skip
.
no_compare_op
appears in
options
,
comparison operators will be removed from the optimized function.
These operators are necessary for the
compare_change
functions to be meaningful.
On the other hand, they are not necessary, and take extra time,
when the compare_change functions are not used.
no_compare_op
appears in
options
,
PrintFor
operations will be removed form the optimized function.
These operators are useful for reporting problems evaluating derivatives
at independent variable values different from those used to record a function.
value
is a sequence of decimal digits,
the optimizer's hash code collision limit will be set to
value
.
When the collision limit is reached, the expressions with that hash code
are removed and a new lists of expressions with that has code is started.
The larger
value
, the more identical expressions the optimizer
can recognize, but the slower the optimizer may run.
The default for
value
is 10
.
f
, it will require more memory
and time than required after the optimization procedure.
In addition, it will need to be redone.
For this reason, it is more efficient to use
ADFun<Base> f;
f.Dependent(x, y);
f.optimize();
instead of
ADFun<Base> f(x, y)
f.optimize();
See the discussion about
sequence constructors
.
onetape
is true and
optimize
is true,
the optimized tape will be reused many times.
If
onetape
is false and
optimize
is true,
the tape will be re-optimized for each test.
u
affect the dependent variables of
f
.
For each atomic operation, the current
atomic_sparsity
setting is used
to determine if pack_sparsity_enum
, bool_sparsity_enum
,
or set_sparsity_enum
is used to determine dependency relations
between argument and result variables.
u[i]
does not affect the value of
the dependent variables for
f
,
the value of
u[i]
is set to nan
.
f
and the results are checked to see that they are
the same as before.
If they are not the same, the
ErrorHandler
is called with a known error message
related to
f.optimize()
.
flag
is true (false),
the previous call to
f.optimize
exceed the
collision_limit
.
optimize_twice.cpp | Optimizing Twice: Example and Test |
optimize_forward_active.cpp | Optimize Forward Activity Analysis: Example and Test |
optimize_reverse_active.cpp | Optimize Reverse Activity Analysis: Example and Test |
optimize_compare_op.cpp | Optimize Comparison Operators: Example and Test |
optimize_print_for.cpp | Optimize Print Forward Operators: Example and Test |
optimize_conditional_skip.cpp | Optimize Conditional Expressions: Example and Test |
optimize_nest_conditional.cpp | Optimize Nested Conditional Expressions: Example and Test |
optimize_cumulative_sum.cpp | Optimize Cumulative Sum Operations: Example and Test |