mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
improve pre-processing
This commit is contained in:
parent
a634876180
commit
3cc9d7f443
22 changed files with 147 additions and 80 deletions
|
@ -23,10 +23,9 @@ Author:
|
|||
|
||||
namespace opt {
|
||||
|
||||
bool preprocess::find_mutexes(vector<soft>& softs, rational& lower) {
|
||||
expr_ref_vector fmls(m);
|
||||
obj_map<expr, rational> preprocess::soft2map(vector<soft> const& softs, expr_ref_vector& fmls) {
|
||||
obj_map<expr, rational> new_soft;
|
||||
for (soft& sf : softs) {
|
||||
for (soft const& sf : softs) {
|
||||
m_trail.push_back(sf.s);
|
||||
if (new_soft.contains(sf.s))
|
||||
new_soft[sf.s] += sf.weight;
|
||||
|
@ -34,6 +33,12 @@ namespace opt {
|
|||
new_soft.insert(sf.s, sf.weight);
|
||||
fmls.push_back(sf.s);
|
||||
}
|
||||
return new_soft;
|
||||
}
|
||||
|
||||
bool preprocess::find_mutexes(vector<soft>& softs, rational& lower) {
|
||||
expr_ref_vector fmls(m);
|
||||
obj_map<expr, rational> new_soft = soft2map(softs, fmls);
|
||||
vector<expr_ref_vector> mutexes;
|
||||
lbool is_sat = s.find_mutexes(fmls, mutexes);
|
||||
if (is_sat == l_false)
|
||||
|
@ -97,6 +102,8 @@ namespace opt {
|
|||
preprocess::preprocess(solver& s): m(s.get_manager()), s(s), m_trail(m) {}
|
||||
|
||||
bool preprocess::operator()(vector<soft>& soft, rational& lower) {
|
||||
return find_mutexes(soft, lower);
|
||||
if (!find_mutexes(soft, lower))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace opt {
|
|||
solver& s;
|
||||
expr_ref_vector m_trail;
|
||||
|
||||
obj_map<expr, rational> soft2map(vector<soft> const& softs, expr_ref_vector& fmls);
|
||||
bool find_mutexes(vector<soft>& softs, rational& lower);
|
||||
void process_mutex(expr_ref_vector& mutex, obj_map<expr, rational>& new_soft, rational& lower);
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ namespace opt {
|
|||
lbool find_mutexes(expr_ref_vector const& vars, vector<expr_ref_vector>& mutexes) override;
|
||||
lbool preferred_sat(expr_ref_vector const& asms, vector<expr_ref_vector>& cores) override;
|
||||
void get_levels(ptr_vector<expr> const& vars, unsigned_vector& depth) override;
|
||||
expr_ref_vector get_trail() override { return m_context.get_trail(); }
|
||||
expr_ref_vector get_trail(unsigned max_level) override { return m_context.get_trail(max_level); }
|
||||
expr_ref_vector cube(expr_ref_vector&, unsigned) override { return expr_ref_vector(m); }
|
||||
void set_phase(expr* e) override { m_context.set_phase(e); }
|
||||
phase* get_phase() override { return m_context.get_phase(); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue