24 SymState &state,
bool ignore_memory) {
27 for (
auto &p : state.
mem) {
28 params.emplace(std::make_pair(p.first,
wordToFloat(p.second)));
45 std::unordered_map<int, float> ¶ms,
48 for (
int j = 0; j < max_num_trials; j++) {
54 int total_num_params = params.size();
56 int total_num_consts = params.size();
57 if (total_num_consts == total_num_params) {
75 std::unordered_map<int, float> ¶ms,
78 std::unordered_map<std::string, gymbo::Sym *> unique_terms_map;
79 std::unordered_map<std::string, bool> assignments_map;
80 std::shared_ptr<gymbosat::Expr> path_constraints_expr =
85 std::vector<Sym> new_constraints;
86 for (
auto &ass : assignments_map) {
88 new_constraints.emplace_back(*unique_terms_map[ass.first]);
90 new_constraints.emplace_back(
95 for (
int j = 0; j < max_num_trials; j++) {
96 is_sat = optimizer.
solve(new_constraints, params);
109 std::shared_ptr<gymbosat::Expr> learnt_constraints =
110 std::make_shared<gymbosat::Const>(
false);
111 for (
auto &ass : assignments_map) {
113 learnt_constraints = std::make_shared<gymbosat::Or>(
115 std::make_shared<gymbosat::Not>(
116 std::make_shared<gymbosat::Var>(ass.first)));
118 learnt_constraints = std::make_shared<gymbosat::Or>(
120 std::make_shared<gymbosat::Var>(ass.first));
124 path_constraints_expr = std::make_shared<gymbosat::And>(
125 path_constraints_expr, learnt_constraints);
Implementation of gradient descent optimizer.
Definition: compiler.h:11
float wordToFloat(uint32_t word)
Converts a 32-bit word representation to a float value.
Definition: utils.h:51
void initialize_params(std::unordered_map< int, float > ¶ms, SymState &state, bool ignore_memory)
Initialize Parameter Values from Memory.
Definition: smt.h:23
void smt_union_solver(bool &is_sat, SymState &state, std::unordered_map< int, float > ¶ms, GDOptimizer &optimizer, int max_num_trials, bool ignore_memory)
SMT Solver with Unified Loss Function.
Definition: smt.h:44
void smt_dpll_solver(bool &is_sat, SymState &state, std::unordered_map< int, float > ¶ms, GDOptimizer &optimizer, int max_num_trials, bool ignore_memory)
SMT Solver using DPLL as its backend.
Definition: smt.h:74
bool satisfiableDPLL(std::shared_ptr< Expr > expr, std::unordered_map< std::string, bool > &assignments_map)
Check satisfiability of a logical expression using the DPLL algorithm.
Definition: sat.h:685
std::shared_ptr< Expr > pathconstraints2expr(std::vector< gymbo::Sym > &constraints, std::unordered_map< std::string, gymbo::Sym * > &unique_sym_map)
Convert a vector of symbolic path constraints to a logical expression.
Definition: sat.h:765
Implementation of SAT solver.
Gradient Descent Optimizer for Symbolic Path Constraints.
Definition: gd.h:28
int seed
Random seed for initializing parameter values.
Definition: gd.h:42
bool solve(std::vector< Sym > &path_constraints, std::unordered_map< int, float > ¶ms, bool is_init_params_const=true)
Solve path constraints using gradient descent optimization.
Definition: gd.h:110
Struct representing the symbolic state of the symbolic execution.
Definition: type.h:1042
std::vector< Sym > path_constraints
Definition: type.h:1049
Mem mem
Definition: type.h:1045
Struct representing a symbolic expression.
Definition: type.h:265