#include "../tuning.h" #include "cinstance.h" #include "cinstancereduite.h" #include "lecture.h" using instanceNs::lire_valeur; using instanceNs::lire_liste; #include "../params/cparams.h" #include #include #include #include #include #include using namespace std; std::ifstream instanceNs::input_stream ; CParams CInstance::m_params ; /* Main Information section */ timestep_t CInstance::m_T ; // number of timesteps week_t CInstance::m_H ; // number of weeks campaign_t CInstance::m_K ; // number of campaigns scenario_t CInstance::m_S ; // number of scenarios double CInstance::m_epsilon ; // value_of_epsilon powerplants1_t CInstance::m_J ; // number of powerplants of type 1 powerplants2_t CInstance::m_I ; // number of powerplants of type 2 std::vector CInstance::m_M ; // number of constraints of type i (13 <= i <= 21) std::vector CInstance::m_D ; // durations : length of timesteps t (t <= T) std::vector > CInstance::m_DEM ; // power_demand[s][t] std::vector > CInstance::m_EDEM ; // energy_demand[s][t] /* Power plants section */ std::vector CInstance::m_types1 ; // centrales de type 1 std::vector CInstance::m_types2 ; // centrales de type 1 /* Constraints section */ std::vector CInstance::m_constraints13 ; std::vector CInstance::m_constraints14 ; std::vector CInstance::m_constraints15 ; std::vector CInstance::m_constraints16 ; std::vector CInstance::m_constraints17 ; std::vector CInstance::m_constraints18 ; std::vector CInstance::m_constraints19 ; std::vector CInstance::m_constraints20 ; std::vector CInstance::m_constraints21 ; void CInstance::lire( const CParams & params ) { m_params = params ; instanceNs::input_stream.open((string("../../data/")+m_params.getInstanceName()).c_str()); if (instanceNs::input_stream.fail()) throw string("ouverture impossible de ") + getenv("PWD") + "/../../data/" +m_params.getInstanceName(); /* lecture de la section main */ if (lire_valeur("begin")!="main") throw string("section main manquante"); m_T = (timestep_t) lire_valeur("timesteps"); m_H = (week_t) lire_valeur("weeks"); m_K = (campaign_t) lire_valeur("campaigns"); m_S = (scenario_t) lire_valeur("scenario"); m_epsilon = lire_valeur("epsilon"); m_J = (powerplants1_t) lire_valeur("powerplant1"); m_I = (powerplants2_t) lire_valeur("powerplant2"); m_M.resize(22); for (size_t c=13 ; c<=21; c++) { std::ostringstream nom; nom << "constraint" << c ; M((constraint_t)c) = lire_valeur(nom.str()); } m_D.resize(m_T); lire_liste("durations", m_D); vector proto; // curieusement, le constructeur vector(T) ne réserve pas d'espace si l'on compile en optimisé proto.resize(m_T); // sinon, on devrait faire : m_DEM=vector >(S, vector T); m_DEM.resize(m_S, proto); // qui fonctionne sans option d'optimisation m_EDEM.resize(m_S, proto); for (vector >::iterator it=m_DEM.begin(); it!=m_DEM.end(); it++) { lire_liste("demand", *it); } for (vector >::iterator itd=m_DEM.begin(), ite=m_EDEM.begin(); itd!=m_DEM.end(); itd++,ite++) { std::transform(itd->begin(),itd->end(),ite->begin(),bind1st(multiplies(),::D())); } if (lire_valeur("end")!="main") throw string("end main manquant"); /* lecture des sections powerplant de type 1 */ m_types1.resize(m_J) ; for (size_t j=0; (signed)j