Implementacja tabu search dla TSP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef GRAPH_H
  2. #define GRAPH_H
  3. #include <vector>
  4. #include <mutex>
  5. class Graph
  6. {
  7. public:
  8. Graph();
  9. virtual ~Graph();
  10. virtual bool addEdge(unsigned v, unsigned w, unsigned weight) = 0;
  11. virtual bool removeEdge(unsigned v, unsigned w) = 0;
  12. virtual unsigned getWeight(unsigned v, unsigned w) = 0;
  13. unsigned getVertexNumber();
  14. virtual void displayGraph() = 0;
  15. static void randomGenerateFullGraph(Graph &graph, unsigned maxWeight);
  16. static std::vector<unsigned> travellingSalesmanBruteForce(Graph &graph);
  17. static std::vector<unsigned> travellingSalesmanBranchAndBound(Graph &graph);
  18. static std::vector<unsigned> travellingSalesmanGreedy(Graph &graph, unsigned startVertex);
  19. static std::vector<unsigned> travellingSalesmanHybrid(Graph &graph);
  20. static std::vector<unsigned> travellingSalesmanRandom(Graph &graph);
  21. static std::vector<unsigned> travellingSalesmanTabuSearch(Graph &graph, unsigned tabuSteps, bool diversification, int iterationsToRestart, unsigned minStopTime, unsigned threadsNumber);
  22. protected:
  23. unsigned vertexNumber;
  24. private:
  25. static void travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps, bool diversification, int iterationsToRestart, unsigned minStopTime, std::vector<unsigned> startRoute, std::vector<unsigned> &globalOptimum, unsigned &globalOptimumLength, std::mutex &globalOptimumMutex);
  26. class RouteComparison
  27. {
  28. public:
  29. bool operator() (const std::vector<unsigned>& lhs, const std::vector<unsigned>& rhs) const
  30. {
  31. return (lhs.at(0) > rhs.at(0));
  32. }
  33. };
  34. };
  35. #endif // GRAPH_H