00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef implicative
00024 #define implicative
00025
00026 #include <iostream>
00027 #include <cstdlib>
00028 #include "minimodel.hh"
00029 #include "warner.hh"
00030 #include "qecore.hh"
00031 #include "myspace.hh"
00032
00033 using namespace Gecode;
00034 using namespace std;
00035 using namespace Gecode::Int;
00036
00037
00038 class Implicative : public QSpace {
00039 friend class valueHeuristic;
00040
00041 protected :
00042 bool* q;
00043 int nbSpaces;
00044 int currentDeclareSpace;
00045 int* nbVarBySpace;
00046 int* whichSpaceOwns;
00047 MySpace** rules;
00048 MySpace* goal;
00049 bool* varInitialised;
00050 bool* ruleDefined;
00051 int* ruleStatus;
00052 bool goalDefined;
00053 int goalStatus;
00054 Warner* w;
00055 int prop_power;
00056
00057 int cascade(int firstSpace, unsigned long int& propsteps);
00058
00059 public :
00060
00068 Implicative(int ns,bool firstQ,int* nv, int prop);
00069
00073 Implicative(Implicative& im);
00074
00078 virtual ~Implicative();
00079
00083 int spaces();
00084
00091 void QIntVar(int var,int min,int max);
00092
00098 void QIntVar(int var,IntSet dom);
00099
00106 void QBoolVar(int var,int min, int max);
00107
00112 void QBoolVar(int var) {QBoolVar(var,0,1);}
00113
00114
00119 MySpace* getRuleSpace(int sp);
00120
00121
00125 MySpace* getGoalSpace();
00126
00127
00131 MySpace* space();
00132
00133
00138 IntVar var(int n);
00139
00140
00145 BoolVar bvar(int n);
00146
00147
00148
00153 int nextScope();
00154
00155
00159 void makeStructure();
00160
00164 virtual void print();
00165
00166
00167 virtual bool quantification(int v);
00168 virtual int status(int var,unsigned long int& propsteps);
00169 virtual int finalStatus(unsigned long int& propsteps);
00170 virtual bool subsumed(int var);
00171 virtual Implicative* clone();
00172 virtual void assign(int var,int** vals,int nbVals);
00173 virtual void remove(int var,int** vals,int nbVals);
00174
00175
00176 virtual void backtrack();
00177 virtual void indicateBranchingHeuristic(BranchingHeuristic* bh);
00178 };
00179
00180
00181 #endif