1 #ifndef ADAPTIVESAMPLING_H
2 #define ADAPTIVESAMPLING_H
4 #include "../base/inputsetter.h"
5 #include "../base/measuresetter.h"
6 #include "../base/algorithm.h"
7 #include "../base/dissimilaritymeasure.h"
8 #include "../base/solutionprovider.h"
9 #include "../datastructure/discreteproxysolution.h"
10 #include "../misc/randomness.h"
11 #include "../point/pointweightmodifier.h"
12 #include "../exception/invalidruntimeconfigurationexception.h"
34 unsigned int numberOfSamples = 0);
51 virtual void setInput(std::vector<T*>
const*);
77 Algorithm(rhs), input(rhs.input), measure(rhs.measure==NULL?NULL:rhs.measure->clone()),
78 number_of_samples(rhs.number_of_samples),
86 Algorithm::operator=(rhs);
90 this->input = rhs.
input;
103 if(this->input==NULL)
105 if(this->measure==NULL)
113 unsigned int N = this->input->size();
116 unsigned int samplenum = this->number_of_samples;
122 std::vector<T*> unchosen = *this->input;
123 solution->
proxysets.push_back(std::vector<T*>());
126 std::uniform_int_distribution<int> dis(0, N-1);
129 solution->
proxysets[0].push_back(unchosen[index]);
130 unchosen.erase(unchosen.begin()+index);
132 std::vector<double> weights(N-1, std::numeric_limits<double>::infinity());
133 for(
unsigned int i=1; i<samplenum; i++)
137 for(
unsigned int j=0; j<N-i; j++)
139 double w = this->measure->dissimilarity(*unchosen[j], *solution->
proxysets[0][i-1]);
140 if(weightModifier != 0)
141 w *= weightModifier->getWeight(*unchosen[j]);
148 std::uniform_real_distribution<> dis(0, total);
149 double pos = dis(rg);
152 for(
unsigned int j=0; j<N-i&&index<0; j++)
160 solution->
proxysets[0].push_back(unchosen[index]);
161 unchosen.erase(unchosen.begin()+index);
177 this->measure = m==NULL?NULL:m->
clone();
182 this->number_of_samples = n;
188 weightModifier = wm->
clone();
Encapsulates an STL random generator.
AdaptiveSampling< T > & operator=(const AdaptiveSampling< T > &)
virtual WeightModifier< T > * clone() const =0
make an exact copy of this object The clone method creates a copy of this object and returns a pointe...
static AdaptiveSampling< T > * toAdaptiveSampling(Algorithm *s)
Does a dynamic cast of the given Algorithm to AdaptiveSampling
Data structure for discrete proxies.
virtual void setMeasure(DissimilarityMeasure< T > const *)
virtual ~AdaptiveSampling()
void setWeightModifier(WeightModifier< T > *wm)
virtual DiscreteProxySolution< T > * compute()
Computes the sample set.
std::vector< std::vector< T * > > proxysets
unsigned int number_of_samples
std::vector< T * > const * input
Abstract base class to modify the weight of weighted objects.
static RandomGenerator getRandomGenerator()
k-means++ sampling method
virtual DissimilarityMeasure< T > * clone() const =0
Abstract base class for algorithms.
WeightModifier< T > * weightModifier
Interface to propagate the ability to set a DissimilarityMeasure.
virtual void setInput(std::vector< T * > const *)
DissimilarityMeasure< T > * measure
Abstract base class for dissimilarity measurement.
Indicates that a computation entered an invalid configuration state.
AdaptiveSampling(const std::vector< T * > *data=NULL, DissimilarityMeasure< T > *measure=NULL, unsigned int numberOfSamples=0)
void setNumberOfSamples(unsigned int)