00001 #ifndef STABLE_SET_H 00002 #define STABLE_SET_H 00003 00004 #include <boost/graph/adjacency_list.hpp> 00005 #include <boost/graph/adjacency_matrix.hpp> 00006 #include <boost/graph/adjacency_iterator.hpp> 00007 #include <boost/graph/dijkstra_shortest_paths.hpp> 00008 #include <boost/graph/graph_traits.hpp> 00009 #include <boost/graph/iteration_macros.hpp> 00010 #include <boost/property_map/property_map.hpp> 00011 #include <cstdarg> 00012 #include <iostream> 00013 #include <cstdio> 00014 #include <map> 00015 #include <scil/scil.h> 00016 #include <scil/constraints/stableset.h> 00017 00018 namespace SCIL { 00019 00024 template <typename Graph> 00025 class STABLESET : public sym_constraint { 00026 00027 private: 00028 typedef boost::graph_traits<Graph> GraphTraits; 00029 typedef typename GraphTraits::vertex_descriptor vertex_descriptor; 00030 typedef typename GraphTraits::edge_descriptor edge_descriptor; 00031 typedef typename GraphTraits::adjacency_iterator adjacency_iterator; 00032 00033 Graph& G; 00034 var_map<vertex_descriptor>& VM; 00035 00036 public: 00042 STABLESET(Graph& G_, var_map<vertex_descriptor>& VM_); 00043 00044 void init(subproblem& S); 00045 00048 status standard_separation(subproblem& S); 00049 00052 status fast_separation(subproblem& S); 00053 00056 int exactOddCycleSeparation(subproblem& S, int maxnum); 00057 00060 int heuristicCliqueSeparation(subproblem& S, int maxnum); 00061 00064 status feasible(solution& S); 00065 00068 void info(); 00069 }; 00070 00071 }; 00072 00073 #include "../../../src/constraints/stableset.cc" 00074 #endif