Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use xbt::random instead of rand and srand
authormlaurent <mathieu.laurent@ens-rennes.fr>
Wed, 7 Jun 2023 13:26:35 +0000 (15:26 +0200)
committermlaurent <mathieu.laurent@ens-rennes.fr>
Wed, 7 Jun 2023 13:26:35 +0000 (15:26 +0200)
src/mc/api/State.cpp
src/mc/api/strategy/UniformStrategy.hpp

index cc85d8c..0b6fc02 100644 (file)
@@ -10,6 +10,7 @@
 #include "src/mc/api/strategy/UniformStrategy.hpp"
 #include "src/mc/explo/Exploration.hpp"
 #include "src/mc/mc_config.hpp"
+#include "xbt/random.hpp"
 
 #include <algorithm>
 #include <boost/range/algorithm.hpp>
@@ -24,7 +25,6 @@ State::State(RemoteApp& remote_app) : num_(++expended_states_)
 {
   XBT_VERB("Creating a guide for the state");
 
-  srand(_sg_mc_random_seed);
   
   if (_sg_mc_strategy == "none")
     strategy_ = std::make_shared<BasicStrategy>();
@@ -32,8 +32,10 @@ State::State(RemoteApp& remote_app) : num_(++expended_states_)
     strategy_ = std::make_shared<MaxMatchComm>();
   else if (_sg_mc_strategy == "min_match_comm")
     strategy_ = std::make_shared<MinMatchComm>();
-  else if (_sg_mc_strategy == "uniform") 
+  else if (_sg_mc_strategy == "uniform") {
+    xbt::random::set_mersenne_seed(_sg_mc_random_seed);  
     strategy_ = std::make_shared<UniformStrategy>();
+  }
   else
     THROW_IMPOSSIBLE;
 
index 1dfcd07..8e9726f 100644 (file)
@@ -7,6 +7,7 @@
 #define SIMGRID_MC_UNIFORMSTRATEGY_HPP
 
 #include "src/mc/transition/Transition.hpp"
+#include "xbt/random.hpp"
 
 #define MAX_RAND 100000
 
@@ -20,12 +21,12 @@ public:
   UniformStrategy()
   {
     for (long aid = 0; aid < 10; aid++)
-      valuation[aid] = rand() % 10000;
+      valuation[aid] = xbt::random::uniform_int(0, MAX_RAND);
   }
   void copy_from(const Strategy* strategy) override
   {
     for (auto& [aid, _] : actors_to_run_)
-      valuation[aid] = rand() % 10000;
+      valuation[aid] = xbt::random::uniform_int(0, MAX_RAND);
   }
 
   std::pair<aid_t, int> best_transition(bool must_be_todo) const override
@@ -44,7 +45,7 @@ public:
     if (possibilities == 1)
       chosen = 0;
     else
-      chosen = rand() % possibilities;
+       chosen = xbt::random::uniform_int(0, possibilities-1);
 
     for (auto const& [aid, actor] : actors_to_run_) {
        if (((not actor.is_todo()) and must_be_todo) or actor.is_done() or (not actor.is_enabled()))