Skip to content

Commit 1cb2d40

Browse files
Natasha Yogananda Jeppudanielsn
Natasha Yogananda Jeppu
authored andcommitted
Store clause counter value from satcheck_minisat instead of storing the clause itself
1 parent 4b9490b commit 1cb2d40

File tree

3 files changed

+26
-22
lines changed

3 files changed

+26
-22
lines changed

src/solvers/sat/satcheck_minisat2.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,10 @@ void satcheck_minisat2_baset<T>::lcnf(const bvt &bv)
140140

141141
solver->addClause_(c);
142142

143-
with_solver_hardness(
144-
[&bv](solver_hardnesst &hardness) { hardness.register_clause(bv); });
143+
size_t solver_clause_num = clause_counter;
144+
with_solver_hardness([&bv, &solver_clause_num](solver_hardnesst &hardness) {
145+
hardness.register_clause(bv, solver_clause_num);
146+
});
145147
clause_counter++;
146148
}
147149
catch(const Minisat::OutOfMemoryException &)

src/solvers/solver_hardness.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -89,24 +89,28 @@ void solver_hardnesst::register_assertion_ssas(
8989
current_hardness = {};
9090
}
9191

92-
void solver_hardnesst::register_clause(const bvt &bv)
92+
void solver_hardnesst::register_clause(
93+
const bvt &bv,
94+
const size_t solver_clause_num)
9395
{
9496
current_hardness.clauses++;
9597
current_hardness.literals += bv.size();
96-
std::vector<int> clause;
9798

9899
for(const auto &literal : bv)
99100
{
100101
current_hardness.variables.insert(literal.var_no());
101-
102-
int signed_literal = literal.var_no();
103-
if(literal.sign())
104-
signed_literal = -signed_literal;
105-
clause.push_back(signed_literal);
106102
}
107-
clause.push_back(0);
108-
std::sort(clause.begin(), clause.end());
109-
current_hardness.clause_set.push_back(clause);
103+
104+
#ifdef DEBUG
105+
std::cout << solver_clause_num << ": ";
106+
for(const auto &literal : bv)
107+
std::cout << literal.dimacs() << " ";
108+
std::cout << "0\n";
109+
#endif
110+
111+
current_hardness.clause_set.push_back(solver_clause_num + 1);
112+
std::sort(
113+
current_hardness.clause_set.begin(), current_hardness.clause_set.end());
110114
}
111115

112116
void solver_hardnesst::set_outfile(const std::string &file_name)
@@ -166,10 +170,8 @@ void solver_hardnesst::produce_report()
166170
json_arrayt sat_hardness_clause_set_json;
167171
for(auto const &clause : hardness.clause_set)
168172
{
169-
json_arrayt clause_json;
170-
for(auto const &lit : clause)
171-
clause_json.push_back(json_numbert{std::to_string(lit)});
172-
sat_hardness_clause_set_json.push_back(clause_json);
173+
sat_hardness_clause_set_json.push_back(
174+
json_numbert{std::to_string(clause)});
173175
}
174176
sat_hardness_json["ClauseSet"] = sat_hardness_clause_set_json;
175177

@@ -208,10 +210,8 @@ void solver_hardnesst::produce_report()
208210
json_arrayt assertion_sat_hardness_clause_set_json;
209211
for(auto const &clause : assertion_stats.sat_hardness.clause_set)
210212
{
211-
json_arrayt clause_json;
212-
for(auto const &lit : clause)
213-
clause_json.push_back(json_numbert{std::to_string(lit)});
214-
assertion_sat_hardness_clause_set_json.push_back(clause_json);
213+
assertion_sat_hardness_clause_set_json.push_back(
214+
json_numbert{std::to_string(clause)});
215215
}
216216
assertion_hardness_json["ClauseSet"] =
217217
assertion_sat_hardness_clause_set_json;

src/solvers/solver_hardness.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct solver_hardnesst
5050
size_t clauses = 0;
5151
size_t literals = 0;
5252
std::unordered_set<size_t> variables = {};
53-
std::vector<std::vector<int>> clause_set = {};
53+
std::vector<int> clause_set = {};
5454

5555
sat_hardnesst &operator+=(const sat_hardnesst &other);
5656
};
@@ -106,7 +106,9 @@ struct solver_hardnesst
106106
/// Called e.g. from the `satcheck_minisat2::lcnf`, this function adds the
107107
/// complexity statistics from the last SAT query to the `current_ssa_key`.
108108
/// \param bv: the clause (vector of literals)
109-
void register_clause(const bvt &bv);
109+
/// \param solver_clause_num: clause counter value passed from
110+
/// `satcheck_minisat2::lcnf`
111+
void register_clause(const bvt &bv, const size_t solver_clause_num);
110112

111113
void set_outfile(const std::string &file_name);
112114

0 commit comments

Comments
 (0)