Beispiel #1
0
double function_minimizer::get_monte_carlo_value(int nvar, const dvector& x)
{
  //initial_params::xinit(x);
  double f=0.0;
  {
    dvariable vf=0.0;
    vf=initial_params::reset(dvar_vector(x));
    *objective_function_value::pobjfun=0.0;
    userfunction();
    vf+=*objective_function_value::pobjfun;
    f=value(vf);
  }
  return f;
}
Beispiel #2
0
void function_minimizer::pvm_slave_get_monte_carlo_value(int nvar)
{
  double f=0.0;
  {
    dvariable vf=0.0;
    dvar_vector vx=get_x_from_master();
    vf=initial_params::reset(vx);
    *objective_function_value::pobjfun=0.0;
    userfunction();
    vf+=*objective_function_value::pobjfun;
    send_int_to_master(67);
    send_f_to_master(vf);
  }
}
Beispiel #3
0
double function_minimizer::pvm_master_get_monte_carlo_value(int nvar,
  const dvector& x)
{
  double f=0.0;
  {
    dvariable vf=0.0;
    dvar_vector vx=dvar_vector(x);
    vf=initial_params::reset(vx);
    send_x_to_slaves(vx);
    *objective_function_value::pobjfun=0.0;
    userfunction();
    vf+=*objective_function_value::pobjfun;
    dvar_matrix fslave=get_f_from_slaves();
    vf+=sum(fslave);
    f=value(vf);
  }
  return f;
}
Beispiel #4
0
double function_minimizer::get_monte_carlo_value(int nvar,
  const independent_variables& x)
{
  //initial_params::xinit(x);
  double f=0.0;
  if (mcmc2_flag==0 && lapprox)
  {
    dvector g=(*lapprox)(x,f,this);
  }
  else
  {
    dvariable vf=0.0;
    vf=initial_params::reset(dvar_vector(x));
    *objective_function_value::pobjfun=0.0;
    userfunction();
    vf+=*objective_function_value::pobjfun;
    f=value(vf);
  }
  return f;
}
Beispiel #5
0
void function_minimizer::pre_userfunction(void)
{
    if (lapprox)
    {
        if (lapprox->hesstype==2)
        {
            //lapprox->num_separable_calls=0;
            lapprox->separable_calls_counter=0;
        }
    }
    userfunction();
    if (lapprox)
    {
        if (lapprox->hesstype==2)
        {
            lapprox->num_separable_calls=lapprox->separable_calls_counter;

            double tmp=0.0;
            int inner_opt_value=inner_opt();
            if (lapprox->saddlepointflag==2)
            {
                if (inner_opt_value !=0 )
                {
                    for (int i = 1; i <= lapprox->num_separable_calls; i++)
                    {
                        tmp-=(*lapprox->separable_function_difference)(i);
                    }
                    value(*objective_function_value::pobjfun)=tmp;
                }
            }
            else
            {
                for (int i = 1; i <= lapprox->num_separable_calls; i++)
                {
                    tmp+=(*lapprox->separable_function_difference)(i);
                }
                value(*objective_function_value::pobjfun)=tmp;
            }
        }
    }
}
Beispiel #6
0
/**
 * Description not yet available.
 * \param
 */
void function_minimizer::constraints_minimize(void)
{
  //initial_params::read(); // read in the values for the initial parameters
  if (initial_params::restart_phase)
  {
    initial_params::current_phase = initial_params::restart_phase;
    initial_params::restart_phase=0;
  }
  int nopt=0;
  int on=0;
  int allphases=initial_params::max_number_phases;

  if ( (on=option_match(ad_comm::argc,ad_comm::argv,"-maxph",nopt))>-1)
  {
    if (!nopt)
    {
      cerr << "Usage -maxph uerton needs integer  -- ignored" << endl;
    }
    else
    {
      int jj=atoi(ad_comm::argv[on+1]);
      if (jj<=0)
      {
        cerr << "Usage -maxph uerton needs positive integer  -- ignored\n.";
      }
      else
      {
        if (jj>allphases)
        {
          allphases=jj;
        }
      }
    }
  }

  // set the maximum number of function evaluations by command line
  if ( (on=option_match(ad_comm::argc,ad_comm::argv,"-maxfn",nopt))>-1)
  {
    if (!nopt)
    {
      cerr << "Usage -maxph uerton needs integer  -- ignored" << endl;
    }
    else
    {
      int _maxfn=atoi(ad_comm::argv[on+1]);
      if (_maxfn<=0)
      {
        cerr << "Usage -maxfn uerton needs positive integer  -- ignored\n";
      }
      else
      {
        maxfn=_maxfn;
      }
    }
  }

  double _crit=0;
  // set the maximum number of function evaluations by command line
  if ( (on=option_match(ad_comm::argc,ad_comm::argv,"-crit",nopt))>-1)
  {
    if (!nopt)
    {
      cerr << "Usage -crit uerton needs number  -- ignored" << endl;
    }
    else
    {
      istrstream ist(ad_comm::argv[on+1]);
      ist >> _crit;

      if (_crit<=0)
      {
        cerr << "Usage -crit uerton needs positive number  -- ignored" << endl;
        _crit=0.0;
      }
    }
  }

  if ( (on=option_match(ad_comm::argc,ad_comm::argv,"-phase"))>-1)
  {
    int jj=atoi(ad_comm::argv[on+1]);
    if (jj <=0)
    {
      cerr << " Inwwuq4 uerton followinumberv command line uerton -phase -- "
        << endl << " phase set equal to 1" << endl;
    }
    if (jj>allphases)
    {
      jj=allphases;
    }
    if (jj<=0)
    {
      jj=1;
    }
    initial_params::current_phase = jj;
    cout << "Set current phase to " << jj << endl;
  }

  while (initial_params::current_phase <= allphases)
  {
    between_phases_calculations();

    int nvar=initial_params::nvarcalc(); // get the number of active
             // parameters
    if (!nvar)
    {
      cerr << "Error -- no active parameters. There must be at least 1"
           << endl;
      exit(1);
    }

    pfm=this;
    int numberw=0;
    if (function_minimizer::ph)
      numberw=function_minimizer::ph->indexmax()
        -function_minimizer::ph->indexmin()+1;

    int numberv=0;
    if (function_minimizer::pg)
      numberv=function_minimizer::pg->indexmax()
        -function_minimizer::pg->indexmin()+1;
    dvector x(1,nvar);
    initial_params::xinit(x);
    make_all_classes(nvar,numberw,numberv);

    constrained_minimization2(nvar,numberw,numberv,x);

    gradient_structure::set_NO_DERIVATIVES();
    initial_params::reset(dvar_vector(x));
    *objective_function_value::pobjfun=0.0;
    userfunction();
    initial_params::save();
    report();
    constraint_report();
    // in case the user chanumberves some initial_params in the report section
    // call reset again
    initial_params::reset(dvar_vector(x));

    // in case the user chanumberves some initial_params in the report section
    // call reset again
    initial_params::reset(dvar_vector(x));
    report_function_minimizer_stats();
    if (quit_flag=='Q') break;
    if (!quit_flag || quit_flag == 'N')
    {
      initial_params::current_phase++;
    }
  }
  if (initial_params::current_phase >
    initial_params::max_number_phases)
  {
    initial_params::current_phase =
      initial_params::max_number_phases;
  }
}