From 437b3375afefbb04a9b787a12803d2017288fe1a Mon Sep 17 00:00:00 2001 From: edolix Date: Thu, 1 Oct 2026 17:30:32 +0200 Subject: [PATCH 1/3] add log_search_progress, max_deterministic_time and fix_variables_to_their_hinted_value --- ext/or-tools/constraint.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ext/or-tools/constraint.cpp b/ext/or-tools/constraint.cpp index 312c70c..933bff1 100644 --- a/ext/or-tools/constraint.cpp +++ b/ext/or-tools/constraint.cpp @@ -141,8 +141,14 @@ void init_constraint(Rice::Module& m) { .define_method("cp_model_presolve=", &SatParameters::set_cp_model_presolve) .define_method("enumerate_all_solutions", &SatParameters::enumerate_all_solutions) .define_method("enumerate_all_solutions=", &SatParameters::set_enumerate_all_solutions) + .define_method("fix_variables_to_their_hinted_value", &SatParameters::fix_variables_to_their_hinted_value) + .define_method("fix_variables_to_their_hinted_value=", &SatParameters::set_fix_variables_to_their_hinted_value) .define_method("linearization_level", &SatParameters::linearization_level) .define_method("linearization_level=", &SatParameters::set_linearization_level) + .define_method("log_search_progress", &SatParameters::log_search_progress) + .define_method("log_search_progress=", &SatParameters::set_log_search_progress) + .define_method("max_deterministic_time", &SatParameters::max_deterministic_time) + .define_method("max_deterministic_time=", &SatParameters::set_max_deterministic_time) .define_method("max_time_in_seconds", &SatParameters::max_time_in_seconds) .define_method("max_time_in_seconds=", &SatParameters::set_max_time_in_seconds) .define_method("num_workers", &SatParameters::num_workers) From 8920a42911284408f3a978cd6f2d157e09c03256 Mon Sep 17 00:00:00 2001 From: edolix Date: Thu, 1 Oct 2026 17:30:39 +0200 Subject: [PATCH 2/3] quick tests --- test/constraint_test.rb | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/constraint_test.rb b/test/constraint_test.rb index f419898..354944f 100644 --- a/test/constraint_test.rb +++ b/test/constraint_test.rb @@ -234,6 +234,50 @@ def test_time_limit assert_equal :unknown, status end + def test_max_deterministic_time + model = ORTools::CpModel.new + num_vals = 3 + x = model.new_int_var(0, num_vals - 1, "x") + y = model.new_int_var(0, num_vals - 1, "y") + model.add(x != y) + + solver = ORTools::CpSolver.new + solver.parameters.max_deterministic_time = 0 + assert_equal 0, solver.parameters.max_deterministic_time + + status = solver.solve(model) + assert_equal :unknown, status + end + + def test_fix_variables_to_their_hinted_value + model = ORTools::CpModel.new + x = model.new_int_var(0, 10, "x") + model.add_hint(x, 7) + model.minimize(x) + + solver = ORTools::CpSolver.new + solver.parameters.fix_variables_to_their_hinted_value = true + assert solver.parameters.fix_variables_to_their_hinted_value + + assert_equal :optimal, solver.solve(model) + assert_equal 7, solver.value(x) + end + + def test_log_search_progress + model = ORTools::CpModel.new + x = model.new_int_var(0, 10, "x") + model.minimize(x) + + solver = ORTools::CpSolver.new + solver.parameters.log_search_progress = true + assert solver.parameters.log_search_progress + + stdout, _ = capture_subprocess_io do + assert_equal :optimal, solver.solve(model) + end + assert_match "Starting CP-SAT solver", stdout + end + def test_infeasible_value model = ORTools::CpModel.new From 2a97db50436670c45c27ec4599f95dbb660a24b5 Mon Sep 17 00:00:00 2001 From: edolix Date: Thu, 1 Oct 2026 17:30:50 +0200 Subject: [PATCH 3/3] update CHANGELOG as well --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8760b7c..45b6fa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.18.1 (unreleased) - Added support for breaks for routing +- Added `fix_variables_to_their_hinted_value`, `log_search_progress`, and `max_deterministic_time` to `SatParameters` ## 0.18.0 (2026-07-06)