Go to the documentation of this file.
23 #ifndef O2SCL_DIFF_EVO_ADAPT_H
24 #define O2SCL_DIFF_EVO_ADAPT_H
33 #include <o2scl/rng_gsl.h>
34 #include <o2scl/mm_funct.h>
36 #include <o2scl/diff_evo.h>
38 #ifndef DOXYGEN_NO_O2NS
83 virtual int mmin(
size_t nvar, vec_t &x0,
double &fmin,
97 for (
size_t x = 0; x < this->
pop_size; ++x) {
100 for (
size_t i = 0; i < nvar; ++i) {
104 fmin_x=func(nvar,agent_x);
108 for (
size_t i = 0; i<nvar; ++i) {
111 }
else if (fmin_x<fmin) {
113 for (
size_t i = 0; i<nvar; ++i) {
121 while (gen < this->
ntrial && nconverged <= ((
int)this->
nconv)) {
126 for (
size_t x = 0; x < this->
pop_size; ++x) {
128 std::vector<int> others;
131 vec_t agent_x, agent_y;
132 agent_x.resize(nvar);
133 agent_y.resize(nvar);
134 for (
size_t i = 0; i < nvar; ++i) {
158 size_t r = floor(this->
gr.
random()*nvar);
160 for (
size_t i = 0; i < nvar; ++i) {
165 if (i == r || ri < cr_x) {
166 agent_y[i] = this->
population[others[0]*nvar+i] +
176 fmin_y=func(nvar,agent_y);
177 if (fmin_y<
fmins[x]) {
178 for (
size_t i = 0; i < nvar; ++i) {
188 for (
size_t i = 0; i<nvar; ++i) {
204 std::string str=
"Exceeded maximum number of iterations ("+
205 itos(this->
ntrial)+
") in diff_evo_adapt::mmin().";
214 int iter, vec_t &best_fit) {
216 std::cout <<
"Generation " << iter << std::endl;
217 std::cout <<
"Fmin: " << fmin << std::endl;
218 std::cout <<
"Parameters: ";
219 for (
size_t i=0; i<nvar; ++i) {
220 std::cout << best_fit[i] <<
" ";
222 std::cout << std::endl;
223 std::cout <<
"Population: " << std::endl;
224 for (
size_t i=0; i<this->
pop_size; ++i ) {
225 std::cout << i <<
": ";
226 for (
size_t j = 0; j<nvar; ++j ) {
227 std::cout << this->
population[i*nvar+j] <<
" ";
229 std::cout <<
"fmin: " <<
fmins[i] <<
231 " CR: " <<
variables[i*2+1] << std::endl;
241 #ifndef DOXYGEN_INTERNAL
256 variables.resize(2*this->pop_size);
258 for(
size_t i=0;i<this->
pop_size;i++) {
259 for(
size_t j=0;j<nvar;j++) {
260 double stepj=this->
step[j%this->
step.size()];
263 variables[i*2] = fl + this->
gr.
random()*fr;
267 for (
size_t i = 0; i < this->
pop_size; ++i) {
270 for (
size_t j = 0; j < nvar; ++j) {
291 #ifndef DOXYGEN_NO_O2NS
size_t pop_size
Population size (default 0)
Multidimensional minimization by the differential evolution method.
The main O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl names...
int ntrial
Maximum number of iterations.
int last_ntrial
The number of iterations for in the most recent minimization.
@ exc_emaxiter
exceeded max number of iterations
virtual int mmin(size_t nvar, vec_t &x0, double &fmin, func_t &func)
Calculate the minimum fmin of func w.r.t the array x of size nvar.
boost::numeric::ublas::vector< double > population
Vector containing the population.
vec_t variables
Vector containing the tunable variable F and CR.
double tau_1
Probability of adjusting f (default 0.1)
double random()
Return a random number in .
virtual int initialize_population(size_t nvar, vec_t &x0)
Initialize a population of random agents.
virtual std::vector< int > pick_unique_agents(int nr, size_t x)
Pick number of unique agent id's.
double tau_2
Probability of adjusting cr (default 0.1)
std::function< double(size_t, const boost::numeric::ublas::vector< double > &)> multi_funct
Multi-dimensional function typedef in src/base/multi_funct.h.
std::vector< double > step
Step size for initialization.
size_t nconv
The number of generations without a better fit before we assume that the algorithm has converged (def...
int verbose
Output control.
#define O2SCL_CONV_RET(d, n, b)
Set a "convergence" error and return the error value.
std::string itos(int x)
Convert an integer to a string.
std::function< int(size_t, const boost::numeric::ublas::vector< double > &, boost::numeric::ublas::vector< double > &) > mm_funct
Array of multi-dimensional functions typedef in src/base/mm_funct.h.
mm_funct * rand_init_funct
Function that is used to produce random init variables.
rng_gsl gr
Random number generator.
Multidimensional minimization by the differential evolution method.
virtual void print_iter(size_t nvar, double fmin, int iter, vec_t &best_fit)
Print out iteration information.
ubvector fmins
Vector that keeps track of fmins values.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).