mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 03:32:28 +00:00 
			
		
		
		
	use param_ref in nla_solver (#6862)
* use param_ref in nla_solver Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * add parameters Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add parameters Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * replace nla_setting by command line parameters * delete nla_setting.h --------- Signed-off-by: Lev Nachmanson <levnach@hotmail.com> Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									63ea8efcfb
								
							
						
					
					
						commit
						252a30e727
					
				
					 16 changed files with 67 additions and 164 deletions
				
			
		|  | @ -24,8 +24,8 @@ namespace nla { | |||
|         common(c), | ||||
|         m_pdd_manager(m_core.m_lar_solver.number_of_vars()), | ||||
|         m_solver(m_core.m_reslim, m_pdd_manager), | ||||
|         m_lar_solver(m_core.m_lar_solver) | ||||
| 
 | ||||
|         m_lar_solver(m_core.m_lar_solver), | ||||
|         m_quota(m_core.params().arith_nl_gr_q()) | ||||
|     {} | ||||
| 
 | ||||
|     lp::lp_settings& grobner::lp_settings() { | ||||
|  | @ -33,8 +33,10 @@ namespace nla { | |||
|     } | ||||
| 
 | ||||
|     void grobner::operator()() { | ||||
|         unsigned& quota = c().m_nla_settings.grobner_quota; | ||||
|         if (quota == 1) | ||||
|         if (m_quota == 0) | ||||
|             m_quota = c().params().arith_nl_gr_q();                     | ||||
| 
 | ||||
|         if (m_quota == 1) | ||||
|             return; | ||||
| 
 | ||||
|         lp_settings().stats().m_grobner_calls++; | ||||
|  | @ -59,12 +61,14 @@ namespace nla { | |||
|              | ||||
|         } | ||||
| 
 | ||||
|         if (quota > 1) | ||||
|             quota--; | ||||
|         if (m_quota > 0) | ||||
|            --m_quota; | ||||
| 
 | ||||
|         IF_VERBOSE(2, verbose_stream() << "grobner miss, quota " << quota << "\n"); | ||||
|         IF_VERBOSE(2, verbose_stream() << "grobner miss, quota " << m_quota << "\n"); | ||||
|         IF_VERBOSE(4, diagnose_pdd_miss(verbose_stream())); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #if 0 | ||||
|         // diagnostics: did we miss something
 | ||||
|         vector<dd::pdd> eqs; | ||||
|  | @ -239,11 +243,11 @@ namespace nla { | |||
|     | ||||
|         struct dd::solver::config cfg; | ||||
|         cfg.m_max_steps = m_solver.equations().size(); | ||||
|         cfg.m_max_simplified = c().m_nla_settings.grobner_max_simplified; | ||||
|         cfg.m_eqs_growth = c().m_nla_settings.grobner_eqs_growth; | ||||
|         cfg.m_expr_size_growth = c().m_nla_settings.grobner_expr_size_growth; | ||||
|         cfg.m_expr_degree_growth = c().m_nla_settings.grobner_expr_degree_growth; | ||||
|         cfg.m_number_of_conflicts_to_report = c().m_nla_settings.grobner_number_of_conflicts_to_report; | ||||
|         cfg.m_max_simplified = c().params().arith_nl_grobner_max_simplified(); | ||||
|         cfg.m_eqs_growth = c().params().arith_nl_grobner_eqs_growth(); | ||||
|         cfg.m_expr_size_growth = c().params().arith_nl_grobner_expr_size_growth(); | ||||
|         cfg.m_expr_degree_growth = c().params().arith_nl_grobner_expr_degree_growth(); | ||||
|         cfg.m_number_of_conflicts_to_report = c().params().arith_nl_grobner_cnfl_to_report(); | ||||
|         m_solver.set(cfg); | ||||
|         m_solver.adjust_cfg(); | ||||
|         m_pdd_manager.set_max_num_nodes(10000); // or something proportional to the number of initial nodes.
 | ||||
|  | @ -348,9 +352,9 @@ namespace nla { | |||
|             unsigned k = m_lar_solver.get_base_column_in_row(row); | ||||
|             if (m_lar_solver.column_is_free(k) && k != j) | ||||
|                 continue; | ||||
|             CTRACE("grobner", matrix.m_rows[row].size() > c().m_nla_settings.grobner_row_length_limit, | ||||
|             CTRACE("grobner", matrix.m_rows[row].size() > c().params().arith_nl_grobner_row_length_limit(), | ||||
|                    tout << "ignore the row " << row << " with the size " << matrix.m_rows[row].size() << "\n";);  | ||||
|             if (matrix.m_rows[row].size() > c().m_nla_settings.grobner_row_length_limit) | ||||
|             if (matrix.m_rows[row].size() > c().params().arith_nl_horner_row_length_limit()) | ||||
|                 continue; | ||||
|             for (auto& rc : matrix.m_rows[row])  | ||||
|                 add_var_and_its_factors_to_q_and_collect_new_rows(rc.var(), q); | ||||
|  | @ -373,12 +377,12 @@ namespace nla { | |||
|         while (!vars.empty()) { | ||||
|             j = vars.back(); | ||||
|             vars.pop_back(); | ||||
|             if (c().m_nla_settings.grobner_subs_fixed > 0 && c().var_is_fixed_to_zero(j)) { | ||||
|             if (c().params().arith_nl_grobner_subs_fixed() > 0 && c().var_is_fixed_to_zero(j)) { | ||||
|                 r = m_pdd_manager.mk_val(val_of_fixed_var_with_deps(j, zero_dep)); | ||||
|                 dep = zero_dep; | ||||
|                 return r; | ||||
|             } | ||||
|             if (c().m_nla_settings.grobner_subs_fixed == 1 && c().var_is_fixed(j)) | ||||
|             if (c().params().arith_nl_grobner_subs_fixed() == 1 && c().var_is_fixed(j)) | ||||
|                 r *= val_of_fixed_var_with_deps(j, dep); | ||||
|             else if (!c().is_monic_var(j)) | ||||
|                 r *= m_pdd_manager.mk_var(j); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue