]> AND Private Git Repository - loba.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Add reference code for Makhoul's algorithm.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 24 Feb 2011 15:37:10 +0000 (16:37 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 24 Feb 2011 15:37:10 +0000 (16:37 +0100)
makhoul.txt [new file with mode: 0644]

diff --git a/makhoul.txt b/makhoul.txt
new file mode 100644 (file)
index 0000000..344206a
--- /dev/null
@@ -0,0 +1,229 @@
+Makhoul's algorithm... several versions for source code...
+==========================================================
+
+powwow:/home/makhoul# find . -name Fusion.cc -exec md5sum {} +
+powwow:/home/makhoul# find . -name Fusion.cc -ls
+
+
+238d74aac45bec21460e151295598764  ./Desktop/A.Makhoul/DiffusOMNET/Fusion.cc
+---
+5541828    8 -rw-r--r--   1 makhoul  and          6631 mai 14  2007 ./Desktop/A.Makhoul/DiffusOMNET/Fusion.cc
+,----
+| void BRITENode::updateLoad(){
+| 
+|   double deltaSum = 0.;
+|   double deltaMin = this->load;
+|   for (int i = 0; i < gateSize("out"); i++) {
+|     double delta1 = this->load - neighborsLoad[i];
+|     if (delta1 > epsilonDelta) {
+|       delta[i] = delta1;
+|       deltaSum += delta1;
+|       if (deltaMin > delta1)
+|         deltaMin = delta1;
+|     } else
+|       delta[i] = 0;
+|   }
+|   double alpha = deltaMin / (deltaMin + deltaSum);
+|   for (int i = 0; i < gateSize("out"); i++) {
+|     double transfer = alpha * delta[i];
+|     totalSend[i] += transfer;
+|     this->load -= transfer;
+|     
+|   }
+| }
+`----
+
+
+8f5c3e7c5358626bc06726d888d912af  ./Desktop/A.Makhoul/Abdallah-Makhoul/Recherche/Diffus-OMNET/Fusion.cc
+8f5c3e7c5358626bc06726d888d912af  ./Desktop/AbdallahMakhoul/Recherche/Diffus-OMNET/Fusion.cc
+---
+5540991    8 -rw-r--r--   1 makhoul  and          8001 juin 12  2007 ./Desktop/A.Makhoul/Abdallah-Makhoul/Recherche/Diffus-OMNET/Fusion.cc
+6497742    8 -rw-r--r--   1 makhoul  and          8001 juin 12  2007 ./Desktop/AbdallahMakhoul/Recherche/Diffus-OMNET/Fusion.cc
+,----
+| void BRITENode::updateLoad(){
+| 
+|   double deltaSum = 0.;
+|   double deltaMin = this->load;
+|   for (int i = 0; i < gateSize("out"); i++) {
+|     double delta1 = this->load - neighborsLoad[i];
+|     if (delta1 > epsilonDelta) {
+|       delta[i] = delta1;
+|       deltaSum += delta1;
+|       if (deltaMin > delta1)
+|         deltaMin = delta1;
+|     } else
+|       delta[i] = 0;
+|   }
+|   double alpha = deltaMin / (deltaMin + deltaSum);
+|   for (int i = 0; i < gateSize("out"); i++) {
+|     double transfer = alpha * delta[i];
+|     totalSend[i] += transfer;
+|     this->load -= transfer;
+|     
+|   }
+| }
+`----
+
+
+d0b4ef1a4553ff1c9c408390818cf925  ./FusionOmnet/Fusion.cc
+---
+5516053   12 -rw-r--r--   1 makhoul  and          9732 juil. 13  2007 ./FusionOmnet/Fusion.cc
+,----
+| void BRITENode::updateLoad(){
+|   totalSent = 0.;
+|   const double alpha = 1.0 / (gateSize("out") + 1);
+|   const double epsilon = 1.0e-4;
+| 
+|   int nDelta = 0;
+|   for (int i = 0; i < gateSize("out"); i++) {
+|     double d = this->load - neighborsLoad[i];
+|     if (d > epsilon) {
+|       Delta[nDelta].delta = d;
+|       Delta[nDelta].index = i;
+|       nDelta++;
+|     }
+|   }
+| 
+|   std::sort(Delta, Delta + nDelta, DeltaCompDec());
+| 
+|   double neighborLoadMax = 0.0; // maximum load of neighbors to which
+|                                 // something has been sent
+|   for (int i = 0; i < nDelta; i++) {
+|     int index = Delta[i].index;
+|     double delta = this->load - neighborsLoad[index];
+|     if (delta <= epsilon)
+|       break;
+| 
+| #if 0
+|     delta = Delta[i].delta; // does not work well...
+| #endif
+| 
+|     double transfer = alpha * delta;
+|     double transferMax =
+|       std::min(this->load - neighborLoadMax,
+|                (this->load - neighborsLoad[index]) / 2.0);
+| 
+|     if (transfer > transferMax) // ping-pong violated?
+|       transfer = transferMax;
+| 
+|     totalSend[index] += transfer;
+|     this->load -= transfer;
+| 
+|     double newNeighborLoad = neighborsLoad[index] + transfer;
+|     if (newNeighborLoad > neighborLoadMax)
+|       neighborLoadMax = newNeighborLoad;
+|   }
+| 
+| //     double transfer = alpha * Delta[i].delta;
+| //     if((this->load - totalSent) >= neighborsLoad[Delta[i].index] + transfer)
+| //       break;
+| //     else {
+| //       totalSend[i] += transfer;
+| //       this->load -= transfer;
+| //       totalSent+=transfer;
+| //     }
+| //   }
+| 
+|   // double deltaMax = 1.0e-3;  // we consider only positive deltas
+| //   int iMax = -1;             // invalid value
+| //   for (int i = 0; i < gateSize("out"); i++) {
+| //     Delta[i].delta = this->load - neighborsLoad[i];
+| //     if (Delta[i].delta > deltaMax) {
+| //       deltaMax = Delta[i].delta;
+| //       iMax = Delta[i].index;
+| //     }
+| //   }
+| 
+| //   if (iMax != -1) {
+| //       double transfer = alpha * Delta[iMax].delta;
+| //       totalSend[iMax] += transfer;
+| //       this->load -= transfer;
+| //   }
+| }
+`----
+
+
+69f9baf76eb24e0e6cfa539d21c9b6f6  ./Bureau/Fusion.cc
+69f9baf76eb24e0e6cfa539d21c9b6f6  ./Bureau/Simulations-Fusion-Omnet/Fusion.cc
+69f9baf76eb24e0e6cfa539d21c9b6f6  ./Desktop/A.Makhoul/Abdallah-Makhoul/Recherche/Simulations-Fusion-Omnet/Fusion.cc
+69f9baf76eb24e0e6cfa539d21c9b6f6  ./Desktop/AbdallahMakhoul/Recherche/Simulations-Fusion-Omnet/Fusion.cc
+69f9baf76eb24e0e6cfa539d21c9b6f6  ./Simulations-Fusion-Omnet/Fusion.cc
+---
+5516032   12 -rw-r--r--   1 makhoul  and         11160 nov.  7  2008 ./Bureau/Fusion.cc
+5524854   12 -rw-r--r--   1 makhoul  and         11160 nov.  7  2008 ./Bureau/Simulations-Fusion-Omnet/Fusion.cc
+5541114   12 -rw-r--r--   1 makhoul  and         11160 nov. 28  2007 ./Desktop/A.Makhoul/Abdallah-Makhoul/Recherche/Simulations-Fusion-Omnet/Fusion.cc
+6497957   12 -rw-r--r--   1 makhoul  and         11160 nov. 28  2007 ./Desktop/AbdallahMakhoul/Recherche/Simulations-Fusion-Omnet/Fusion.cc
+5516082   12 -rw-r--r--   1 makhoul  and         11160 nov.  7  2008 ./Simulations-Fusion-Omnet/Fusion.cc
+,----
+| void BRITENode::updateLoad(){
+|   totalSent = 0.;
+|   const double alpha = 1.0 / (gateSize("out") + 1);
+|   const double epsilon = par("erreur");
+| 
+|   int nDelta = 0;
+|   for (int i = 0; i < gateSize("out"); i++) {
+|     double d = this->load - neighborsLoad[i];
+|     if (d > epsilon) {
+|       Delta[nDelta].delta = d;
+|       Delta[nDelta].index = i;
+|       nDelta++;
+|     }
+|   }
+| 
+|   std::sort(Delta, Delta + nDelta, DeltaCompDec());
+| 
+|   double neighborLoadMax = 0.0; // maximum load of neighbors to which
+|                                 // something has been sent
+|   for (int i = 0; i < nDelta; i++) {
+|     int index = Delta[i].index;
+|     double delta = this->load - neighborsLoad[index];
+|     if (delta <= epsilon)
+|       break;
+| 
+| #if 0
+|     delta = Delta[i].delta; // does not work well...
+| #endif
+| 
+|     double transfer = alpha * delta;
+|     double transferMax =
+|       std::min(this->load - neighborLoadMax,
+|                (this->load - neighborsLoad[index]) / 2.0);
+| 
+|     if (transfer > transferMax) // ping-pong violated?
+|       transfer = transferMax;
+| 
+|     totalSend[index] += transfer;
+|     this->load -= transfer;
+| 
+|     double newNeighborLoad = neighborsLoad[index] + transfer;
+|     if (newNeighborLoad > neighborLoadMax)
+|       neighborLoadMax = newNeighborLoad;
+|   }
+| 
+|   //     double transfer = alpha * Delta[i].delta;
+|   //     if((this->load - totalSent) >= neighborsLoad[Delta[i].index] + transfer)
+|   //       break;
+|   //     else {
+|   //       totalSend[i] += transfer;
+|   //       this->load -= transfer;
+|   //       totalSent+=transfer;
+|   //     }
+|   //   }
+| 
+|   // double deltaMax = 1.0e-3;  // we consider only positive deltas
+|   //   int iMax = -1;           // invalid value
+|   //   for (int i = 0; i < gateSize("out"); i++) {
+|   //     Delta[i].delta = this->load - neighborsLoad[i];
+|   //     if (Delta[i].delta > deltaMax) {
+|   //       deltaMax = Delta[i].delta;
+|   //       iMax = Delta[i].index;
+|   //     }
+|   //   }
+| 
+|   //   if (iMax != -1) {
+|   //       double transfer = alpha * Delta[iMax].delta;
+|   //       totalSend[iMax] += transfer;
+|   //       this->load -= transfer;
+|   //   }
+| }
+`----