## Description

Class for local optimization with the cheap method of gradient and bisection.

#include <ChSolvmin.h>

## Public Member Functions

virtual bool DoOptimize () override
This function computes the optimal xv[]. More...

Public Member Functions inherited from chrono::ChOptimizer
ChOptimizer (const ChOptimizer &other)

virtual void SetObjective (ChFx *mformula)
Sets the objective function to maximize.

virtual ChFxGetObjective () const

Sets the objective function gradient (not mandatory, because if not set, the default bacward differentiation is used).

virtual void SetNumOfVars (int mv)
Set the number of optimization variables. More...

virtual int GetNumOfVars () const
Returns the number of optimization variables.

double * GetXv () const

double * GetXv_sup () const

double * GetXv_inf () const

void SetXv (double *mx)

void SetXv_sup (double *mx)

void SetXv_inf (double *mx)

double Eval_fx (double x[])
Returns the value of the functional, for given state of variables and with the given "database" multibody system. More...

double Eval_fx (const ChVectorDynamic<> &x)

void Eval_grad (double x[], double gr[])
Computes the gradient of objective function, for given state of variables. More...

void Eval_grad (const ChVectorDynamic<> &x, ChVectorDynamic<> &gr)

virtual bool PreOptimize ()
Performs the optimization of the ChSystem pointed by "database" (or whatever object which can evaluate the string "function" and the "optvarlist") using the current parameters. More...

virtual bool PostOptimize ()
Finalization and cleanup.

virtual bool Optimize ()
Does the three steps in sequence PreOptimize, DoOptimize, PostOptimize. More...

void DoBreakCheck ()
Each break_cycles number of times this fx is called, the function break_funct() is evaluated (if any) and if positive, the variable user_break becomes true.

## Public Attributes

double initial_step
def = 1; initial trial step size

double arg_tol
argument rel.error, def 1.e-6

double fun_tol
function rel error, def 1.e-7

int maxevaluations
max number of fx evaluations, def 800;

max number of gradient evaluations, def 50;

int maxdilationsteps
max number of 'exploring' steps in forward gradient direction (def 8);

int maxbisections
number of bisections in climbing interval, before recomputing gradient (def 10);

double dilation
space dilation coeff, def. 2

bool do_conjugate
if true, corrects the gradient by conjugate method (default= off)

Public Attributes inherited from chrono::ChOptimizer
bool minimize
default = false; just maximize

default = 1.e-12; step size for evaluation of gradient

double opt_fx
best resulting value of objective function

char err_message [200]
the ok/warning/error messages are written here

int error_code

long fx_evaluations
number of function evaluations

int(* break_funct )()
if not null, this function is called each 'break_cycles' evaluations

int break_cycles
how many fx evaluations per check

int user_break
if break_funct() reported true, this flag is ON, and optimizers should exit all cycles

int break_cyclecounter
internal

Protected Attributes inherited from chrono::ChOptimizer
ChFxafunction
the function to be maximized

the gradient of the function to be maximized, or null for default BDF.

int C_vars
number of input variables

double * xv
Vector of variables, also 1st approximation.

double * xv_sup
These are the hi/lo limits for the variables,.

double * xv_inf
these are not used by all optimizer, and can be NULL for gradient, but needed for genetic.