Main Page | Class Hierarchy | Compound List | File List | Compound 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 /* taille maximum des domaines */
00015   int domainsize;
00016 /* pour chaque variable, numéro de son domaine : indice dans le tableau tabdomains */
00018   int* domains;
00019 /* tableau des connexions : pour chaque variable, vecteur des variables connectées */
00021   vector<int>* connections;
00022 /* constructeur de base */
00024   CSProblem (int nbvar, int nbconst);
00025 /* constructeur avec borne inférieure */
00027   CSProblem (int nbvar, int nbconst, int lower);
00028   ~CSProblem();
00029   void move_execution(Configuration* configuration, Move* move);
00030 /* la taille du domaine de la variable var */
00032   virtual int variable_domainsize (int var);
00033   void random_configuration(Configuration* configuration);
00034 /* une variable choisie aléatoirement */
00036   virtual int random_variable(Configuration* configuration);
00038   virtual int random_conflict_variable(Configuration* configuration);
00039 /* une valeur choisie aléatoirement, si possible distincte de val : retourne l'indice de la valeur dans le domaine */
00041   virtual int random_value(int var,int val);
00042 /* une valeur dans le domaine de la variable minimisant les conflits avec la configuration */
00045   virtual int min_conflict_value(int var,int val, Configuration * configuration);
00046 /* initialisation des domaines par défaut : un seul domaine numéro 0 pour toutes les variables */
00048   virtual void init_domains(int nbvar, int s );
00049 /* un seul domaine par défaut : entiers de 0 à s-1 */
00051   virtual void init_tabdomains(int s);
00052 /* calcul des variables en conflit : on reconstruit le vecteur des variables en conflit d'une configuration*/
00054   void compute_var_conflict(Configuration* configuration);
00055   void best_config_analysis();
00056   void best_config_write();
00057   int move_evaluation(Configuration* configuration,Move* move);
00058   void init_population (Configuration** population,int populationsize);
00059   Configuration* create_configuration();
00060   Move* create_move();
00061   void adjust_parameters(Configuration* configuration, int & maxneighbors, int & minneighbors);
00062   void next_move(Configuration* configuration, Move* move, NeighborhoodSearch* nbhs);   
00063 /* met en place les domaines et connexions d'un problème */
00065   virtual  void set_domains_connections( int* dom, vector<int>* tabledom, vector<int> * connect );
00066 /* initialisation des domaines : appel de init_domains et init_tabdomains */
00068   virtual void init_domain_tabdomain();
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 Fri Sep 26 17:27:25 2003 for INCOP by doxygen 1.3.3