DESCRIPTIONS DES ALGORITHMES D'ÉQUILIBRAGE
+besteffort
+==========
+Ordonne les voisins du moins chargé au plus chargé.
+Trouve ensuite, en les prenant dans ce ordre, le nombre maximal de
+voisins tels que tous ont une charge inférieure à la moyenne des
+charges des voisins sélectionnes, et de soi-même.
+
+Les transferts de charge sont ensuite fait en visant cette moyenne pour
+tous les voisins sélectionnés. On envoie une quantité de charge égale
+à (moyenne - charge_du_voisin).
+
+
fairstrategy
============
Ordonne les voisins du plus chargé au moins chargé.
-* Create git repo for papers.
- Done.
-
-* Implement algorithm discussed on Feb. 23 with R.C.
-
-* Implement makhoul2 algorithm?
- See source code for omnet++.
-
* Implement some random initial distribution of load
Options -r seed, -R [algo ?]
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: