CYCLUS
|
A GreedyPreconditioner conditions an ExchangeGraph for a GreedySolver by ordering the RequestGroups and ExchangeNodes within each RequestGroup weighted by their commodity's importance.
The Graph is conditioned in-place.
Commodity weights are provided to the conditioner via its constructor. A larger weight implies a higher level of importance for solving.
The conditioning weight for a node is calculated as $w_cond_i = w_commod_i * (1 + \frac{\overline{p_i}}{1 + \overline{p_i}})$, where $w_cond_i$ is the calculated conditioning weight, $w_commod_i$ is node $i$'s commodity's weight, and $\overline{p_i}$ is the average preference of all bid arcs associated with node $i$.
First, the ExchangeNodes of each RequestGroup are sorted according to their conditioning weights. Then, the average weight of each RequestGroup is determined. Finally, each RequestGroup is sorted according to their average weight.
Consider the following commodity-to-weight mapping: {"spam": 5, "eggs": 2}. Now consider two RequestGroups with the following commodities: #. g1 = {"eggs", "spam", "eggs"} #. g2 = {"eggs", "spam"} And the following preference-commodity mapping: {g1: {"spam": 3/4, "eggs": 1/4}, g2: {"spam": 1, "eggs": 1}.
First, the groups will be ordered by conditioning weights: #. g1 = {"spam", "eggs", "eggs"} #. g2 = {"spam", "eggs"}
Finally, the groups themselves will be ordered by average weight: #. {g2, g1}
Definition at line 60 of file greedy_preconditioner.h.
#include <greedy_preconditioner.h>
Public Types | |
enum | WgtOrder { REVERSE , END } |
Public Member Functions | |
void | Condition (ExchangeGraph *graph) |
bool | GroupComp (const RequestGroup::Ptr l, const RequestGroup::Ptr r) |
bool | NodeComp (const ExchangeNode::Ptr l, const ExchangeNode::Ptr r) |
GreedyPreconditioner () | |
GreedyPreconditioner (const std::map< std::string, double > &commod_weights) | |
GreedyPreconditioner (const std::map< std::string, double > &commod_weights, WgtOrder order) | |
the order of commodity weights
Enumerator | |
---|---|
REVERSE | |
END | a flag for commodity weights given in the reverse order, i.e, lightest first default flag, indicating heaviest-first ordering |
Definition at line 63 of file greedy_preconditioner.h.
cyclus::GreedyPreconditioner::GreedyPreconditioner | ( | ) |
constructor if weights are given in heaviest-first order
Definition at line 28 of file greedy_preconditioner.cc.
cyclus::GreedyPreconditioner::GreedyPreconditioner | ( | const std::map< std::string, double > & | commod_weights | ) |
Definition at line 30 of file greedy_preconditioner.cc.
cyclus::GreedyPreconditioner::GreedyPreconditioner | ( | const std::map< std::string, double > & | commod_weights, |
WgtOrder | order ) |
constructor if weights may not be given in heaviest-first order
Definition at line 37 of file greedy_preconditioner.cc.
void cyclus::GreedyPreconditioner::Condition | ( | ExchangeGraph * | graph | ) |
conditions the graph as described above
KeyError | if a commodity is in the graph but not in the weight mapping |
Definition at line 45 of file greedy_preconditioner.cc.
|
inline |
a comparitor for ordering containers of Request::Ptrs in descending order based on their average commodity weight
Definition at line 96 of file greedy_preconditioner.h.
|
inline |
a comparitor for ordering containers of ExchangeNode::Ptrs in descending order based on their commodity's weight
Definition at line 87 of file greedy_preconditioner.h.