#ifndef DA_H_INCLUDED #define DA_H_INCLUDED #include #include #include #include #include #include #include #include #include "indices.h" #include "cinstance.h" #include "cinstancereduite.h" #include "cplan.h" #include "clique.h" using namespace std; class DualAscent { public : // Matrice A de taille 260 + 51 X nombre de colonnes vector< vector * > A ; double a(int i, int j) const { return (*A[i])[j];} // vecteur de cout des colonnes vector cost ; // vecteur de demande de production + affectation des colonnes vector b ; // fonction DualAscent(vector dem, powerplants2_t nb_centrales) { b = dem ; b.resize( dem.size() + nb_centrales , 1 ); double coutTherm = 0; for (week_t i=(week_t) 0;i * colonne, double cou ) { A.push_back(colonne); cost.push_back(cou); } public: void ajoutcolonne(CPlan* cplan){ Clique::ajoutcolonne(cplan, A.size()); ajoutcolonne(&cplan->m_colonne, cplan->m_cout); } void print(); void boucle(vector &, bool BorneSup, const char*x=NULL) const;// Fonction à appeler calcul des Ui Vi private: vector calculePoids() const; vector DAcalc (const vector &,vector &, const vector &) const; vector EcritureCplex(const vector &, const char *) const; double updateLambda(const vector &, vector &,const vector &, double ) const; vector sousgrad(vector &, const vector &,const vector &, const vector &,const vector &) const; // operateur binaire bool epsiqual( const double &, const double &) const; // Recherche de borne sup upper bound bool testUB () const ; double recherche_UB () const ; }; #endif // DA_H_INCLUDED