00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef VrpModel_h_
00016 #define VrpModel_h_
00017
00018
00019
00020 #include <vector>
00021
00022 #include "BlisModel.h"
00023 #include "VrpVariable.h"
00024 #include "VrpCommonTypes.h"
00025 #include "VrpConstants.h"
00026 #include "VrpParams.h"
00027 #include "VrpCutGenerator.h"
00028
00029
00030
00032 class VrpModel : public BlisModel
00033 {
00034
00035 friend class VrpCutGenerator;
00036 friend class VrpSolution;
00037
00038 private:
00039
00040 char name_[100];
00041 int vertnum_;
00042 int edgenum_;
00043 int numroutes_;
00044 int depot_;
00045 int capacity_;
00046 int wtype_;
00047 int *demand_;
00048 int *posx_;
00049 int *posy_;
00050 double *coordx_;
00051 double *coordy_;
00052 double *coordz_;
00053 double etol_;
00054
00055 VrpParams *VrpPar_;
00056 VrpNetwork *n_;
00057
00058
00059
00060 std::vector<VrpVariable *> edges_;
00061
00062 protected:
00063
00068 void setModelData();
00069
00070 public:
00071
00073 VrpModel() : vertnum_(0), edgenum_(0), numroutes_(0), depot_(0),
00074 capacity_(0), wtype_(0), etol_(1e-5){
00075 demand_ = 0;
00076 posx_ = 0;
00077 posy_ = 0;
00078 coordx_ = 0;
00079 coordy_ = 0;
00080 coordz_ = 0;
00081 n_ = 0;
00082 VrpPar_ = new VrpParams;
00083
00084 AlpsPar()->setEntry(AlpsParams::searchStrategy,
00085 AlpsSearchTypeBestFirst);
00086 AlpsPar()->setEntry(AlpsParams::staticBalanceScheme, 1);
00087 AlpsPar()->setEntry(AlpsParams::nodeLogInterval, 20);
00088 BlisPar()->setEntry(BlisParams::branchStrategy,
00089 BlisBranchingStrategyStrong);
00090
00091 BlisPar()->setEntry(BlisParams::branchStrategyRampUp,
00092 BlisBranchingStrategyStrong);
00093
00094 BlisPar()->setEntry(BlisParams::cutCliqueStrategy,BlisCutStrategyNone);
00095 BlisPar()->setEntry(BlisParams::cutFlowCoverStrategy,
00096 BlisCutStrategyNone);
00097 BlisPar()->setEntry(BlisParams::cutGomoryStrategy,BlisCutStrategyNone);
00098 BlisPar()->setEntry(BlisParams::cutKnapsackStrategy,BlisCutStrategyNone);
00099 BlisPar()->setEntry(BlisParams::cutMirStrategy,BlisCutStrategyNone);
00100 BlisPar()->setEntry(BlisParams::cutOddHoleStrategy,BlisCutStrategyNone);
00101 BlisPar()->setEntry(BlisParams::cutProbingStrategy,BlisCutStrategyNone);
00102 BlisPar()->setEntry(BlisParams::cutTwoMirStrategy,BlisCutStrategyNone);
00103 BlisPar()->setEntry(BlisParams::heurRoundStrategy, BlisHeurStrategyNone);
00104
00105
00106 BlisPar()->setEntry(BlisParams::cutFactor, ALPS_DBL_MAX);
00107 BlisPar()->setEntry(BlisParams::cutPass, ALPS_INT_MAX);
00108 BlisPar()->setEntry(BlisParams::tailOff, -1000.0);
00109 BlisPar()->setEntry(BlisParams::denseConFactor, ALPS_DBL_MAX);
00110
00111
00112 CoinSeedRandom(1234567);
00113 }
00114
00116 virtual ~VrpModel() {
00117 delete [] demand_; demand_ = 0;
00118 delete [] posx_; posx_ = 0;
00119 delete [] posy_; posy_ = 0;
00120 delete [] coordx_; coordx_ = 0;
00121 delete [] coordy_; coordy_ = 0;
00122 delete [] coordz_; coordz_ = 0;
00123 delete VrpPar_; VrpPar_ = 0;
00124 delete n_; n_ = 0;
00125 }
00126
00136 virtual void readInstance(const char* dateFile);
00137
00139 virtual void readParameters(const int argnum, const char * const *arglist);
00140
00149 virtual BlisSolution * userFeasibleSolution(const double *solution,
00150 bool &userFeasible);
00151
00152 int index (int v0, int v1) {
00153 return(v0 < v1 ? v1*(v1 - 1)/2 + v0 : v0*(v0 - 1)/2 + v1);
00154 }
00155
00156 int computeCost(int v0, int v1);
00157
00158 int getNumVertices() { return vertnum_; }
00159
00160 int getNumEdges() { return edgenum_; }
00161
00162 std::vector<VrpVariable *> getEdgeList() { return edges_; }
00163
00164
00165 CoinPackedVector *getSolution(const double *denseSol);
00166
00167 void createNet(CoinPackedVector *vec);
00168
00170 virtual void registerKnowledge();
00171
00173 AlpsReturnStatus encodeVrp(AlpsEncoded *encoded) const;
00174
00176 AlpsReturnStatus decodeVrp(AlpsEncoded &encoded);
00177
00179 virtual AlpsEncoded* encode() const;
00180
00182 virtual void decodeToSelf(AlpsEncoded&);
00183
00184 };
00185
00186
00187
00188 #endif