mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	na
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									a1ded7f1ec
								
							
						
					
					
						commit
						b5d1b0336a
					
				
					 3 changed files with 32 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -133,6 +133,7 @@ namespace polysat {
 | 
			
		|||
        void set_max_iterations(unsigned n) { m_max_iterations = n; }
 | 
			
		||||
        unsigned get_num_vars() const { return m_vars.size(); }
 | 
			
		||||
        void  reset();
 | 
			
		||||
        void  propagate_bounds();
 | 
			
		||||
        lbool make_feasible();
 | 
			
		||||
        row add_row(var_t base, unsigned num_vars, var_t const* vars, numeral const* coeffs);
 | 
			
		||||
        std::ostream& display(std::ostream& out) const;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -727,6 +727,11 @@ namespace polysat {
 | 
			
		|||
    }    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    template<typename Ext>
 | 
			
		||||
    void fixplex<Ext>::propagate_bounds() {
 | 
			
		||||
        for (unsigned i = 0; i < m_rows.size(); ++i) 
 | 
			
		||||
            propagate_bounds(row(i));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    template<typename Ext>
 | 
			
		||||
    void fixplex<Ext>::propagate_bounds(row const& r) {
 | 
			
		||||
| 
						 | 
				
			
			@ -753,17 +758,20 @@ namespace polysat {
 | 
			
		|||
                return;
 | 
			
		||||
        }        
 | 
			
		||||
 | 
			
		||||
        std::cout << "bounds " << free_v << "\n";
 | 
			
		||||
        if (free_v != null_var) {
 | 
			
		||||
            if (free_c == 1) {
 | 
			
		||||
                // 
 | 
			
		||||
                // free_v in [lo_sum, hi_sum[
 | 
			
		||||
                // new_bound(r, free_v, lo_sum, hi_sum);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // c = -1
 | 
			
		||||
                // free_v in [1 - hi_sum, 1 - lo_sum[
 | 
			
		||||
                // new_bound(r, free_v, 1 - hi_sum, 1 - lo_sum);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //
 | 
			
		||||
            // c = 1:
 | 
			
		||||
            //   free_v in [lo_sum, hi_sum[
 | 
			
		||||
            // c = -1:
 | 
			
		||||
            //   free_v in [1 - hi_sum, 1 - lo_sum[
 | 
			
		||||
            //
 | 
			
		||||
 | 
			
		||||
            if (free_c == 1) 
 | 
			
		||||
                new_bound(r, free_v, lo_sum, hi_sum);
 | 
			
		||||
            else 
 | 
			
		||||
                new_bound(r, free_v, 1 - hi_sum, 1 - lo_sum);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        for (auto const& e : M.row_entries(r)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,10 +54,23 @@ namespace polysat {
 | 
			
		|||
        fp.run();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void test4() {
 | 
			
		||||
        scoped_fp fp;
 | 
			
		||||
        var_t x = 0, y = 1, z = 2;        
 | 
			
		||||
        var_t ys[3] = { x, y, z };
 | 
			
		||||
        numeral coeffs[3] = { 1, 1, 1 };        
 | 
			
		||||
        fp.add_row(x, 3, ys, coeffs);
 | 
			
		||||
        fp.set_bounds(x, 3, 4);
 | 
			
		||||
        fp.set_bounds(y, 3, 6);
 | 
			
		||||
        fp.run();
 | 
			
		||||
        fp.propagate_bounds();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void tst_fixplex() {
 | 
			
		||||
    polysat::test1();
 | 
			
		||||
    polysat::test2();
 | 
			
		||||
    polysat::test3();
 | 
			
		||||
    polysat::test4();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue