Skip to content
Snippets Groups Projects
LearningSequence.cpp 1.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * DESCRIPTION OF THE FILE
     *
     * @author Michal Kravčenko
     * @date 19.2.19 -
     */
    
    #include "LearningSequence.h"
    
    #include "../message.h"
    
    Martin Beseda's avatar
    Martin Beseda committed
        LearningSequence::LearningSequence(double tolerance,
                                           int max_n_cycles) {
    
            this->tol                  = tolerance;
    
        LearningSequence::~LearningSequence() = default;
    
        void LearningSequence::add_learning_method(LearningMethod *method) {
    
    Martin Beseda's avatar
    Martin Beseda committed
            this->learning_sequence.push_back(method);
    
    Martin Beseda's avatar
    Martin Beseda committed
        void LearningSequence::optimize(lib4neuro::ErrorFunction& ef,
                                        std::ofstream* ofs) {
    
            this->optimal_parameters = ef.get_parameters();
    
            int    mcycles        = this->max_number_of_cycles, cycle_idx = 0;
    
            std::vector<double> params;
    
    Martin Beseda's avatar
    Martin Beseda committed
            while (error > this->tol && mcycles != 0) {
    
    Martin Beseda's avatar
    Martin Beseda committed
                for (auto m: this->learning_sequence) {
                    m->optimize(ef,
                                ofs);
    
                    //TODO do NOT copy vectors if not needed
                    params = *m->get_parameters();
    
                    error  = ef.eval(&params);
    
    Martin Beseda's avatar
    Martin Beseda committed
                    if (error < the_best_error) {
    
                        this->optimal_parameters = ef.get_parameters();
    
    Martin Beseda's avatar
    Martin Beseda committed
                    if (error <= this->tol) {
    
                        ef.set_parameters(this->optimal_parameters);
    
    Martin Beseda's avatar
    Martin Beseda committed
                COUT_DEBUG("Cycle: " << cycle_idx << ", the lowest error: " << the_best_error << std::endl);
    
            ef.set_parameters(this->optimal_parameters);