ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
selectionStrategy.hpp
Go to the documentation of this file.
1
20
21#ifndef ABC__OPT__ESLIM__SELECTIONSTRATEGY_h
22#define ABC__OPT__ESLIM__SELECTIONSTRATEGY_h
23
24#include <random>
25#include <queue>
26
28#include "misc/vec/vec.h"
29#include "aig/gia/gia.h"
30
31#include "utils.hpp"
32
34
35namespace eSLIM {
36
37 template<typename T>
39 public:
41 bool getStatus() {return status;};
42 void setSeed(int seed);
43
44 protected:
46 unsigned int getUniformRandomNumber(unsigned int lower, unsigned int upper); // requires lower < upper
48 int getSubcircuitIO(Vec_Int_t* subcircuit, Vec_Int_t* io);
49 // The resulting map assigns inputs of the subcircuit to outputs of the subcircuit s.t. each associated input is reachable from the output
50 std::unordered_map<int, std::unordered_set<int>> computeForbiddenPairs(const Subcircuit& subcir);
51
55
56 private:
57
58 bool filterSubcircuit(const Subcircuit& subcir);
59 void forbiddenPairsRec(Gia_Obj_t * pObj, int input, int min_level, std::unordered_map<int, std::unordered_set<int>>& pairs, const std::unordered_map<int,int>& out_ids );
60
61 bool status = true; //set to false if selection fails too often
62 static constexpr unsigned int min_size = 2;
63
64 std::mt19937 rng;
65 std::bernoulli_distribution bdist;
66 std::uniform_int_distribution<std::mt19937::result_type> udistr;
67
68 };
69
70 template<typename T>
71 class randomizedBFS : public SelectionStrategy<T> {
72 private:
73 randomizedBFS(Gia_Man_t*& gia_man, const eSLIMConfig& cfg, eSLIMLog& log);
74 Subcircuit findSubcircuit();
75 int selectRoot();
76 void checkCandidate(Subcircuit& subcircuit, std::queue<int>& candidate, std::queue<int>& rejected, bool add);
77 const int nPis;
78 const int nPos;
80 friend T;
81 };
82
83 class randomizedBFSFP : public randomizedBFS<randomizedBFSFP> {
84 public :
86 private:
87 Subcircuit getSubcircuitImpl();
88 bool filterSubcircuitImpl(const Subcircuit& subcir);
89
91 };
92
93 class randomizedBFSnoFP : public randomizedBFS<randomizedBFSnoFP> {
94 public:
96 private:
97 Subcircuit getSubcircuitImpl() {return findSubcircuit();};
98 bool filterSubcircuitImpl(const Subcircuit& subcir);
99 bool filterSubcircuitRec(Gia_Obj_t * pObj, unsigned int min_level);
100
102 };
103
104
105 template<typename T>
107 : gia_man(gia_man), cfg(cfg), log(log), rng(std::random_device()()), bdist(cfg.expansion_probability) {
108 }
109
110 template<typename T>
112 rng.seed(seed);
113 }
114
115 template<typename T>
116 unsigned int SelectionStrategy<T>::getUniformRandomNumber(unsigned int lower, unsigned int upper) {
117 udistr.param(std::uniform_int_distribution<std::mt19937::result_type>::param_type(lower, upper));
118 return udistr(rng);
119 }
120
121 template<typename T>
123 return bdist(rng);
124 }
125
126 template<typename T>
127 randomizedBFS<T>::randomizedBFS(Gia_Man_t*& gia_man, const eSLIMConfig& cfg, eSLIMLog& log)
128 : SelectionStrategy<T>(gia_man, cfg, log), nPis(Gia_ManPiNum(gia_man)), nPos(Gia_ManPoNum(gia_man)) {
129 }
130
134
135 inline Subcircuit randomizedBFSFP::getSubcircuitImpl() {
136 Subcircuit subcir = findSubcircuit();
137 subcir.forbidden_pairs = computeForbiddenPairs(subcir);
138 return subcir;
139 }
140
144
145 inline bool randomizedBFSFP::filterSubcircuitImpl(const Subcircuit& subcir) {
146 return true;
147 }
148}
149
151
152#include "selectionStrategy.tpp"
153
154#endif
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Subcircuit getSubcircuit()
int getSubcircuitIO(Vec_Int_t *subcircuit, Vec_Int_t *io)
std::unordered_map< int, std::unordered_set< int > > computeForbiddenPairs(const Subcircuit &subcir)
unsigned int getUniformRandomNumber(unsigned int lower, unsigned int upper)
SelectionStrategy(Gia_Man_t *&gia_man, const eSLIMConfig &cfg, eSLIMLog &log)
randomizedBFSFP(Gia_Man_t *&gia_man, const eSLIMConfig &cfg, eSLIMLog &log)
randomizedBFSnoFP(Gia_Man_t *&gia_man, const eSLIMConfig &cfg, eSLIMLog &log)
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
std::unordered_map< int, std::unordered_set< int > > forbidden_pairs
Definition utils.hpp:83