1#ifndef FSTSEARCHBRANCHANDBOUNDPARTIALPREDICTION_H
2#define FSTSEARCHBRANCHANDBOUNDPARTIALPREDICTION_H
112template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
128 virtual std::ostream&
print(std::ostream& os)
const override {
130 else os <<
"Branch & Bound with Partial Prediction (BBPP) [Search_Branch_And_Bound_Partial_Prediction() with " <<
_predictor <<
"]";
138 virtual void leaf_result(
const DIMTYPE feature,
const RETURNTYPE value)
override;
154template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
163template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
177 DIMTYPE to_compute=0;
182 avail->
type=parent::PREDICTED;
184 avail->
type=parent::UNKNOWN;
188 if(to_compute==0)
return;
193 typename parent::EVALUATORENGINE::ResultCallback on_result=[
this,&parentnode](
const RETURNTYPE value,
const PSubset&,
const DIMTYPE feat) {
197 node->
type=parent::COMPUTED;
205 if(avail->
type!=parent::PREDICTED) {
206 assert(currentset->selected_raw(avail->
feature));
207 currentset->deselect_raw(avail->
feature);
209 currentset->select_raw(avail->
feature);
218template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
235 std::vector<PNode> submitted;
237 if(nod->
type!=parent::COMPUTED) submitted.push_back(nod);
238 if(submitted.empty())
return;
241 typename parent::EVALUATORENGINE::ResultCallback on_result=[
this,&parentnode,&submitted,&done](
const RETURNTYPE value,
const PSubset&,
const DIMTYPE feat) {
242 PNode node=submitted[done++];
245 node->
type=parent::COMPUTED;
250 for(
PNode snod : submitted)
252 assert(currentset->selected_raw(snod->feature));
253 currentset->deselect_raw(snod->feature);
255 currentset->select_raw(snod->feature);
261template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
Interface for Implementations of Prediction Mechanism in Fast Branch & Bound and Branch & Bound with ...
Implements Branch and Bound with Partial Prediction (BBPP) method, i.e., with predicted node ordering...
Definition search_branch_and_bound_partial_prediction.hpp:113
Search_Branch_And_Bound< RETURNTYPE, DIMTYPE, SUBSET, CRITERION > parent
base class alias
Definition search_branch_and_bound_partial_prediction.hpp:115
parent::PEvaluatorEngine PEvaluatorEngine
shared pointer to the injected evaluation-strategy engine
Definition search_branch_and_bound_partial_prediction.hpp:121
parent::PNode PNode
pointer to a search-tree Node, see Search_Branch_And_Bound
Definition search_branch_and_bound_partial_prediction.hpp:118
virtual void initialize(const DIMTYPE d, const DIMTYPE n, const PCriterion crit) override
resets the prediction mechanism for a feature space of n features; nothing else needs setting up for ...
Definition search_branch_and_bound_partial_prediction.hpp:137
parent::Node Node
search-tree node record (feature, value, type, valid), see Search_Branch_And_Bound
Definition search_branch_and_bound_partial_prediction.hpp:119
parent::PCriterion PCriterion
shared pointer to the criterion the search optimizes
Definition search_branch_and_bound_partial_prediction.hpp:116
virtual void leaf_result(const DIMTYPE feature, const RETURNTYPE value) override
Definition search_branch_and_bound_partial_prediction.hpp:155
PREDICTOR _predictor
the prediction mechanism instance (PREDICTOR type parameter, e.g. Branch_And_Bound_Predictor_Averagin...
Definition search_branch_and_bound_partial_prediction.hpp:134
virtual void pre_evaluate_availables() override
Assigns an ordering value to every available feature: predicted (parent value minus the predicted con...
Definition search_branch_and_bound_partial_prediction.hpp:164
virtual std::ostream & print(std::ostream &os) const override
Writes the algorithm's name together with the prediction mechanism in use, and the thread count when ...
Definition search_branch_and_bound_partial_prediction.hpp:128
parent::NodeType NodeType
UNKNOWN/RANDOM/PREDICTED/COMPUTED node-value provenance, see Search_Branch_And_Bound.
Definition search_branch_and_bound_partial_prediction.hpp:120
Search_Branch_And_Bound_Partial_Prediction(PEvaluatorEngine engine=PEvaluatorEngine())
engine forwarded to Search_Branch_And_Bound; defaults to sequential in-line evaluation if not supplie...
Definition search_branch_and_bound_partial_prediction.hpp:122
parent::PSubset PSubset
shared pointer to a feature subset
Definition search_branch_and_bound_partial_prediction.hpp:117
virtual bool cut_possible() override
Returns true when the current node's value does not exceed the current bound, so the whole sub-branch...
Definition search_branch_and_bound_partial_prediction.hpp:262
virtual void post_process_tree_level() override
Replaces the merely PREDICTED values of the nodes that made it into the new tree level by exact crite...
Definition search_branch_and_bound_partial_prediction.hpp:219
PSubset & get_currentset()
mutable accessor for _currentset, for use by descendant B&B variants' hooks
Definition search_branch_and_bound.hpp:198
Node & get_parent_node()
the node one level up (_tree[k-1].back()) whose feature removal defines the branch currently being fo...
Definition search_branch_and_bound.hpp:199
Node * PNode
pointer to a Node, as used by the getFirst.../getNext... accessors below
Definition search_branch_and_bound.hpp:142
bool getFirstNode(PNode &nod)
begins forward iteration (ascending by value, from _tree[k].begin()) over the current level's not-yet...
Definition search_branch_and_bound.hpp:190
PCriterion const & get_criterion() const
accessor for _criterion, for use by descendant B&B variants' hooks
Definition search_branch_and_bound.hpp:180
Search_Branch_And_Bound(PEvaluatorEngine engine=PEvaluatorEngine())
Constructs the search, optionally injecting a candidate-evaluation engine.
Definition search_branch_and_bound.hpp:121
DIMTYPE n
no. of all features
Definition search_branch_and_bound.hpp:176
Node & get_current_node()
the node at the current level k presently being visited (_tree[k].back()), i.e. about to be tested fo...
Definition search_branch_and_bound.hpp:200
PEvaluatorEngine const & get_engine() const
accessor for the injected evaluation strategy (sequential-inline or thread-pooled),...
Definition search_branch_and_bound.hpp:181
bool getAvailable(DIMTYPE idx, PNode &avail)
direct lookup of _available[idx] by feature index, regardless of its valid flag; returns false if idx...
Definition search_branch_and_bound.hpp:195
bool getFirstAvailable(PNode &avail)
begins iteration over _available in feature-index order, skipping withdrawn (invalid) entries,...
Definition search_branch_and_bound.hpp:193
bool getNextNode(PNode &nod)
advances the getFirstNode() iteration; returns false once the level's end is reached
Definition search_branch_and_bound.hpp:191
DIMTYPE d
no. of features to be selected
Definition search_branch_and_bound.hpp:177
std::shared_ptr< EVALUATORENGINE > PEvaluatorEngine
shared pointer to an EVALUATORENGINE, as accepted by the constructor and returned by get_engine()
Definition search_branch_and_bound.hpp:115
bool is_bound_valid() const
true once a valid bound has been established, see _boundvalid
Definition search_branch_and_bound.hpp:184
std::shared_ptr< SUBSET > PSubset
shared pointer to a feature subset
Definition search_branch_and_bound.hpp:113
bool getNextAvailable(PNode &avail)
advances the getFirstAvailable() iteration, again skipping invalid entries; returns false once exhaus...
Definition search_branch_and_bound.hpp:194
std::shared_ptr< CRITERION > PCriterion
shared pointer to the criterion under optimization
Definition search_branch_and_bound.hpp:112
NodeType
Marks how a Node's value was obtained: UNKNOWN = not yet assigned; RANDOM = reserved but currently un...
Definition search_branch_and_bound.hpp:134
DIMTYPE get_n() const
total number of features, see n
Definition search_branch_and_bound.hpp:187
RETURNTYPE get_bound_value() const
the current best (bound) criterion value; meaningful only once is_bound_valid()
Definition search_branch_and_bound.hpp:183
FST4 specific error passing class.
Definition error.hpp:61
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.
Implements Branch and Bound template method as basis for more advanced B&B implementations.
Structure representing search tree node.
Definition search_branch_and_bound.hpp:136
RETURNTYPE value
the node's criterion value: exact once type==COMPUTED, an ordering estimate while type==PREDICTED,...
Definition search_branch_and_bound.hpp:138
DIMTYPE feature
the feature index this node represents removing from its ancestor set (meaningless in the single root...
Definition search_branch_and_bound.hpp:137
NodeType type
how value was obtained, see NodeType
Definition search_branch_and_bound.hpp:139