RellinSolver::RellinSolver(GraphLoc* bGrp,bool bGenereZjlDebut,bool bTimPrime):
Solver(bGrp,bGenereZjlDebut,bTimPrime){
...
}
/*!
addForbiddenVertex : force un noeud a ne pas etre un site dans la solution
*/
void Engine::addForbiddenVertex(int v1){
solver->addForbiddenVertex(v1); // on delegue ca a la classe qui va resoudre
}
class Engine{
public:
Engine(GraphLoc* bGrp,SolveType bSolveType);
~Engine();
void solve();
void genZjlDebut(){ genereZjlDebut = true; }
void addMandatoryVertex(int v1);
void addForbiddenVertex(int v1);
private:
GraphLoc* grp; // contient la topologie du reseau et les donnees du probleme
Solver* solver;
bool genereZjlDebut; // force la generation des contraintes sur les z_jl de maniere non-dynamique
bool doMonteCarlo; // determine les x_ij fractionnaires en entier avec des tirage au sort
bool verbose;
SolveType solveType;
double alpha_a;
double alpha_t;
void solveRellinSFA();
};
class RellinSolver : public Solver {
public:
RellinSolver(GraphLoc* bGrp,bool bGenereZjlDebut,bool bTimPrime);
~RellinSolver();
void solve();
vector<IloNumVarIndexe >& getxEdgeArr(){ return xEdgeArrNum;}
vector<IloNumVarIndexe >& getxVertArr(){ return xVertArrNum;}
vector<IloNumVar >& getd_j_a(){ return d_j_aNum;}
vector<IloNumVar >& getd_j_b(){ return d_j_bNum;}
vector<IloNumVar >& gete_j_a(){ return e_j_aNum;}
vector<IloNumVar >& gete_j_b(){ return e_j_bNum;}
private:
void generateConstraints();
IloNumVarIndexe* getX_ij(int i,int j);
/**** variables de decision pour le relache lineaire ******************************/
vector<IloNumVarIndexe > xEdgeArrNum;
vector<IloNumVarIndexe > xVertArrNum;
vector<IloNumVar > d_j_aNum; // nombre de port type "acces" necessaires sur chaque site
vector<IloNumVar > d_j_bNum; // nombre de port type "backbone" necessaires sur chaque site
vector<IloNumVar > e_j_aNum; // nombre de cartes type "acces" necessaires sur chaque site
vector<IloNumVar > e_j_bNum; // nombre de cartes type "backbone" necessaires sur chaque site
/**********************************************************************************/
};
class Solver {
public:
Solver(GraphLoc* bGrp,bool bGenereZjlDebut,bool bTimPrime);
virtual ~Solver();
virtual void solve();
IloEnv getenv(){return env;}
IloCplex getcplex(){return cplex;}
virtual vector<IloNumVarIndexe >& getxEdgeArr(){}
virtual vector<IloNumVarIndexe >& getxVertArr(){}
virtual vector<IloNumVar >& getd_j_a(){}
virtual vector<IloNumVar >& getd_j_b(){}
virtual vector<IloNumVar >& gete_j_a(){}
virtual vector<IloNumVar >& gete_j_b(){}
vector<vector<IloNumVarIndexe> >& getz_jl(){ return z_jl;}
void addMandatoryVertex(int v1);
void addForbiddenVertex(int v1);
private:
protected:
...
/**** forcer les variables de decision : interdiction et obligation **************/
vector<int > mandatoryVertex; // liste des noeuds qui _doivent_ etre des sites
vector<int > forbiddenVertex; // liste des noeuds interdits pour devenir des sites
/**********************************************************************************/
};