#include <cmath> // std::isfinite
-#include <functional>
#include <numeric>
#include <xbt/log.h>
void loba_2besteffort::load_balance()
{
- using std::placeholders::_1;
- using std::placeholders::_2;
-
pneigh_sort_by_load(std::less<double>());
print_loads_p(false, xbt_log_priority_debug);
double sum = get_load() +
std::accumulate(pneigh.begin(), pneigh.end(), 0.0,
- std::bind(std::plus<double>(), _1,
- std::bind(&neighbor::get_load, _2)));
+ [](double x, const neighbor* n) {
+ return x + n->get_load();
+ });
double mean = sum / (pneigh.size() + 1);
XBT_DEBUG("sum = %g ; mean = %g", sum, mean);
// don't continue if get_load() <= mean, or pneigh[i]->get_load >= mean
if (transfer <= 0.0)
break;
+ if (opt::loba_best_divisor)
+ transfer /= opt::loba_best_divisor;
send(pneigh[i], transfer);
XBT_DEBUG("sent %g to %s", transfer, pneigh[i]->get_name());
}