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