X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/fdc3237504c68a8f89faf2c56fa281df7f2bb972..97a4b4dbf628a627e3c2d5689be89265f56074df:/loba_fairstrategy.cpp?ds=sidebyside diff --git a/loba_fairstrategy.cpp b/loba_fairstrategy.cpp index fd710c2..eb05b49 100644 --- a/loba_fairstrategy.cpp +++ b/loba_fairstrategy.cpp @@ -1,41 +1,57 @@ -#include "loba_fairstrategy.h" - +#include #include XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba); +#include "loba_fairstrategy.h" + /* simple version: * load balance with a least-loaded neighbor, * without breaking the ping-pong condition */ + +class compare { +public : + bool operator()(const neighbor*a, const neighbor*b) { + return a->get_load()>b->get_load(); + } +}; + double loba_fairstrategy::load_balance(double my_load) { int imin = -1; int imax = -1; double min = my_load; double max = -1.0; - for (unsigned i = 0 ; i < pneigh.size() ; ++i) { + + std::sort(pneigh.begin(),pneigh.end(),compare()); + + print_loads_p(); + + double sum_sent=0; + bool found=true; + + while(found) { + found=false; + for (unsigned i = 0 ; i < pneigh.size() ; ++i) { double l = pneigh[i]->get_load(); if (l >= my_load) - continue; - if (l < min) { - imin = i; - min = l; - } - if (l > max) { - imax = i; - max = l; - } - } - if (imin != -1) { - // found someone - double balance = (my_load - max) / 2; - DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, my_load, balance); - pneigh[imin]->set_to_send(balance); - return balance; - } else { - return 0.0; - } + continue; + if(lset_load(l+1); + pneigh[i]->add_to_send(1); + INFO1("sent to %s",pneigh[i]->get_name()); + my_load--; + sum_sent++; + } + } + } + + + + return sum_sent; + } // Local variables: