Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'wifi_clean' into 'master'
[simgrid.git] / src / kernel / lmm / bmf.cpp
index 4dfe578..24d6638 100644 (file)
@@ -4,7 +4,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "src/kernel/lmm/bmf.hpp"
-#include "xbt/config.hpp"
 
 #include <Eigen/LU>
 #include <iostream>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_bmf, kernel, "Kernel BMF solver");
 
-simgrid::config::Flag<int>
-    cfg_bmf_max_iteration("bmf/max-iterations",
-                          "Maximum number of steps to be performed while searching for a BMF allocation", 1000);
-
-simgrid::config::Flag<double> cfg_bmf_precision{"bmf/precision",
-                                                "Numerical precision used when computing resource sharing", 1E-12};
-
-namespace simgrid {
-namespace kernel {
-namespace lmm {
+namespace simgrid::kernel::lmm {
 
 AllocationGenerator::AllocationGenerator(Eigen::MatrixXd A) : A_(std::move(A)), alloc_(A_.cols(), 0)
 {
@@ -73,7 +63,6 @@ BmfSolver::BmfSolver(Eigen::MatrixXd A, Eigen::MatrixXd maxA, Eigen::VectorXd C,
     , C_shared_(std::move(shared))
     , phi_(std::move(phi))
     , gen_(A_)
-    , max_iteration_(cfg_bmf_max_iteration)
 
 {
   xbt_assert(max_iteration_ > 0,
@@ -254,30 +243,27 @@ bool BmfSolver::get_alloc(const Eigen::VectorXd& fair_sharing, const allocation_
 
       /* Note: the max_ may artificially increase the rate if priority < 0
        * The equilibrium sets a rho which respects the C_ though */
-      double rate = fair_sharing[cnst_idx] / maxA_(cnst_idx, player_idx);
-      if (min_rate == -1 || double_positive(min_rate - rate, cfg_bmf_precision)) {
+      if (double rate = fair_sharing[cnst_idx] / maxA_(cnst_idx, player_idx);
+          min_rate == -1 || double_positive(min_rate - rate, cfg_bmf_precision)) {
         selected_resource = cnst_idx;
         min_rate          = rate;
       }
-      double bound = initial ? -1 : phi_[player_idx];
       /* Given that the priority may artificially increase the rate,
        * we need to check that the bound given by user respects the resource capacity C_ */
-      if (bound > 0 && bound * A_(cnst_idx, player_idx) < C_[cnst_idx] &&
-          double_positive(min_rate - bound, cfg_bmf_precision)) {
+      if (double bound = initial ? -1 : phi_[player_idx]; bound > 0 &&
+                                                          bound * A_(cnst_idx, player_idx) < C_[cnst_idx] &&
+                                                          double_positive(min_rate - bound, cfg_bmf_precision)) {
         selected_resource = NO_RESOURCE;
         min_rate          = bound;
       }
     }
     alloc[selected_resource].insert(player_idx);
   }
-  bool is_stable = (alloc == last_alloc);
-  if (is_stable)
+  if (alloc == last_alloc) // considered stable
     return true;
 
-  std::vector<int> alloc_by_player      = alloc_map_to_vector(alloc);
-  bool inserted                         = allocations_.insert(alloc_by_player).second;
-  /* oops, allocation already tried, let's pertube it a bit */
-  if (not inserted) {
+  if (auto alloc_by_player = alloc_map_to_vector(alloc); not allocations_.insert(alloc_by_player).second) {
+    /* oops, allocation already tried, let's pertube it a bit */
     XBT_DEBUG("Allocation already tried: %s", debug_alloc(alloc).c_str());
     return disturb_allocation(alloc, alloc_by_player);
   }
@@ -434,10 +420,9 @@ void BmfSystem::get_flows_data(Eigen::Index number_cnsts, Eigen::MatrixXd& A, Ei
     bool active = false;
     bool linked = false; // variable is linked to some constraint (specially for selective_update)
     for (const Element& elem : var.cnsts_) {
-      const boost::intrusive::list_member_hook<>& cnst_hook = selective_update_active
-                                                                  ? elem.constraint->modified_constraint_set_hook_
-                                                                  : elem.constraint->active_constraint_set_hook_;
-      if (not cnst_hook.is_linked())
+      if (const auto& cnst_hook = selective_update_active ? elem.constraint->modified_constraint_set_hook_
+                                                          : elem.constraint->active_constraint_set_hook_;
+          not cnst_hook.is_linked())
         continue;
       /* active and linked variable, lets check its consumption */
       linked             = true;
@@ -518,6 +503,4 @@ template <class CnstList> void BmfSystem::bmf_solve(const CnstList& cnst_list)
   }
 }
 
-} // namespace lmm
-} // namespace kernel
-} // namespace simgrid
+} // namespace simgrid::kernel::lmm