00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef VrpHeurTSP_h_
00016 #define VrpHeurTSP_h_
00017
00018
00019
00020 #include <vector>
00021
00022 #include "CoinPackedVector.hpp"
00023
00024 #include "BlisHeuristic.h"
00025 #include "VrpModel.h"
00026
00027
00028 #if 0
00029 class VrpAdjList
00030 {
00031 private:
00032 std::vector<CoinPackedVector *> list_;
00033 VrpModel *model_;
00034 public:
00035 VrpAdjList() {}
00036 VrpAdjList(VrpModel *m) {
00037 model_ = m;
00038 createAdjList(m);
00039 }
00040
00041 void createAdjList(VrpModel *model);
00042 };
00043
00044 typedef struct vrp_neighbors
00045 {
00046 int n1;
00047 int n2;
00048 } VrpNeighbors;
00049
00050 #endif
00051
00052
00053
00054 class VrpHeurTSP : public BlisHeuristic {
00055 private:
00057 VrpHeurTSP & operator=(const VrpHeurTSP& rhs);
00058
00059 protected:
00060
00061
00062
00063
00064
00065 std::vector<CoinPackedVector *> adjList_;
00066
00068 void createAdjList(VrpModel *model);
00069
00071 std::vector<int> tour_;
00072
00074 bool *visited_;
00075
00077 int preNode_;
00078
00080
00081 int *neighbors_;
00082
00084 int nodeCalls_;
00085
00088 std::vector<int> *edgeColMatch_;
00089
00090 void freeGuts() {
00091 if (visited_) {
00092 delete [] visited_;
00093 visited_ = NULL;
00094 }
00095 int numVertices = adjList_.size();
00096 for (int k = 0; k < numVertices; ++k) {
00097 delete adjList_[k];
00098 }
00099 adjList_.clear();
00100 if (neighbors_) {
00101 delete [] neighbors_;
00102 neighbors_ = NULL;
00103 }
00104 if (edgeColMatch_) {
00105 delete [] edgeColMatch_;
00106 edgeColMatch_ = NULL;
00107 }
00108 }
00109
00110 public:
00112 VrpHeurTSP()
00113 :
00114 visited_(0), preNode_(-1),
00115 neighbors_(0), nodeCalls_(0), edgeColMatch_(0) {}
00116
00118 VrpHeurTSP(VrpModel * model, const char *name,
00119 BlisHeurStrategy strategy, int freq)
00120 :
00121 BlisHeuristic(model, name, strategy, freq)
00122 {
00123 visited_ = NULL;
00124 preNode_ = -1;
00125 neighbors_ = NULL;
00126 nodeCalls_ = 0;
00127 edgeColMatch_ = NULL;
00128 createAdjList(model);
00129 }
00130
00132 ~VrpHeurTSP()
00133 {
00134 freeGuts();
00135 }
00136
00139 virtual bool searchSolution(double & objectiveValue, double * newSolution);
00140 };
00141 #endif
00142
00143