00001
00020 #ifndef _CMAESBOUND_H
00021
00022 #define _CMAESBOUND_H 1
00023
00024 #include <realea/common/define.h>
00025 #include <realea/common/domain.h>
00026 #include "newutil.h"
00027
00028 namespace realea {
00029
00030 class IEvalReal {
00031 public:
00032 virtual double eval(Real *sol, unsigned n)=0;
00033 virtual ~IEvalReal(void) {}
00034 };
00035
00036
00037 namespace internal {
00038
00039
00040
00041
00047 class CMAESBound {
00048 public:
00049
00050
00051
00052
00053
00054 CMAESBound(IEvalReal *eval, DomainRealPtr domain);
00055
00064 void setParam(int lambda, double mueff, ColumnVector &sigma, MyMatrix &C);
00065
00083 void evalSols(ColumnVector &xmean, MyMatrix &arx, MyMatrix &arxvalid, RowVector &fitness_raw, RowVector &fitness_sel);
00084
00085 private:
00086 IEvalReal *m_eval;
00087
00088 DomainRealPtr m_domain;
00097 bool m_avanzed;
00098
00099 unsigned m_ndim;
00100
00101 bool m_isactive;
00102
00106 ColumnVector m_sigma;
00110 int m_lambda;
00111
00115 double m_mueff;
00116
00120 ColumnVector m_diagC;
00121 private:
00125 ColumnVector m_scale;
00126
00130 ColumnVector m_weights;
00131
00135 queue<Real> m_dfithist;
00136
00140 unsigned int m_dfithist_size;
00141
00143 int m_validfitval;
00144 bool m_iniphase;
00145
00146
00147 unsigned int m_numapplied;
00148 };
00149
00150 }
00151
00152 }
00153
00154 #endif