#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 coeff_t CInstance::m_epsilon(0) ; // 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 ; CConstraint * CInstance::constraint(constraint_t type, size_t index) { switch (type) { case 14 : return &m_constraints14[index]; case 15 : return &m_constraints15[index]; case 16 : return &m_constraints16[index]; case 17 : return &m_constraints17[index]; case 18 : return &m_constraints18[index]; case 19 : return &m_constraints19[index]; case 20 : return &m_constraints20[index]; case 21 : return &m_constraints21[index]; default : throw string("Type de contrainte inconnu"); } } void CInstance::lire( const CParams & params ) { m_params = params ; instanceNs::input_stream.open((string("./")+m_params.getInstanceName()).c_str()); if (instanceNs::input_stream.fail()) throw string("ouverture impossible de ") + getenv("PWD") + "/" +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);*/ m_DEM = vector< vector > (m_S, vector (m_T, (kW) 0)); m_EDEM = vector< vector > (m_S, vector(m_T, (kWh)0)); for (vector >::iterator it=m_DEM.begin(); it!=m_DEM.end(); it++) { lire_liste("demand", *it); } { vector > ::iterator itd ; vector >::iterator ite ; for (itd=m_DEM.begin(), ite=m_EDEM.begin(); itd!=m_DEM.end(); itd++,ite++) { for (timestep_t t=(timestep_t)0; t("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