00001 #ifndef BOOL_INST_H 00002 #define BOOL_INST_H 00003 00004 #include<scil/core/boolfunction.h> 00005 #include<scil/core/nonlinear_inst.h> 00006 #include<scil/core/qboolfunction.h> 00007 00008 00009 namespace SCIL{ 00010 class bool_split_strategy { 00011 public: 00012 bool_split_strategy(){} 00013 virtual bool split(boolfunction* bToSplit, boolfunction*& b1, boolfunction*& b2){} 00014 virtual ~bool_split_strategy(){} 00015 }; 00016 00017 class bool_score_split : public bool_split_strategy { 00018 private: 00019 std::vector<std::vector<int> > scoreMatrix; 00020 std::map<var, int> varIndex; 00021 public: 00022 bool_score_split(std::list<boolfunction*> &bflist); 00023 bool split(boolfunction* bToSplit, boolfunction*& b1, boolfunction*& b2); 00024 }; 00025 00026 class bool_simple_split : public bool_split_strategy { 00027 public: 00028 bool_simple_split() {} 00029 bool split(boolfunction* bToSplit, boolfunction*& b1, boolfunction*& b2); 00030 }; 00031 00032 00033 class bool_inst : public nonlinear_inst { 00034 00035 private: 00036 bool_split_strategy* splitStrategy; 00037 00038 void decompose(std::list<boolfunction*>& bfList, ILP_Problem& IP); 00039 00040 void linearize(ILP_Problem& IP); 00041 public: 00042 bool_inst(std::list<boolfunction*>& bfList, ILP_Problem& IP, bool_split_strategy* spst); 00043 00044 virtual status feasible(solution& S); 00045 00046 ~bool_inst(); 00047 }; 00048 } 00049 #endif