00001 // This file is part of the imaging2 class library. 00002 // 00003 // University of Innsbruck, Infmath Imaging, 2009. 00004 // http://infmath.uibk.ac.at 00005 // 00006 // All rights reserved. 00007 00008 00009 #ifndef MINIMIZE_COVARIANCEMATRIXADAPTATION_H 00010 #define MINIMIZE_COVARIANCEMATRIXADAPTATION_H 00011 00012 #include <minimize/EnergyInterface.hpp> 00013 #include <minimize/MinimizerInterface.hpp> 00014 00015 namespace imaging 00016 { 00022 class CovarianceMatrixAdaptation : public MinimizerInterface 00023 { 00024 std::size_t _lambda; 00025 float_t _sigma; 00026 std::size_t _mu; 00027 ublas::vector<float_t> _w; 00028 float_t _c_sigma; 00029 float_t _d_sigma; 00030 float_t _mu_eff; 00031 float_t _mu_cov; 00032 float_t _c_cov; 00033 float_t _c_c; 00034 std::size_t _n; 00035 ublas::matrix<float_t> _C; 00036 ublas::vector<float_t> _p_sigma; 00037 ublas::vector<float_t> _p_c; 00038 bool _terminated; 00039 00040 EnergyInterface & _energy; 00041 00042 float_t _min_update; 00043 00044 void init(float_t sigma, float_t min_update, std::size_t lambda); 00045 00046 public: 00048 CovarianceMatrixAdaptation(EnergyInterface & energy, float_t sigma, float_t min_update, std::size_t lambda); 00049 00051 CovarianceMatrixAdaptation(EnergyInterface & energy, float_t sigma, float_t min_update); 00052 00053 bool minimize(size_t n_max_steps, size_t & n_actual_steps); 00054 }; 00055 00056 } 00057 00058 #endif