#include "cbendercplex.h" #include "cplexmutable.h" #include "cinstance.h" #include "cinstancereduite.h" #include "cplan.h" #include "cdualcplexscenario.h" #include using namespace std; CBenderCplex::CBenderCplex(bool internal_silent, bool silent, bool writeToFile) { m_cplex = new CPlexMutable( "Benders", CPlexModel::Minimisation, CPlexModel::Linear, internal_silent, silent, writeToFile, writeToFile ); // dates de références initiales réparties sur la période totale for (powerplants2_t i; i(0)); for (campaign_t k; kaddColonne( "phi", S()); for (powerplants2_t i; iaddColonne( string("abarre_i_")+i+"_k_", K()); m_cplex->setColonne( string("abarre_i_")+i+"_k_"); for (campaign_t k; kaddToObj(k, std::min(type2(i).TO(k), H()), type2(i).TA(k), CPlexModel::Continuous, 0); } } m_cplex->setColonne("phi"); for (scenario_t s; saddToObj(s, 0, INFINI, CPlexModel::Continuous, 1.0/S()); } void CBenderCplex::ajouteCoupe(scenario_t s, CDualCplexScenario* cplex) { m_cplex->addLigne( string("passe_")+m_passe+"_s"+s, 1); m_cplex->setLigne( string("passe_")+m_passe+"_s"+s); m_cplex->setColonne("phi"); m_cplex->addToZ(0,s,1); double z_moins_xi_atruc = cplex->getObjectiveValue(); for (powerplants2_t i; isetColonne(string("abarre_i_")+i+"_k_"); pair,vector> xis = cplex->getDualsDates(i); for (campaign_t k; kaddToZ(0, k, -xi); cout << "i=" << i << ", k=" << k << ", abarétoile=" << m_dates_ref[i][k] << ", xi+=" << xis.first[k] << ", xi-=" << xis.second[k] << ", z=" << cplex->getObjectiveValue() << ", z_moins_xi_atruc=" << z_moins_xi_atruc << endl; } } m_cplex->addToRHS(0, CPlexModel::GreaterThan, z_moins_xi_atruc); } double CBenderCplex::resolution() { ++ m_passe; double f = m_cplex->resolution(); for (powerplants2_t i; i ai = m_cplex->getResult(string("abarre_i_")+i+"_k_"); for (campaign_t k; k