void loba_besteffort::load_balance()
{
- // write code here...
- xbt_die("Load-balancing algorithm besteffort not implemented!");
+ pneigh_sort_by_load(std::less<double>());
+ print_loads_p(false, xbt_log_priority_debug);
+
+ unsigned bound = pneigh.size();
+ double sum = get_load();
+ for (unsigned i = 0 ; i < bound ; ++i) {
+ if (get_load() <= pneigh[i]->get_load()) {
+ bound = i;
+ } else {
+ double newsum = sum + pneigh[i]->get_load();
+ if (pneigh[i]->get_load() <= newsum / (i + 2))
+ sum = newsum;
+ else
+ bound = i;
+ }
+ }
+
+ double mean = sum / (bound + 1);
+ for (unsigned i = 0 ; i < bound ; ++i) {
+ double transfer = mean - pneigh[i]->get_load();
+ send(pneigh[i], transfer);
+ XBT_DEBUG("sent %g to %s", transfer, pneigh[i]->get_name());
+ }
}
// Local variables: