From 57a3e5cd9506bef527be46ef29eafd84483fe9db Mon Sep 17 00:00:00 2001 From: Ghofrane Amaimi <ghofraneeamaimi@gmail.com> Date: Thu, 21 Jul 2022 15:06:10 +0200 Subject: [PATCH] add the shuffle --- src/algorithm/CNDFS.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/algorithm/CNDFS.cpp b/src/algorithm/CNDFS.cpp index cfa92a4..efd7249 100644 --- a/src/algorithm/CNDFS.cpp +++ b/src/algorithm/CNDFS.cpp @@ -21,6 +21,8 @@ #include <spot/misc/minato.hh> #include <spot/twaalgos/contains.hh> #include <spot/tl/contain.hh> +#include <random> +#include <algorithm> using namespace std; @@ -98,13 +100,13 @@ std::ostream &operator<<(std::ostream &Str, myState_t *state) { } void CNDFS::dfsRed(myState_t *state, vector<myState_t *> &Rp, uint8_t idThread) { - cout << "dfsRed" << endl; +// cout << "dfsRed" << endl; Rp.push_back(state); // computeSuccessors(state); for (const auto &succ: state->new_successors) { - cout << "dfs red 1 " << succ.first->cyan[idThread]<< endl; +// cout << "dfs red 1 " << succ.first->cyan[idThread]<< endl; if (succ.first->cyan[idThread]) { - cout << "cycle detected" << endl; + cout << "cycle detected with the thread " << unsigned(idThread) << endl; exit(0); } // unvisited and not red state @@ -139,10 +141,6 @@ void CNDFS::computeSuccessors(myState_t *state, vector<spot::formula> ap_sog) { const spot::twa_graph_state *ba_current_state = state->right; while (!sog_current_state->isCompletedSucc()); auto p = mAa->get_dict();//avoir le dictionnaire bdd,proposition atomique -// for( auto n: p->var_map) -// { -// cout << n.first <<endl; -// } //fetch the state's atomic proposition for (const auto & vv: sog_current_state->getMarkedPlaces(mMcl->getPlaceProposition())) { @@ -169,13 +167,13 @@ void CNDFS::computeSuccessors(myState_t *state, vector<spot::formula> ap_sog) { } spot::formula pa_sog_result = spot::formula::And(ap_sog); - cout << "formula sog: " << pa_sog_result << endl; +// cout << "formula sog: " << pa_sog_result << endl; //iterate over the successors of a BA state auto ii = mAa->succ_iter(ba_current_state); if (ii->first()) do { - auto pa_ba_result = spot::bdd_to_formula(ii->cond(), p); - cout << "formula ba: " << pa_ba_result << endl; + auto pa_ba_result = spot::bdd_to_formula(ii->cond(), p); // from bdd to formula +// cout << "formula ba: " << pa_ba_result << endl; // std::cout << (spot::are_equivalent(pa_ba_result, pa_sog_result) ? // "Equivalent\n" : "Not equivalent\n"); // std::cout << "match " << c.contained(pa_sog_result, pa_ba_result) << endl; @@ -205,14 +203,13 @@ void CNDFS::computeSuccessors(myState_t *state, vector<spot::formula> ap_sog) { mDataCondWait.notify_all(); } -int i =0; +std::random_device rd; //Perform the dfsBlue void CNDFS::dfsBlue(myState_t *state, vector<myState_t *> &Rp, uint8_t idThread, vector<spot::formula> ap_sog) { - cout << "appel " << i << endl; - i++; state->cyan[idThread] = true; computeSuccessors(state, ap_sog); -// cout << "current state " << state << " cyan " << state->cyan[idThread]<< endl; + std::mt19937 g(rd()); + std::shuffle(state->new_successors.begin(), state->new_successors.end(), g); for (const auto &succ: state->new_successors) { // cout << "cyan " << succ.first->cyan[idThread] << endl; if (!succ.first->blue && !succ.first->cyan[idThread]) { @@ -221,7 +218,7 @@ void CNDFS::dfsBlue(myState_t *state, vector<myState_t *> &Rp, uint8_t idThread, } state->blue = true; if (state->isAcceptance) { - cout << "Acceptance state detected " << endl; +// cout << "Acceptance state detected " << endl; if (state->left->isDeadLock() || state->left->isDiv()) { cout << "cycle detected: an aggregate with deal_lock or live_lock" << endl; exit(0); -- GitLab