openModeller  Version 1.5.0
niche_mosaic.hh
Go to the documentation of this file.
1 
27 #ifndef NICHEMOSAIC_HH
28 #define NICHEMOSAIC_HH
29 
30 #include <openmodeller/om.hh>
32 
33 typedef std::vector<Scalar> ScalarVector;
34 
35 class NicheMosaic : public AlgorithmImpl
36 {
37  private:
38 
39  int _num_iterations; // number of iterations
40  int _num_points; // number of points.
41  size_t _num_points_test; // number of points (test).
42  size_t _num_points_absence_test; // number of points (absence test).
43  int _num_layers; // number of layers.
44  Sample _minimum; // minimum of sampled points.
45  Sample _maximum; // maximum of sampled points.
46  Sample _delta; // delta of sampled points.
47  OccurrencesPtr _my_presences; // occurrence points of species.
48  OccurrencesPtr _my_presences_test; // occurrence points of species (test).
49  OccurrencesPtr _my_absence_test; // occurrence points of species (absence test).
50  Scalar _bestCost; // best cost
51  bool _done; // is true if the algorithm is finished.
52  float _progress; // iteration progress
54  std::vector<ScalarVector> _model_min_best;
55  std::vector<ScalarVector> _model_max_best;
56 
57  protected:
58 
59  void _getConfiguration( ConfigurationPtr& ) const;
61 
62  public:
63 
64  NicheMosaic(); //constructor
65  ~NicheMosaic(); //destructor
66 
67  int initialize();
68  int iterate();
69  int done() const { return _done; }
70  float getProgress() const;
71 
72  Scalar getValue( const Sample& x ) const;
73 
74  //set minimum, maximum and delta for each layer.
75  int setMinMaxDelta();
76 
77  //create rules
78  void createModel( std::vector<ScalarVector> &_model_min, std::vector<ScalarVector> &_model_max, const std::vector<Scalar> &delta );
79 
80  //edit rules
81  void editModel( std::vector<ScalarVector> &model_min, std::vector<ScalarVector> &model_max, const std::vector<Scalar> &delta, size_t i_layer );
82 
83  //verify test data for presence
84  size_t calculateCostPres( const std::vector<ScalarVector> &_model_min, const std::vector<ScalarVector> &_model_max );
85 
86  //verify test data for absence
87  size_t calculateCostAus( const std::vector<ScalarVector> &_model_min, const std::vector<ScalarVector> &_model_max );
88 
89  //generate random layer number.
90  size_t getRandomLayerNumber();
91 
92  //return random percent.
93  Scalar getRandomPercent(const std::vector<Scalar> &delta, const size_t i_layer, size_t &cost1);
94 
95  //renew tabu degree list
96  void renewTabuDegree(std::vector<size_t> &tabuDegree);
97 
98  //save best model
99  void saveBestModel(const std::vector<ScalarVector> &model_min, const std::vector<ScalarVector> &model_max);
100 
101  //improve model
102  void improveModel(const std::vector<Scalar> &deltaBest);
103 
104  //Find solution.
105  void findSolution(size_t &costBest, std::vector<Scalar> &deltaBest, int &bestIter, size_t &bestCost2);
106 
107  //remove discrepancy points
108  OccurrencesPtr cleanOccurrences( const OccurrencesPtr& occurrences );
109 
110  //compute mean and deviation
111  void computeMeanDeviation( const OccurrencesPtr& occs, Sample& mean, Sample& deviation );
112 
113 };
114 
115 
116 #endif
117 
size_t calculateCostAus(const std::vector< ScalarVector > &_model_min, const std::vector< ScalarVector > &_model_max)
float getProgress() const
void editModel(std::vector< ScalarVector > &model_min, std::vector< ScalarVector > &model_max, const std::vector< Scalar > &delta, size_t i_layer)
void findSolution(size_t &costBest, std::vector< Scalar > &deltaBest, int &bestIter, size_t &bestCost2)
OccurrencesPtr _my_absence_test
Definition: niche_mosaic.hh:49
double Scalar
Type of map values.
Definition: om_defs.hh:39
float _progress
Definition: niche_mosaic.hh:52
void computeMeanDeviation(const OccurrencesPtr &occs, Sample &mean, Sample &deviation)
int done() const
Definition: niche_mosaic.hh:69
SamplerPtr _sampp
Definition: niche_mosaic.hh:53
int setMinMaxDelta()
size_t _num_points_absence_test
Definition: niche_mosaic.hh:42
Sample _maximum
Definition: niche_mosaic.hh:45
void saveBestModel(const std::vector< ScalarVector > &model_min, const std::vector< ScalarVector > &model_max)
void improveModel(const std::vector< Scalar > &deltaBest)
void createModel(std::vector< ScalarVector > &_model_min, std::vector< ScalarVector > &_model_max, const std::vector< Scalar > &delta)
size_t _num_points_test
Definition: niche_mosaic.hh:41
Sample _minimum
Definition: niche_mosaic.hh:44
int _num_iterations
Definition: niche_mosaic.hh:39
std::vector< Scalar > ScalarVector
Definition: niche_mosaic.hh:33
void renewTabuDegree(std::vector< size_t > &tabuDegree)
Scalar getValue(const Sample &x) const
void _setConfiguration(const ConstConfigurationPtr &)
Sample _delta
Definition: niche_mosaic.hh:46
OccurrencesPtr cleanOccurrences(const OccurrencesPtr &occurrences)
std::vector< ScalarVector > _model_max_best
Definition: niche_mosaic.hh:55
Scalar _bestCost
Definition: niche_mosaic.hh:50
size_t calculateCostPres(const std::vector< ScalarVector > &_model_min, const std::vector< ScalarVector > &_model_max)
std::vector< ScalarVector > _model_min_best
Definition: niche_mosaic.hh:54
void _getConfiguration(ConfigurationPtr &) const
OccurrencesPtr _my_presences_test
Definition: niche_mosaic.hh:48
OccurrencesPtr _my_presences
Definition: niche_mosaic.hh:47
size_t getRandomLayerNumber()
Scalar getRandomPercent(const std::vector< Scalar > &delta, const size_t i_layer, size_t &cost1)
Definition: Sample.hh:25