Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Kill src/include
[simgrid.git] / src / kernel / lmm / bmf.cpp
index 816e5e4..a754fd5 100644 (file)
@@ -1,10 +1,10 @@
-/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2023. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "src/kernel/lmm/bmf.hpp"
-#include "xbt/config.hpp"
+#include "src/simgrid/math_utils.h"
 
 #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 +64,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,
@@ -320,7 +310,7 @@ bool BmfSolver::is_bmf(const Eigen::VectorXd& rho) const
   Eigen::VectorXd remaining = (A_ * rho) - C_;
   remaining                 = remaining.array() * shared.array(); // ignore non shared resources
   bmf                       = bmf && (not std::any_of(remaining.data(), remaining.data() + remaining.size(),
-                                [](double v) { return double_positive(v, sg_maxmin_precision); }));
+                                                      [](double v) { return double_positive(v, sg_precision_workamount); }));
 
   // 3) every player receives maximum share in at least 1 saturated resource
   // due to subflows, compare with the maximum consumption and not the A matrix
@@ -332,15 +322,15 @@ bool BmfSolver::is_bmf(const Eigen::VectorXd& rho) const
 
   // matrix_ji: boolean indicating player p has the maximum share at resource j
   Eigen::MatrixXi player_max_share =
-      ((usage.array().colwise() - max_share.array()).abs() <= sg_maxmin_precision).cast<int>();
+      ((usage.array().colwise() - max_share.array()).abs() <= sg_precision_workamount).cast<int>();
   // but only saturated resources must be considered
-  Eigen::VectorXi saturated = (remaining.array().abs() <= sg_maxmin_precision).cast<int>();
+  Eigen::VectorXi saturated = (remaining.array().abs() <= sg_precision_workamount).cast<int>();
   XBT_DEBUG("Saturated_j resources:\n%s", debug_eigen(saturated).c_str());
   player_max_share.array().colwise() *= saturated.array();
 
   // just check if it has received at least it's bound
   for (int p = 0; p < rho.size(); p++) {
-    if (double_equals(rho[p], phi_[p], sg_maxmin_precision)) {
+    if (double_equals(rho[p], phi_[p], sg_precision_workamount)) {
       player_max_share(0, p) = 1; // it doesn't really matter, just to say that it's a bmf
       saturated[0]           = 1;
     }
@@ -514,6 +504,4 @@ template <class CnstList> void BmfSystem::bmf_solve(const CnstList& cnst_list)
   }
 }
 
-} // namespace lmm
-} // namespace kernel
-} // namespace simgrid
+} // namespace simgrid::kernel::lmm