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