Main Page | Class Hierarchy | Class List | File List | Class Members

csproblem.h

00001 /* classe des problèmes de satisfaction de contraintes CSP*/
00003 class CSProblem : public OpProblem
00004 { public :
00005 
00006 /* nombre de contraintes */
00008   int nbconst;
00009 
00010 /* tableau des domaines : chaque domaine est un vecteur d'entiers */
00012   vector<int>* tabdomains;  
00013 /* pour chaque variable, numéro de son domaine : indice dans le tableau tabdomains */
00015   int* domains;
00016 /* tableau des connexions : pour chaque variable, vecteur des variables connectées */
00018   vector<int>* connections;
00019 /* constructeur de base */
00021   CSProblem (int nbvar, int nbconst);
00022 /* constructeur avec borne inférieure */
00024   CSProblem (int nbvar, int nbconst, int lower);
00025   ~CSProblem();
00026   void move_execution(Configuration* configuration, Move* move);
00027 /* la taille du domaine de la variable var */
00029   virtual int variable_domainsize (int var);
00030   void random_configuration(Configuration* configuration);
00031 /* une variable choisie aléatoirement */
00033   virtual int random_variable(Configuration* configuration);
00035   virtual int random_conflict_variable(Configuration* configuration);
00036 /* une valeur choisie aléatoirement, si possible distincte de val : retourne l'indice de la valeur dans le domaine */
00038   virtual int random_value(int var,int val);
00039 /* une valeur dans le domaine de la variable minimisant les conflits avec la configuration */
00042   virtual int min_conflict_value(int var,int val, Configuration * configuration);
00043 /* initialisation des domaines par défaut : un seul domaine numéro 0 pour toutes les variables */
00045   virtual void init_domains(int nbvar, int s );
00046 /* un seul domaine par défaut : entiers de 0 à s-1 */
00048   virtual void init_tabdomains(int s);
00049 /* calcul des variables en conflit : on reconstruit le vecteur des variables en conflit d'une configuration*/
00051   void compute_var_conflict(Configuration* configuration);
00052   void best_config_analysis();
00053   void best_config_write();
00054   int move_evaluation(Configuration* configuration,Move* move);
00055   void init_population (Configuration** population,int populationsize);
00056   Configuration* create_configuration();
00057   Move* create_move();
00058   void adjust_parameters(Configuration* configuration, int & maxneighbors, int & minneighbors);
00059   void next_move(Configuration* configuration, Move* move, NeighborhoodSearch* nbhs);   
00060 /* met en place les domaines et connexions d'un problème */
00062   virtual  void set_domains_connections( int* dom, vector<int>* tabledom, vector<int> * connect );
00063 /* initialisation des domaines : appel de init_domains et init_tabdomains */
00065   virtual void init_domain_tabdomain();
00066   int tabuindex(Move* move, Configuration* config);
00067   int tabuinverseindex(Move* move, Configuration* config);
00068   int nbtabuindex();
00069 };
00070 
00071 
00072 /* CSP Binaires :  ajout du tableau des  contraintes à partir de 2 variables */
00074 class BinaryCSProblem : public CSProblem
00075 { public :
00076 /* pour une paire de variables (i,j) (i<j) , constraints[i][j] contient le numéro de contraintes +1 entre ces variables si
00077 elles sont connectées, 0 sinon. On se limite à au plus une contrainte par paire de variables : dans le 
00078 cas contraire on peut utiliser la classe  WeightExtensionBinaryCSP */
00081   int** constraints;
00082   BinaryCSProblem( int nbvar, int nbconst);
00083   BinaryCSProblem (int nbvar, int nbconst, int lower);
00084   ~BinaryCSProblem() {;};
00085 };
00086 
00087 
00088 
00089 
00090 int** csp_constraintdatastructure(int nbvar);

Generated on Wed Sep 15 17:58:38 2004 for INCOP by doxygen 1.3.5