#ifndef CPLEX_H #define CPLEX_H #include "../tuning.h" #include "../optimizer/DA.h" #include "../optimizer/clique.h" #include "../instance/cinstancereduite.h" #include "../instance/cinstance.h" #ifndef NO_CPLEX #include #endif #include #include #include #include /* Bring in the declarations for the string functions */ #include class DualAscent; class Cplex{ // protected: public: int nbColonnes; // nombre de colnones int nbCentraleNucl; week_t nbSemaines; double* cl; //cout des colonnes. Taille = nb colonnes double* ct; //cout unitaire prod thermique * Duration du pas de temps * nombre de timestep par semaines. Taille = nb semaines double** dlt; //matrice A ; partie production. Taille = nbColonnes x nbSemaines double* dt; //Demande (vecteur b) ; partie production. Taille = nb semaines double* Mint; //Prod thermique min. Taille = nb semaines double* Maxt; // prod thermique max. Taille = nb semaines int** affect; // matrice A ; partie affectation. Taille = nbColonnes x nb centrales nucl int nbClique; // Nombre de contraintes de clique double** clique; // Contraintes de clique. Taille = nbColonnes x nbCliques double * bc; // Second membre des contraintes de clique. Taille = nbClique //mclique : vector = coefficients ; int = right hand side (plus faible valeur en cas de contrainte multiple) std::map, double> m_cliques ; void ajoute_contraintes(constraint_t type_1=C14, constraint_t type_2=C21); void contrainte14 (); void contrainte15 (); void contrainte16 (); void contrainte17 (); void contrainte18 (); void contrainte19 (); void contrainte20 (); void contrainte21 (); /** * Vérifie si la contrainte existe déjà. * Si oui, garde le membre de droite le plus restrictif * @param mclique Contraintes précédentes * @param coefs Membre de gauche * @param rhs Membre de droite */ void ajoutContrainte(std::vector& coefs, double rhs); public: Cplex(int nbCol, week_t nbSem); Cplex(DualAscent& da); std::vector resolution(); int setproblemdata (char **probname_p, int *numcols_p, int *numrows_p, int *objsen_p, double **obj_p, double **rhs_p, char **sense_p, int **matbeg_p, int **matcnt_p, int **matind_p, double **matval_p, double **lb_p, double **ub_p, char **ctype_p); void free_and_null (char **ptr); int NUMNucl; int NUMTps; int NUMAff; int NUMCliq; int NUMROWS; int NUMCOLS; int NUMNZ; ~Cplex(); }; #endif