mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 03:32:28 +00:00 
			
		
		
		
	adding C++ API for optimization
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									776f1dc631
								
							
						
					
					
						commit
						13e454ad63
					
				
					 1 changed files with 60 additions and 0 deletions
				
			
		|  | @ -1479,6 +1479,66 @@ namespace z3 { | |||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     class optimize : public object { | ||||
|         Z3_optimize m_opt; | ||||
|     public: | ||||
|         class handle { | ||||
|             unsigned m_h; | ||||
|         public: | ||||
|             handle(unsigned h): m_h(h) {} | ||||
|             unsigned h() const { return m_h; } | ||||
|         }; | ||||
|         optimize(context& c):object(c) { m_opt = Z3_mk_optimize(c); Z3_optimize_inc_ref(c, m_opt); } | ||||
|         ~optimize() { Z3_optimize_dec_ref(ctx(), m_opt); } | ||||
|         operator Z3_optimize() const { return m_opt; } | ||||
| 
 | ||||
|         void add(expr const& e) { | ||||
|             assert(e.is_bool()); | ||||
|             Z3_optimize_assert(ctx(), m_opt, e); | ||||
|         } | ||||
|         handle add(expr const& e, unsigned weight) { | ||||
|             assert(e.is_bool()); | ||||
|             std::stringstream strm; | ||||
|             strm << weight;  | ||||
|             return handle(Z3_optimize_assert_soft(ctx(), m_opt, e, strm.str().c_str(), 0));  | ||||
|         } | ||||
|         handle add(expr const& e, char const* weight) { | ||||
|             assert(e.is_bool()); | ||||
|             return handle(Z3_optimize_assert_soft(ctx(), m_opt, e, weight, 0));  | ||||
|         } | ||||
|         handle maximzie(expr const& e) { | ||||
|             return handle(Z3_optimize_maximize(ctx(), m_opt, e)); | ||||
|         } | ||||
|         handle minimize(expr const& e) { | ||||
|             return handle(Z3_optimize_minimize(ctx(), m_opt, e)); | ||||
|         } | ||||
| 
 | ||||
|         check_result check() { Z3_lbool r = Z3_optimize_check(ctx(), m_opt); check_error(); return to_check_result(r); } | ||||
| 
 | ||||
|         model get_model() const { Z3_model m = Z3_optimize_get_model(ctx(), m_opt); check_error(); return model(ctx(), m); } | ||||
| 
 | ||||
|         void set(params const & p) { Z3_optimize_set_params(ctx(), m_opt, p); check_error(); } | ||||
| 
 | ||||
|         expr lower(handle const& h) { | ||||
|             Z3_ast r = Z3_optimize_get_lower(ctx(), m_opt, h.h()); | ||||
|             check_error(); | ||||
|             return expr(ctx(), r); | ||||
|         } | ||||
| 
 | ||||
|         expr upper(handle const& h) { | ||||
|             Z3_ast r = Z3_optimize_get_upper(ctx(), m_opt, h.h()); | ||||
|             check_error(); | ||||
|             return expr(ctx(), r); | ||||
|         } | ||||
| 
 | ||||
|         stats statistics() const { Z3_stats r = Z3_optimize_get_statistics(ctx(), m_opt); check_error(); return stats(ctx(), r); } | ||||
|          | ||||
|         friend std::ostream & operator<<(std::ostream & out, optimize const & s) { out << Z3_optimize_to_string(s.ctx(), s.m_opt); return out; } | ||||
| 
 | ||||
|         std::string help() const { char const * r = Z3_optimize_get_help(ctx(), m_opt); check_error();  return r; } | ||||
|          | ||||
|     }; | ||||
| 
 | ||||
|     inline tactic fail_if(probe const & p) { | ||||
|         Z3_tactic r = Z3_tactic_fail_if(p.ctx(), p); | ||||
|         p.check_error(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue