CluE  1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
maxdiamevaluator.h
Go to the documentation of this file.
1 #ifndef MAXDIAMEVALUATOR_H
2 #define MAXDIAMEVALUATOR_H
3 
4 #include "../base/measuresetter.h"
5 #include "../base/partitionevaluation.h"
6 #include "../base/dissimilaritymeasure.h"
7 
8 namespace CluE
9 {
10 
17 template<typename T> class MaxDiamEvaluator : public PartitionEvaluation<T>, public MeasureSetter<T>
18 {
19 public:
20 
27 
30  virtual ~MaxDiamEvaluator();
31 
36  virtual double partitioncost(std::vector<std::vector<T*> > const& clusters) const;
37 
42  virtual double partitioncost(PartitionProvider<T> const & clusteringSource, unsigned int solutionIndex) const;
43 
48  virtual double partitioncost(std::vector<T*> const& points) const;
49 
54  virtual double partitioncost(PartitionProvider<T> const & clusteringSource, unsigned int solutionIndex, unsigned int partitionIndex) const;
55 
56 
60  virtual void setMeasure(DissimilarityMeasure<T> const *measure);
61 
62 private:
64 };
65 
66 template<typename T> MaxDiamEvaluator<T>::MaxDiamEvaluator(DissimilarityMeasure<T> const *measure) :
67  measure(measure==0 ? 0 : measure->clone())
68 {
69  //empty
70 }
71 
73  measure(mde.measure == 0 ? 0 : mde.measure->clone())
74 {
75 }
76 
78 {
79  if(this.measure != 0)
80  delete this.measure;
81 
83 
84  this.measure = mde.measure == 0 ? 0 : mde.measure->clone();
85 
86  return *this;
87 }
88 
90 {
91  if(this->measure != 0)
92  delete this->measure;
93 }
94 
95 template<typename T> double MaxDiamEvaluator<T>::partitioncost(std::vector<std::vector<T*> > const &clusters) const
96 {
97  double sum = 0;
98 
99  int size = clusters.size();
100  for(int i = 0; i < size; i++)
101  {
102  sum += partitioncost(clusters[i]);
103  }
104 
105  return sum;
106 }
107 
108 template<typename T> double MaxDiamEvaluator<T>::partitioncost(PartitionProvider<T> const &provider, unsigned int solutionIndex) const
109 {
110  return partitioncost(provider.clustering(solutionIndex));
111 }
112 
113 template<typename T> double MaxDiamEvaluator<T>::partitioncost(std::vector<T*> const& points) const
114 {
115  double max = 0;
116 
117  int size = points.size();
118  for(int i = 0; i < size; i++)
119  {
120  for(int j = 0; j < i; j++)
121  {
122  double candidate = measure->dissimilarity(*points[i], *points[j]);
123  if(max < candidate)
124  max = candidate;
125  }
126  }
127 
128  return max;
129 }
130 
131 template<typename T> double MaxDiamEvaluator<T>::partitioncost(PartitionProvider<T> const &provider, unsigned int solutionIndex, unsigned int partitionIndex) const
132 {
133  return partitioncost(provider.cluster(solutionIndex, partitionIndex));
134 }
135 
136 template<typename T> void MaxDiamEvaluator<T>::setMeasure(DissimilarityMeasure<T> const *measure)
137 {
138  if(measure == 0)
139  this->measure = 0;
140  else
141  this->measure = measure->clone();
142 }
143 
144 }
145 
146 #endif
MaxDiamEvaluator< T > & operator=(const MaxDiamEvaluator< T > &)
MaxDiamEvaluator(DissimilarityMeasure< T > const *measure=0)
Instantiates MaxDiamEvaluator, optionally with a DissimilarityMeasure to use when calculating the max...
virtual std::vector< T * > cluster(unsigned int solutionIndex, unsigned int partitionIndex) const =0
Returns a vector of pointers to the elements of a particular cluster from the specified clustering...
virtual void setMeasure(DissimilarityMeasure< T > const *measure)
Sets the DissimilarityMeasure used when calculating the maximum diameter.
DissimilarityMeasure< T > * measure
virtual DissimilarityMeasure< T > * clone() const =0
virtual std::vector< std::vector< T * > > clustering(unsigned int solutionIndex) const =0
Returns the specified clustering as a vector of vector of pointers to the elements.
virtual double partitioncost(std::vector< std::vector< T * > > const &clusters) const
Calculates the maximum diameter of a given clustering.
Abstract class for partition-based evaluation algorithms.
Interface to propagate the ability to set a DissimilarityMeasure.
Definition: measuresetter.h:13
Calculates the maximum diameter of one or more given clusters.
Abstract base class to access results of partition based clustering algorithms.
Abstract base class for dissimilarity measurement.