souffle  2.0.2-371-g6315b36
Public Member Functions | Protected Member Functions
souffle::ast::MaxBoundSips Class Reference

Goal: prioritise (1) all-bound, then (2) max number of bound vars, then (3) left-most. More...

#include <SipsMetric.h>

Inheritance diagram for souffle::ast::MaxBoundSips:
Inheritance graph
Collaboration diagram for souffle::ast::MaxBoundSips:
Collaboration graph

Public Member Functions

 MaxBoundSips ()=default
 
- Public Member Functions inherited from souffle::ast::SipsMetric
std::vector< unsigned int > getReordering (const Clause *clause) const
 Determines the new ordering of a clause after the SIPS is applied. More...
 
virtual ~SipsMetric ()=default
 

Protected Member Functions

std::vector< double > evaluateCosts (const std::vector< Atom * > atoms, const BindingStore &bindingStore) const override
 Evaluates the cost of choosing each atom next in the current schedule. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from souffle::ast::SipsMetric
static std::unique_ptr< SipsMetriccreate (const std::string &heuristic, const TranslationUnit &tu)
 Create a SIPS metric based on a given heuristic. More...
 

Detailed Description

Goal: prioritise (1) all-bound, then (2) max number of bound vars, then (3) left-most.

Definition at line 94 of file SipsMetric.h.

Constructor & Destructor Documentation

◆ MaxBoundSips()

souffle::ast::MaxBoundSips::MaxBoundSips ( )
default

Member Function Documentation

◆ evaluateCosts()

std::vector< double > souffle::ast::MaxBoundSips::evaluateCosts ( const std::vector< Atom * >  atoms,
const BindingStore bindingStore 
) const
overrideprotectedvirtual

Evaluates the cost of choosing each atom next in the current schedule.

Parameters
atomsatoms to choose from; may be nullptr
bindingStorethe variables already bound to a value

Implements souffle::ast::SipsMetric.

Definition at line 151 of file SipsMetric.cpp.

157  {
158  // Always better than anything else
159  cost.push_back(0);
160  } else if (numBound == 0) {
161  // Always worse than any number of bound vars
162  cost.push_back(2);
163  } else {
164  // Between 0 and 1, decreasing with more num bound
165  cost.push_back(1 / numBound);
166  }
167  }
168  assert(atoms.size() == cost.size() && "each atom should have exactly one cost");
169  return cost;
170 }
171 
172 std::vector<double> MaxRatioSips::evaluateCosts(
173  const std::vector<Atom*> atoms, const BindingStore& bindingStore) const {
174  // Goal: prioritise max ratio of bound args
175  std::vector<double> cost;
176  for (const auto* atom : atoms) {

The documentation for this class was generated from the following files:
souffle::ast::MaxRatioSips::evaluateCosts
std::vector< double > evaluateCosts(const std::vector< Atom * > atoms, const BindingStore &bindingStore) const override
Evaluates the cost of choosing each atom next in the current schedule.
Definition: SipsMetric.cpp:178