22    std::ostream &operator<<(std::ostream &t_os, 
const PenaltyUpdate &t_penalty_update);
 
   59    std::vector<double> m_factor;
 
   60    unsigned int m_current_factor_index = 0;
 
   63    explicit Multiplicative(
double t_factor, 
bool t_normalized = 
false) : m_factor({ t_factor }), m_normalized(t_normalized) {}
 
   65    explicit Multiplicative(std::vector<double> t_factor, 
bool t_normalized = 
false) : m_factor(std::move(t_factor)), m_normalized(t_normalized) {}
 
   67    double operator()(
double t_current_penalty)
 override {
 
   68        return t_current_penalty * m_factor[m_current_factor_index];
 
   71    void operator()(std::list<ADM::Formulation::CurrentPenalty> &t_current_penalties) 
override;
 
   73    bool diversify() 
override;
 
   75    std::ostream &describe(std::ostream &t_os) 
const override;
 
 
   83    std::vector<std::unique_ptr<PenaltyUpdate>> m_penalty_updates;
 
   84    unsigned int m_current_penalty_update_index = 0;
 
   86    explicit Adaptive(
const std::vector<PenaltyUpdate*>& t_penalty_updates);
 
   90    double operator()(
double t_current_penalty)
 override {
 
   91        return m_penalty_updates[m_current_penalty_update_index]->operator()(t_current_penalty);
 
   94    void operator()(std::list<ADM::Formulation::CurrentPenalty> &t_current_penalties)
 override {
 
   95        m_penalty_updates[m_current_penalty_update_index]->operator()(t_current_penalties);
 
   98    bool diversify() 
override;
 
  100    std::ostream &describe(std::ostream &t_os) 
const override;