#ifndef COPTIMIZER_H #define COPTIMIZER_H #include #include #include #include #include class CGraphe; class CDualCplexScenario; class CPlan; class CBenderCplex; /** @author Antoine Rozenknop */ class COptimizer{ public: COptimizer( bool multithreading = false ); ~COptimizer(); // lancement de l'optimisation // les paramètres sont dans les classes statiques CParams et CInstance void start(); void generation_colonnes(scenario_t s, std::vector > dates_ref); void afficher_dates_moyennes_par_scenario_dw(scenario_t); void mettre_a_jour_dates_moyennes_globales_dw(std::vector> &); void afficher_dates_moyennes_et_ref_bender(std::vector> dates_moy, std::vector> dates_ref); std::vector & u_initial() const; void creer_colonnes_multithread(); void ajoute_colonne(CGraphe * graphe); void suppression_colonnes(std::vector & graphes, time_t & maintenant) ; euros produit_solution( std::vector & graphes, time_t & maintenant, std::vector & plans, bool sur_disque=false, int passes = -1 ); euros produit_meilleure_solution( std::vector & graphes, time_t & maintenant, std::vector & plans, bool sur_disque=false ); int m_passe_benders ; bool multithread ; time_t maintenant ; time_t pourcentage_de_temps_1 ; time_t pourcentage_de_temps_2 ; time_t duree_cplex ; time_t duree_filtre_aval ; time_t heure_debut_passe ; time_t duree_passe_precedente ; time_t delta_duree_passe ; time_t debut_optimization ; time_t fin_creation_graphe ; clock_t temps1 ; clock_t temps2 ; double coeff_selecteur ; double coeff_recharges ; double coeff_scenarios ; double prev_selecteur ; double prev_recharges ; double prev_scenarios ; std::vector graphes ; euros m_cout_solution ; std::set m_plans_solution ; size_t m_prochaine_suppression ; std::vector u; std::vector lambda; CDualCplexScenario * m_dualCalc ; std::vector m_cr ; // coûts réduits par cplex CBenderCplex * m_bender; // verbosité et calculs des temps void verbose_temps_graphes() ; void verbose_debut_passe() ; void verbose_avant_dual_ascent() ; void verbose_apres_dual_ascent(std::vector new_u) ; void verbose_avant_viterbi() ; void verbose_avant_creer_colonnes() ; void verbose_apres_creer_colonnes() ; void log_daniel_txt() ; bool m_cplex_internal_silent ; bool m_duals_silent ; bool m_cplex_writeToFile ; // contrôle du comportement void calcule_temps_fin_passe() ; bool prepare_strategie() ; // variables contrôlant le comportement bool strategie_rejete_couts_reduits_positifs ; bool strategie_accepte_plan_existant ; bool strategie_dual_ascent ; bool strategie_utilise_contraintes_de_cliques ; bool strategie_stop ; size_t nb_rejets_couts_positifs ; size_t nb_rejets_existants ; int nb_colonnes_cout_non_positif; // variables pour sortie log Daniel.txt double _LBvalue ; // ok double _MIPvalue ; double _MinFiltreAvalPhase1Value ; double _FinalValue ; size_t _nbTotalIter ; size_t m_dw_passes; // size_t _nbIterToLB ; size_t _nbPlans ; // ok size_t _nbContraintesClique ; // ok }; #endif