#include "cdualcplexdiagsthermiques.h" #include #include #include CDualCplexDiagsThermiques::CDualCplexDiagsThermiques(bool internal_silent, bool silent, bool writeToFile) : CDualCplexUneColonneThermique(internal_silent, silent, writeToFile) { } CDualCplexDiagsThermiques::~CDualCplexDiagsThermiques() { } void CDualCplexDiagsThermiques::ajoute_thermiques() { // définition des zones m_cplex->addLigne( "production>=demande", H()); m_cplex->addColonne( "production thermique min", J()); for (powerplants1_t j; jaddColonne( "production thermique plus "+(int)j, H() ); m_cplex->addLigne ( "liant colonne thermique plus "+(int) j, H()-(wlen_t)1 ); } m_cplex->addLigne( "unicité colonnes nucléaires", I()); // fonction objectif // coeff: coût de la production thermique unitaire par semaine // variables associées : énergie produite, continue (entre pmin et pmax) m_cplex->setColonne( "production thermique min" ); for (powerplants1_t j; jaddToObj( j, 1, 1, CPlexModel::Continuous, coutTherm.v ); } for (powerplants1_t j; jsetColonne( "production thermique plus "+(int)j ); for (week_t h; haddToObj( h, 0, 1, CPlexModel::Continuous, (C(j,h) * (EMAX(j,h)-EMIN(j,h))).v ); } } // remplissage de Z // satisfaction de la demande m_cplex->setLigne( "production>=demande"); // partie droite : demande, opérateur = for (week_t h=(week_t) 0; haddToRHS( h, CPlexModel::GreaterThan, EDEM(h).v ); // production des centrales thermiques par semaine (matrices identité) m_cplex->setColonne( "production thermique min" ); for (powerplants1_t j; jaddToZ( h, j, EMIN(j,h).v ); } for (powerplants1_t j; jsetColonne( "production thermique plus "+(int)j ); for (week_t h=(week_t)0; haddToZ( h, h, (EMAX(j,h)-EMIN(j,h)).v ); } // liant diagonale thermique for (powerplants1_t j; jsetLigne( "liant colonne thermique plus "+(int)j ); m_cplex->setColonne( "production thermique plus "+(int)j ); for (week_t h=(week_t)0; haddToZ( h, 0, 1 ); m_cplex->addToZ( h, h+(wlen_t)1, -1 ); m_cplex->addToRHS( h, CPlexModel::Equals, 0 ); } } // unicité des colonnes nucléaires m_cplex->setLigne( "unicité colonnes nucléaires" ); for (powerplants2_t i; iaddToRHS( i, CPlexModel::Equals, 1 ); } }