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