1#ifndef FSTRESULTTRACKERDUPLESS_H
2#define FSTRESULTTRACKERDUPLESS_H
91template<
class RETURNTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET>
92class Result_Tracker_Dupless :
public Clonable_Impl<Result_Tracker_Dupless<RETURNTYPE,IDXTYPE,DIMTYPE,SUBSET>,Result_Tracker<RETURNTYPE,SUBSET>,CLONE_INHERIT,CLONE_INHERIT,CLONE_DEEP> {
123 virtual bool add(
const RETURNTYPE value,
const PSubset sub)
override;
125 virtual std::size_t
size()
const override {
return results.size();}
126 virtual std::size_t
size(
const RETURNTYPE margin)
const;
136 virtual std::ostream&
print(std::ostream& os)
const override {os <<
"Result_Tracker_Dupless(limit=" <<
_capacity_limit <<
", margin=" <<
_margin <<
") size " <<
size();
return os;}
155template<
class RETURNTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET>
171 if(value>iter->value) {
172 results.push_front(rr); added=
true;
177 while(iter!=
results.end() && (value<iter->value || (value==iter->value && sub->get_d()>iter->sub->get_d()))) iter++;
178 while(!dupl && iter!=
results.end() && (value==iter->value && sub->get_d()==iter->sub->get_d()))
if(sub->equivalent(*(iter->sub))) dupl=
true;
else iter++;
180 results.insert(iter,rr); added=
true;
186 results.push_back(rr); added=
true;
191template<
class RETURNTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET>
198 RETURNTYPE threshold=iter->value-margin;
199 while(iter!=
results.end() && iter->value>=threshold) {count++; iter++;}
203template<
class RETURNTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET>
206 if(
results.empty())
return false;
213template<
class RETURNTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET>
222template<
class RETURNTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET>
238 while(iter!=
end() && (iter->value>pr->
value || (iter->value==pr->
value && iter->sub->get_d()<pr->
sub->get_d()))) iter++;
240 while(!dupl && iter!=
end() && (iter->value==pr->
value && iter->sub->get_d()==pr->
sub->get_d()))
if(pr->
sub->equivalent(*(iter->sub))) dupl=
true;
else iter++;
241 if(!dupl)
results.insert(iter,*pr);
CRTP mixin implementing the Clonable protocol for a concrete class.
Definition clonable.hpp:184
Collects multiple results, avoiding duplicates.
Definition result_tracker_dupless.hpp:92
RESULTSITER end()
iterator past the last held result
Definition result_tracker_dupless.hpp:147
void set_inclusion_margin(const RETURNTYPE margin=0)
restrict adding to only subsets with criterion value within given distance (margin) from best known
Definition result_tracker_dupless.hpp:131
virtual void join(Result_Tracker< RETURNTYPE, SUBSET > &src) override
merges the results held by src into this tracker, keeping the ordering and skipping duplicates exactl...
Definition result_tracker_dupless.hpp:223
parent::ResultRec ResultRec
see Result_Tracker::ResultRec
Definition result_tracker_dupless.hpp:96
std::list< ResultRec > results
held results, sorted descending by value (ties broken toward the smaller subset); see add() for the e...
Definition result_tracker_dupless.hpp:138
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the object; base default writes nothing
Definition result_tracker_dupless.hpp:136
virtual bool add(const RETURNTYPE value, const PSubset sub) override
Offers one (value, subset) result for inclusion; sub is copied, the caller keeps ownership of its own...
Definition result_tracker_dupless.hpp:156
DIMTYPE _restrict_to_d
set via set_inclusion_cardinality_restriction(); 0 = no subset-size restriction
Definition result_tracker_dupless.hpp:140
Result_Tracker_Dupless(const Result_Tracker_Dupless &rtd)
copies the configuration (margin, cardinality restriction, capacity limit) only; the results list is ...
Definition result_tracker_dupless.hpp:101
const IDXTYPE _capacity_limit
set by the constructor; 0 = unlimited
Definition result_tracker_dupless.hpp:141
Result_Tracker< RETURNTYPE, SUBSET > parent
the abstract Result_Tracker interface this class implements
Definition result_tracker_dupless.hpp:94
std::list< ResultRec >::const_iterator CONSTRESULTSITER
read-only iterator over results, for use by subclasses/friends inspecting the collected results
Definition result_tracker_dupless.hpp:144
parent::PResultRec PResultRec
see Result_Tracker::PResultRec
Definition result_tracker_dupless.hpp:97
Result_Tracker_Dupless(const IDXTYPE capacity_limit=0)
Definition result_tracker_dupless.hpp:100
RETURNTYPE _margin
set via set_inclusion_margin(); 0 = no margin restriction
Definition result_tracker_dupless.hpp:139
Clonable_Impl< Result_Tracker_Dupless, parent, CLONE_INHERIT, CLONE_INHERIT, CLONE_DEEP > parent_impl
implements stateless_clone() via the copy-constructor (CLONE_DEEP); clone()/sharing_clone() are inher...
Definition result_tracker_dupless.hpp:95
void set_inclusion_cardinality_restriction(const DIMTYPE d)
for d>0 restricts adding only to subsets of size d, for d=0 subset size restriction is removed
Definition result_tracker_dupless.hpp:132
virtual bool get_first(PResultRec &r) override
starts iteration at the best held result; false if nothing is held. The returned pointer refers into ...
Definition result_tracker_dupless.hpp:204
std::list< ResultRec >::iterator RESULTSITER
mutable iterator over results, as returned by begin()/end()
Definition result_tracker_dupless.hpp:145
RESULTSITER begin()
iterator to the best (first) held result
Definition result_tracker_dupless.hpp:146
virtual bool get_next(PResultRec &r) override
hands out the next result in descending-value order; false when the iteration is exhausted....
Definition result_tracker_dupless.hpp:214
std::shared_ptr< SUBSET > PSubset
Definition result_tracker_dupless.hpp:98
RESULTSITER getiter
iteration cursor for get_first()/get_next() (single shared cursor, not reentrant)
Definition result_tracker_dupless.hpp:150
virtual void clear() override
discards all recorded results
Definition result_tracker_dupless.hpp:124
virtual std::size_t size() const override
number of results currently held (std::size_t rather than 'long': on LLP64 platforms 'long' is 32 bit...
Definition result_tracker_dupless.hpp:125
Abstract class, defines interface for classes that enable collecting multiple results.
Definition result_tracker.hpp:91
ResultRec * PResultRec
raw pointer to a ResultRec, as used by get_first()/get_next() iteration
Definition result_tracker.hpp:103
virtual bool get_next(PResultRec &r)=0
hands out the next held result; false once the iteration is exhausted. A tracker has a single shared ...
virtual bool get_first(PResultRec &r)=0
starts an iteration over the held results, best first; false if the tracker holds nothing....
FST4 specific error passing class.
The Feature Selection Toolbox 4 library: every library component – data access, criteria and classifi...
Definition data_accessor.hpp:80
void notify(const std::string msg)
Prints msg followed by a newline via syncout::print(); a no-op unless the preprocessor macro DEBUG is...
Definition global.hpp:112
Defines interface for classes that enable collecting multiple results.
Structure to hold [subset,criterion value] temporary solutions in the course of search.
Definition result_tracker.hpp:99
RETURNTYPE value
the criterion value of the recorded subset
Definition result_tracker.hpp:100
PSubset sub
the recorded subset itself
Definition result_tracker.hpp:101