Implementacja tabu search dla TSP
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

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