00001 #include <scil/scil.h>
00002 #include <scil/core/var_map.h>
00003 #include <scil/core/min_cut.h>
00004 #include <boost/foreach.hpp>
00005 #include <boost/graph/graph_traits.hpp>
00006 #include <boost/graph/adjacency_matrix.hpp>
00007 #include <boost/graph/adjacency_list.hpp>
00008 #include <boost/graph/connected_components.hpp>
00009 #include <boost/graph/graph_concepts.hpp>
00010 #include <boost/property_map/property_map.hpp>
00011 #include <boost/graph/iteration_macros.hpp>
00012
00013 #ifndef ATOUR_H
00014 #define ATOUR_H
00015
00016 namespace SCIL {
00032 template <typename Graph>
00033 class ATOUR : public sym_constraint {
00034 private:
00035 typedef boost::graph_traits<Graph> GraphTraits;
00036 typedef typename GraphTraits::vertex_descriptor vertex_descriptor;
00037 typedef typename GraphTraits::edge_descriptor edge_descriptor;
00038 Graph &G;
00039 var_map<edge_descriptor> &VM;
00040
00041 status heuristic_separation(subproblem& S);
00042
00043 status exact_separation(subproblem& S);
00044
00045
00046 class dir_degree_equality;
00047
00048 class dir_cutset_inequality;
00049
00050 public:
00061
00063 ATOUR(Graph& G_, var_map<edge_descriptor>& X);
00064
00069 void init(subproblem& S);
00070
00076 status standard_separation(subproblem& S);
00077
00083 status fast_separation(subproblem& S);
00084
00085
00088 status feasible(solution& S);
00089
00090
00093 void info();
00094
00095 };
00096
00097 #include "../../../src/constraints/atour.cc"
00098
00099 }
00100
00101 #endif