#ifndef SEARCHHEURISTIC_H #define SEARCHHEURISTIC_H #include #include "problems/MasterMind.h" struct Point { Point() : Point(0,0) {}; Point(int c, double v) : nb_calls{c}, value{v} {}; int nb_calls; double value; }; struct Candidate { Candidate(int* s, int v) { sol = s; value = v; } int* sol; int value; }; void swap_candidates(Candidate** tab, unsigned int i, unsigned int j); struct { bool operator()(Candidate* a, Candidate* b) const { return a->value > b->value; } } cmp_candidates; struct Result { Result(int* s, int v, int c, bool a=false) { solution = s; v_solution = v; nb_calls = c; has_been_aborted = a; } int* solution; int v_solution; int nb_calls; bool has_been_aborted; }; class SearchHeuristic { public: SearchHeuristic(); virtual Result run() = 0; MasterMind* get_problem(); void set_problem(MasterMind* problem); void set_abortion_limit(double l); void set_record(std::vector* m_record_tab); bool is_recording(); void clear_record(); void record(int nb_calls, double value); std::vector* get_record(); void set_objective(double objective); virtual ~SearchHeuristic(); protected: MasterMind* m_problem; double m_abortion_limit; std::vector* m_record; double m_objective; // 1=100% of the result private: }; #endif // SEARCHHEURISTIC_H