X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/48b49c2ca6573b31386bd5afd4e68304c740e8ec..8f5e351ba6584886c256d88d2112bd1efab5f1bf:/loba_lln.cpp diff --git a/loba_lln.cpp b/loba_lln.cpp index 35acb26..0422b38 100644 --- a/loba_lln.cpp +++ b/loba_lln.cpp @@ -7,32 +7,34 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba); void loba_lln::load_balance() { - std::vector listLessLoadedNeighbors; - unsigned i; - double myLoad = get_load(); - unsigned size = pneigh.size(); - double *S = new double[size]; - double lessLoad = get_load(); + std::vector listLessLoadedNeighbors; + unsigned i; + double myLoad = get_load(); + unsigned size = pneigh.size(); + double *S = new double[size]; + double lessLoad = get_load(); - listLessLoadedNeighbors.clear(); - for(i=0;iget_load()< lessLoad ) - listLessLoadedNeighbors.push_back(i); - } - int nbLessLoadedNeighbors=listLessLoadedNeighbors.size(); - for( i=0; iget_load())/(nbLessLoadedNeighbors+1); - if(myLoad-delta > pneigh[listLessLoadedNeighbors[i]]->get_load()) { - S[i]=delta; - myLoad-=delta; - } - } - for(i=0; iget_name()); - } - delete[] S; + listLessLoadedNeighbors.clear(); + for (i = 0; i < size; ++i) { + S[i] = 0.0; + if (pneigh[i]->get_load() < lessLoad) + listLessLoadedNeighbors.push_back(i); + } + int nbLessLoadedNeighbors = listLessLoadedNeighbors.size(); + for (i = 0; i < listLessLoadedNeighbors.size(); ++i) { + double delta = + (myLoad - pneigh[listLessLoadedNeighbors[i]]->get_load()) / + (nbLessLoadedNeighbors + 1); + if (myLoad - delta > pneigh[listLessLoadedNeighbors[i]]->get_load()) { + S[i] = delta; + myLoad -= delta; + } + } + for (i = 0; i < size; ++i) { + send(pneigh[i], S[i]); + XBT_DEBUG("sent to %s", pneigh[i]->get_name()); + } + delete[] S; } // Local variables: