00001 #ifndef SCIL_TOUR_H
00002 #define SCIL_TOUR_H
00003
00004 #include <algorithm>
00005 #include <scil/scil.h>
00006 #include <scil/core/var_map.h>
00007 #include <scil/core/min_cut.h>
00008 #include <boost/foreach.hpp>
00009 #include <boost/graph/adjacency_list.hpp>
00010 #include <boost/graph/adjacency_matrix.hpp>
00011 #include <boost/graph/connected_components.hpp>
00012 #include <boost/graph/graph_traits.hpp>
00013 #include <boost/graph/iteration_macros.hpp>
00014
00015
00016 using namespace boost;
00017
00018 namespace SCIL {
00019
00035 template<typename Graph>
00036 class TOUR : public sym_constraint {
00037 private:
00038
00039 typedef boost::graph_traits<Graph> GraphTraits;
00040 typedef typename GraphTraits::vertex_descriptor vertex_descriptor;
00041 typedef typename GraphTraits::edge_descriptor edge_descriptor;
00042
00043 Graph& G;
00044 var_map<edge_descriptor>& VM;
00045
00046 status separation(subproblem& S, bool fast_separation);
00047
00048 class degree_equality;
00049
00050 class cutset_inequality;
00051
00052 public:
00053
00065 TOUR(Graph& G_, var_map<edge_descriptor>& X);
00066
00070 void init(subproblem& S);
00071
00077 status standard_separation(subproblem& S);
00078
00084 status fast_separation(subproblem& S);
00085
00088 status feasible(solution& S);
00089
00092 void info();
00093
00094 virtual ~TOUR() {
00095 };
00096 };
00097
00098 }
00099 #include "../../../src/constraints/tour.cc"
00100 #endif