or-tools 0.17.1 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,6 @@
1
+ #include <atomic>
2
+ #include <chrono>
3
+ #include <optional>
1
4
  #include <string>
2
5
  #include <vector>
3
6
 
@@ -6,24 +9,27 @@
6
9
  #include <rice/rice.hpp>
7
10
  #include <rice/stl.hpp>
8
11
 
12
+ #include "channel.hpp"
13
+
9
14
  using operations_research::Domain;
10
15
  using operations_research::sat::BoolVar;
11
16
  using operations_research::sat::Constraint;
12
- using operations_research::sat::TableConstraint;
13
17
  using operations_research::sat::CpModelBuilder;
14
18
  using operations_research::sat::CpSolverResponse;
15
19
  using operations_research::sat::CpSolverStatus;
16
- using operations_research::sat::LinearExpr;
17
- using operations_research::sat::IntVar;
18
20
  using operations_research::sat::IntervalVar;
21
+ using operations_research::sat::IntVar;
22
+ using operations_research::sat::LinearExpr;
19
23
  using operations_research::sat::Model;
20
24
  using operations_research::sat::NewFeasibleSolutionObserver;
21
25
  using operations_research::sat::SatParameters;
22
26
  using operations_research::sat::SolutionBooleanValue;
23
27
  using operations_research::sat::SolutionIntegerValue;
28
+ using operations_research::sat::TableConstraint;
24
29
 
25
30
  using Rice::Array;
26
31
  using Rice::Class;
32
+ using Rice::Hash;
27
33
  using Rice::Object;
28
34
  using Rice::String;
29
35
  using Rice::Symbol;
@@ -49,8 +55,8 @@ namespace Rice::detail {
49
55
  LinearExpr convert(VALUE v) {
50
56
  LinearExpr expr;
51
57
 
52
- Rice::Object utils = Rice::define_module("ORTools").const_get("Utils");
53
- Rice::Hash coeffs = utils.call("index_expression", Object(v));
58
+ Object utils = Rice::define_module("ORTools").const_get("Utils");
59
+ Hash coeffs = utils.call("index_expression", Object(v));
54
60
 
55
61
  for (const auto& entry : coeffs) {
56
62
  Object var = entry.key;
@@ -131,37 +137,580 @@ void init_constraint(Rice::Module& m) {
131
137
 
132
138
  Rice::define_class_under<SatParameters>(m, "SatParameters")
133
139
  .define_constructor(Rice::Constructor<SatParameters>())
134
- .define_method(
135
- "max_time_in_seconds=",
136
- [](SatParameters& self, double value) {
137
- self.set_max_time_in_seconds(value);
138
- })
139
- .define_method(
140
- "enumerate_all_solutions=",
141
- [](SatParameters& self, bool value) {
142
- self.set_enumerate_all_solutions(value);
143
- })
144
- .define_method(
145
- "enumerate_all_solutions",
146
- [](SatParameters& self) {
147
- return self.enumerate_all_solutions();
148
- })
149
- .define_method("num_workers=",
150
- [](SatParameters& self, int32_t value){
151
- self.set_num_workers(value);
152
- })
153
- .define_method("cp_model_presolve=",
154
- [](SatParameters& self, bool value) {
155
- self.set_cp_model_presolve(value);
156
- })
157
- .define_method("random_seed",
158
- [](SatParameters& self) {
159
- return self.random_seed();
160
- })
161
- .define_method("random_seed=",
162
- [](SatParameters& self, int32_t value) {
163
- self.set_random_seed(value);
164
- });
140
+ .define_method("absolute_gap_limit", &SatParameters::absolute_gap_limit)
141
+ .define_method("absolute_gap_limit=", &SatParameters::set_absolute_gap_limit)
142
+ .define_method("add_cg_cuts", &SatParameters::add_cg_cuts)
143
+ .define_method("add_cg_cuts=", &SatParameters::set_add_cg_cuts)
144
+ .define_method("add_clique_cuts", &SatParameters::add_clique_cuts)
145
+ .define_method("add_clique_cuts=", &SatParameters::set_add_clique_cuts)
146
+ .define_method("add_lin_max_cuts", &SatParameters::add_lin_max_cuts)
147
+ .define_method("add_lin_max_cuts=", &SatParameters::set_add_lin_max_cuts)
148
+ .define_method("add_lp_constraints_lazily", &SatParameters::add_lp_constraints_lazily)
149
+ .define_method("add_lp_constraints_lazily=", &SatParameters::set_add_lp_constraints_lazily)
150
+ .define_method("add_mir_cuts", &SatParameters::add_mir_cuts)
151
+ .define_method("add_mir_cuts=", &SatParameters::set_add_mir_cuts)
152
+ .define_method("add_objective_cut", &SatParameters::add_objective_cut)
153
+ .define_method("add_objective_cut=", &SatParameters::set_add_objective_cut)
154
+ .define_method("add_rlt_cuts", &SatParameters::add_rlt_cuts)
155
+ .define_method("add_rlt_cuts=", &SatParameters::set_add_rlt_cuts)
156
+ .define_method("add_zero_half_cuts", &SatParameters::add_zero_half_cuts)
157
+ .define_method("add_zero_half_cuts=", &SatParameters::set_add_zero_half_cuts)
158
+ .define_method("also_bump_variables_in_conflict_reasons", &SatParameters::also_bump_variables_in_conflict_reasons)
159
+ .define_method("also_bump_variables_in_conflict_reasons=", &SatParameters::set_also_bump_variables_in_conflict_reasons)
160
+ .define_method("alternative_pool_size", &SatParameters::alternative_pool_size)
161
+ .define_method("alternative_pool_size=", &SatParameters::set_alternative_pool_size)
162
+ .define_method("at_most_one_max_expansion_size", &SatParameters::at_most_one_max_expansion_size)
163
+ .define_method("at_most_one_max_expansion_size=", &SatParameters::set_at_most_one_max_expansion_size)
164
+ .define_method("auto_detect_greater_than_at_least_one_of", &SatParameters::auto_detect_greater_than_at_least_one_of)
165
+ .define_method("auto_detect_greater_than_at_least_one_of=", &SatParameters::set_auto_detect_greater_than_at_least_one_of)
166
+ .define_method("binary_search_num_conflicts", &SatParameters::binary_search_num_conflicts)
167
+ .define_method("binary_search_num_conflicts=", &SatParameters::set_binary_search_num_conflicts)
168
+ .define_method("blocking_restart_multiplier", &SatParameters::blocking_restart_multiplier)
169
+ .define_method("blocking_restart_multiplier=", &SatParameters::set_blocking_restart_multiplier)
170
+ .define_method("blocking_restart_window_size", &SatParameters::blocking_restart_window_size)
171
+ .define_method("blocking_restart_window_size=", &SatParameters::set_blocking_restart_window_size)
172
+ .define_method("boolean_encoding_level", &SatParameters::boolean_encoding_level)
173
+ .define_method("boolean_encoding_level=", &SatParameters::set_boolean_encoding_level)
174
+ .define_method("catch_sigint_signal", &SatParameters::catch_sigint_signal)
175
+ .define_method("catch_sigint_signal=", &SatParameters::set_catch_sigint_signal)
176
+ .define_method("check_drat_proof", &SatParameters::check_drat_proof)
177
+ .define_method("check_drat_proof=", &SatParameters::set_check_drat_proof)
178
+ .define_method("check_lrat_proof", &SatParameters::check_lrat_proof)
179
+ .define_method("check_lrat_proof=", &SatParameters::set_check_lrat_proof)
180
+ .define_method("check_merged_lrat_proof", &SatParameters::check_merged_lrat_proof)
181
+ .define_method("check_merged_lrat_proof=", &SatParameters::set_check_merged_lrat_proof)
182
+ .define_method("chronological_backtrack_min_conflicts", &SatParameters::chronological_backtrack_min_conflicts)
183
+ .define_method("chronological_backtrack_min_conflicts=", &SatParameters::set_chronological_backtrack_min_conflicts)
184
+ .define_method("clause_activity_decay", &SatParameters::clause_activity_decay)
185
+ .define_method("clause_activity_decay=", &SatParameters::set_clause_activity_decay)
186
+ .define_method("clause_cleanup_lbd_bound", &SatParameters::clause_cleanup_lbd_bound)
187
+ .define_method("clause_cleanup_lbd_bound=", &SatParameters::set_clause_cleanup_lbd_bound)
188
+ .define_method("clause_cleanup_lbd_tier1", &SatParameters::clause_cleanup_lbd_tier1)
189
+ .define_method("clause_cleanup_lbd_tier1=", &SatParameters::set_clause_cleanup_lbd_tier1)
190
+ .define_method("clause_cleanup_lbd_tier2", &SatParameters::clause_cleanup_lbd_tier2)
191
+ .define_method("clause_cleanup_lbd_tier2=", &SatParameters::set_clause_cleanup_lbd_tier2)
192
+ .define_method("clause_cleanup_period", &SatParameters::clause_cleanup_period)
193
+ .define_method("clause_cleanup_period=", &SatParameters::set_clause_cleanup_period)
194
+ .define_method("clause_cleanup_period_increment", &SatParameters::clause_cleanup_period_increment)
195
+ .define_method("clause_cleanup_period_increment=", &SatParameters::set_clause_cleanup_period_increment)
196
+ .define_method("clause_cleanup_ratio", &SatParameters::clause_cleanup_ratio)
197
+ .define_method("clause_cleanup_ratio=", &SatParameters::set_clause_cleanup_ratio)
198
+ .define_method("clause_cleanup_target", &SatParameters::clause_cleanup_target)
199
+ .define_method("clause_cleanup_target=", &SatParameters::set_clause_cleanup_target)
200
+ .define_method("convert_intervals", &SatParameters::convert_intervals)
201
+ .define_method("convert_intervals=", &SatParameters::set_convert_intervals)
202
+ .define_method("core_minimization_level", &SatParameters::core_minimization_level)
203
+ .define_method("core_minimization_level=", &SatParameters::set_core_minimization_level)
204
+ .define_method("count_assumption_levels_in_lbd", &SatParameters::count_assumption_levels_in_lbd)
205
+ .define_method("count_assumption_levels_in_lbd=", &SatParameters::set_count_assumption_levels_in_lbd)
206
+ .define_method("cover_optimization", &SatParameters::cover_optimization)
207
+ .define_method("cover_optimization=", &SatParameters::set_cover_optimization)
208
+ .define_method("cp_model_presolve", &SatParameters::cp_model_presolve)
209
+ .define_method("cp_model_presolve=", &SatParameters::set_cp_model_presolve)
210
+ .define_method("cp_model_probing_level", &SatParameters::cp_model_probing_level)
211
+ .define_method("cp_model_probing_level=", &SatParameters::set_cp_model_probing_level)
212
+ .define_method("cp_model_use_sat_presolve", &SatParameters::cp_model_use_sat_presolve)
213
+ .define_method("cp_model_use_sat_presolve=", &SatParameters::set_cp_model_use_sat_presolve)
214
+ .define_method("create_1uip_boolean_during_icr", &SatParameters::create_1uip_boolean_during_icr)
215
+ .define_method("create_1uip_boolean_during_icr=", &SatParameters::set_create_1uip_boolean_during_icr)
216
+ .define_method("cut_active_count_decay", &SatParameters::cut_active_count_decay)
217
+ .define_method("cut_active_count_decay=", &SatParameters::set_cut_active_count_decay)
218
+ .define_method("cut_cleanup_target", &SatParameters::cut_cleanup_target)
219
+ .define_method("cut_cleanup_target=", &SatParameters::set_cut_cleanup_target)
220
+ .define_method("cut_level", &SatParameters::cut_level)
221
+ .define_method("cut_level=", &SatParameters::set_cut_level)
222
+ .define_method("cut_max_active_count_value", &SatParameters::cut_max_active_count_value)
223
+ .define_method("cut_max_active_count_value=", &SatParameters::set_cut_max_active_count_value)
224
+ .define_method("debug_crash_if_lrat_check_fails", &SatParameters::debug_crash_if_lrat_check_fails)
225
+ .define_method("debug_crash_if_lrat_check_fails=", &SatParameters::set_debug_crash_if_lrat_check_fails)
226
+ .define_method("debug_crash_if_presolve_breaks_hint", &SatParameters::debug_crash_if_presolve_breaks_hint)
227
+ .define_method("debug_crash_if_presolve_breaks_hint=", &SatParameters::set_debug_crash_if_presolve_breaks_hint)
228
+ .define_method("debug_crash_on_bad_hint", &SatParameters::debug_crash_on_bad_hint)
229
+ .define_method("debug_crash_on_bad_hint=", &SatParameters::set_debug_crash_on_bad_hint)
230
+ .define_method("debug_max_num_presolve_operations", &SatParameters::debug_max_num_presolve_operations)
231
+ .define_method("debug_max_num_presolve_operations=", &SatParameters::set_debug_max_num_presolve_operations)
232
+ .define_method("debug_postsolve_with_full_solver", &SatParameters::debug_postsolve_with_full_solver)
233
+ .define_method("debug_postsolve_with_full_solver=", &SatParameters::set_debug_postsolve_with_full_solver)
234
+ .define_method("decision_subsumption_during_conflict_analysis", &SatParameters::decision_subsumption_during_conflict_analysis)
235
+ .define_method("decision_subsumption_during_conflict_analysis=", &SatParameters::set_decision_subsumption_during_conflict_analysis)
236
+ .define_method("default_restart_algorithms", &SatParameters::default_restart_algorithms)
237
+ // .define_method("default_restart_algorithms=", &SatParameters::set_default_restart_algorithms)
238
+ .define_method("detect_linearized_product", &SatParameters::detect_linearized_product)
239
+ .define_method("detect_linearized_product=", &SatParameters::set_detect_linearized_product)
240
+ .define_method("detect_table_with_cost", &SatParameters::detect_table_with_cost)
241
+ .define_method("detect_table_with_cost=", &SatParameters::set_detect_table_with_cost)
242
+ .define_method("disable_constraint_expansion", &SatParameters::disable_constraint_expansion)
243
+ .define_method("disable_constraint_expansion=", &SatParameters::set_disable_constraint_expansion)
244
+ .define_method("diversify_lns_params", &SatParameters::diversify_lns_params)
245
+ .define_method("diversify_lns_params=", &SatParameters::set_diversify_lns_params)
246
+ .define_method("eagerly_subsume_last_n_conflicts", &SatParameters::eagerly_subsume_last_n_conflicts)
247
+ .define_method("eagerly_subsume_last_n_conflicts=", &SatParameters::set_eagerly_subsume_last_n_conflicts)
248
+ .define_method("encode_complex_linear_constraint_with_integer", &SatParameters::encode_complex_linear_constraint_with_integer)
249
+ .define_method("encode_complex_linear_constraint_with_integer=", &SatParameters::set_encode_complex_linear_constraint_with_integer)
250
+ .define_method("encode_cumulative_as_reservoir", &SatParameters::encode_cumulative_as_reservoir)
251
+ .define_method("encode_cumulative_as_reservoir=", &SatParameters::set_encode_cumulative_as_reservoir)
252
+ .define_method("enumerate_all_solutions", &SatParameters::enumerate_all_solutions)
253
+ .define_method("enumerate_all_solutions=", &SatParameters::set_enumerate_all_solutions)
254
+ .define_method("expand_alldiff_constraints", &SatParameters::expand_alldiff_constraints)
255
+ .define_method("expand_alldiff_constraints=", &SatParameters::set_expand_alldiff_constraints)
256
+ .define_method("expand_reservoir_constraints", &SatParameters::expand_reservoir_constraints)
257
+ .define_method("expand_reservoir_constraints=", &SatParameters::set_expand_reservoir_constraints)
258
+ .define_method("expand_reservoir_using_circuit", &SatParameters::expand_reservoir_using_circuit)
259
+ .define_method("expand_reservoir_using_circuit=", &SatParameters::set_expand_reservoir_using_circuit)
260
+ .define_method("exploit_all_lp_solution", &SatParameters::exploit_all_lp_solution)
261
+ .define_method("exploit_all_lp_solution=", &SatParameters::set_exploit_all_lp_solution)
262
+ .define_method("exploit_all_precedences", &SatParameters::exploit_all_precedences)
263
+ .define_method("exploit_all_precedences=", &SatParameters::set_exploit_all_precedences)
264
+ .define_method("exploit_best_solution", &SatParameters::exploit_best_solution)
265
+ .define_method("exploit_best_solution=", &SatParameters::set_exploit_best_solution)
266
+ .define_method("exploit_integer_lp_solution", &SatParameters::exploit_integer_lp_solution)
267
+ .define_method("exploit_integer_lp_solution=", &SatParameters::set_exploit_integer_lp_solution)
268
+ .define_method("exploit_objective", &SatParameters::exploit_objective)
269
+ .define_method("exploit_objective=", &SatParameters::set_exploit_objective)
270
+ .define_method("exploit_relaxation_solution", &SatParameters::exploit_relaxation_solution)
271
+ .define_method("exploit_relaxation_solution=", &SatParameters::set_exploit_relaxation_solution)
272
+ .define_method("extra_subsumption_during_conflict_analysis", &SatParameters::extra_subsumption_during_conflict_analysis)
273
+ .define_method("extra_subsumption_during_conflict_analysis=", &SatParameters::set_extra_subsumption_during_conflict_analysis)
274
+ .define_method("feasibility_jump_batch_dtime", &SatParameters::feasibility_jump_batch_dtime)
275
+ .define_method("feasibility_jump_batch_dtime=", &SatParameters::set_feasibility_jump_batch_dtime)
276
+ .define_method("feasibility_jump_decay", &SatParameters::feasibility_jump_decay)
277
+ .define_method("feasibility_jump_decay=", &SatParameters::set_feasibility_jump_decay)
278
+ .define_method("feasibility_jump_enable_restarts", &SatParameters::feasibility_jump_enable_restarts)
279
+ .define_method("feasibility_jump_enable_restarts=", &SatParameters::set_feasibility_jump_enable_restarts)
280
+ .define_method("feasibility_jump_linearization_level", &SatParameters::feasibility_jump_linearization_level)
281
+ .define_method("feasibility_jump_linearization_level=", &SatParameters::set_feasibility_jump_linearization_level)
282
+ .define_method("feasibility_jump_max_expanded_constraint_size", &SatParameters::feasibility_jump_max_expanded_constraint_size)
283
+ .define_method("feasibility_jump_max_expanded_constraint_size=", &SatParameters::set_feasibility_jump_max_expanded_constraint_size)
284
+ .define_method("feasibility_jump_restart_factor", &SatParameters::feasibility_jump_restart_factor)
285
+ .define_method("feasibility_jump_restart_factor=", &SatParameters::set_feasibility_jump_restart_factor)
286
+ .define_method("feasibility_jump_var_perburbation_range_ratio", &SatParameters::feasibility_jump_var_perburbation_range_ratio)
287
+ .define_method("feasibility_jump_var_perburbation_range_ratio=", &SatParameters::set_feasibility_jump_var_perburbation_range_ratio)
288
+ .define_method("feasibility_jump_var_randomization_probability", &SatParameters::feasibility_jump_var_randomization_probability)
289
+ .define_method("feasibility_jump_var_randomization_probability=", &SatParameters::set_feasibility_jump_var_randomization_probability)
290
+ .define_method("fill_additional_solutions_in_response", &SatParameters::fill_additional_solutions_in_response)
291
+ .define_method("fill_additional_solutions_in_response=", &SatParameters::set_fill_additional_solutions_in_response)
292
+ .define_method("fill_tightened_domains_in_response", &SatParameters::fill_tightened_domains_in_response)
293
+ .define_method("fill_tightened_domains_in_response=", &SatParameters::set_fill_tightened_domains_in_response)
294
+ .define_method("filter_sat_postsolve_clauses", &SatParameters::filter_sat_postsolve_clauses)
295
+ .define_method("filter_sat_postsolve_clauses=", &SatParameters::set_filter_sat_postsolve_clauses)
296
+ .define_method("find_big_linear_overlap", &SatParameters::find_big_linear_overlap)
297
+ .define_method("find_big_linear_overlap=", &SatParameters::set_find_big_linear_overlap)
298
+ .define_method("find_clauses_that_are_exactly_one", &SatParameters::find_clauses_that_are_exactly_one)
299
+ .define_method("find_clauses_that_are_exactly_one=", &SatParameters::set_find_clauses_that_are_exactly_one)
300
+ .define_method("find_multiple_cores", &SatParameters::find_multiple_cores)
301
+ .define_method("find_multiple_cores=", &SatParameters::set_find_multiple_cores)
302
+ .define_method("fix_variables_to_their_hinted_value", &SatParameters::fix_variables_to_their_hinted_value)
303
+ .define_method("fix_variables_to_their_hinted_value=", &SatParameters::set_fix_variables_to_their_hinted_value)
304
+ .define_method("glucose_decay_increment", &SatParameters::glucose_decay_increment)
305
+ .define_method("glucose_decay_increment=", &SatParameters::set_glucose_decay_increment)
306
+ .define_method("glucose_decay_increment_period", &SatParameters::glucose_decay_increment_period)
307
+ .define_method("glucose_decay_increment_period=", &SatParameters::set_glucose_decay_increment_period)
308
+ .define_method("glucose_max_decay", &SatParameters::glucose_max_decay)
309
+ .define_method("glucose_max_decay=", &SatParameters::set_glucose_max_decay)
310
+ .define_method("hint_conflict_limit", &SatParameters::hint_conflict_limit)
311
+ .define_method("hint_conflict_limit=", &SatParameters::set_hint_conflict_limit)
312
+ .define_method("ignore_names", &SatParameters::ignore_names)
313
+ .define_method("ignore_names=", &SatParameters::set_ignore_names)
314
+ .define_method("infer_all_diffs", &SatParameters::infer_all_diffs)
315
+ .define_method("infer_all_diffs=", &SatParameters::set_infer_all_diffs)
316
+ .define_method("initial_variables_activity", &SatParameters::initial_variables_activity)
317
+ .define_method("initial_variables_activity=", &SatParameters::set_initial_variables_activity)
318
+ .define_method("inprocessing_dtime_ratio", &SatParameters::inprocessing_dtime_ratio)
319
+ .define_method("inprocessing_dtime_ratio=", &SatParameters::set_inprocessing_dtime_ratio)
320
+ .define_method("inprocessing_minimization_dtime", &SatParameters::inprocessing_minimization_dtime)
321
+ .define_method("inprocessing_minimization_dtime=", &SatParameters::set_inprocessing_minimization_dtime)
322
+ .define_method("inprocessing_minimization_use_all_orderings", &SatParameters::inprocessing_minimization_use_all_orderings)
323
+ .define_method("inprocessing_minimization_use_all_orderings=", &SatParameters::set_inprocessing_minimization_use_all_orderings)
324
+ .define_method("inprocessing_minimization_use_conflict_analysis", &SatParameters::inprocessing_minimization_use_conflict_analysis)
325
+ .define_method("inprocessing_minimization_use_conflict_analysis=", &SatParameters::set_inprocessing_minimization_use_conflict_analysis)
326
+ .define_method("inprocessing_probing_dtime", &SatParameters::inprocessing_probing_dtime)
327
+ .define_method("inprocessing_probing_dtime=", &SatParameters::set_inprocessing_probing_dtime)
328
+ .define_method("inprocessing_use_congruence_closure", &SatParameters::inprocessing_use_congruence_closure)
329
+ .define_method("inprocessing_use_congruence_closure=", &SatParameters::set_inprocessing_use_congruence_closure)
330
+ .define_method("inprocessing_use_sat_sweeping", &SatParameters::inprocessing_use_sat_sweeping)
331
+ .define_method("inprocessing_use_sat_sweeping=", &SatParameters::set_inprocessing_use_sat_sweeping)
332
+ .define_method("instantiate_all_variables", &SatParameters::instantiate_all_variables)
333
+ .define_method("instantiate_all_variables=", &SatParameters::set_instantiate_all_variables)
334
+ .define_method("interleave_batch_size", &SatParameters::interleave_batch_size)
335
+ .define_method("interleave_batch_size=", &SatParameters::set_interleave_batch_size)
336
+ .define_method("interleave_search", &SatParameters::interleave_search)
337
+ .define_method("interleave_search=", &SatParameters::set_interleave_search)
338
+ .define_method("keep_all_feasible_solutions_in_presolve", &SatParameters::keep_all_feasible_solutions_in_presolve)
339
+ .define_method("keep_all_feasible_solutions_in_presolve=", &SatParameters::set_keep_all_feasible_solutions_in_presolve)
340
+ .define_method("keep_symmetry_in_presolve", &SatParameters::keep_symmetry_in_presolve)
341
+ .define_method("keep_symmetry_in_presolve=", &SatParameters::set_keep_symmetry_in_presolve)
342
+ .define_method("lb_relax_num_workers_threshold", &SatParameters::lb_relax_num_workers_threshold)
343
+ .define_method("lb_relax_num_workers_threshold=", &SatParameters::set_lb_relax_num_workers_threshold)
344
+ .define_method("linear_split_size", &SatParameters::linear_split_size)
345
+ .define_method("linear_split_size=", &SatParameters::set_linear_split_size)
346
+ .define_method("linearization_level", &SatParameters::linearization_level)
347
+ .define_method("linearization_level=", &SatParameters::set_linearization_level)
348
+ .define_method("lns_initial_deterministic_limit", &SatParameters::lns_initial_deterministic_limit)
349
+ .define_method("lns_initial_deterministic_limit=", &SatParameters::set_lns_initial_deterministic_limit)
350
+ .define_method("lns_initial_difficulty", &SatParameters::lns_initial_difficulty)
351
+ .define_method("lns_initial_difficulty=", &SatParameters::set_lns_initial_difficulty)
352
+ .define_method("load_at_most_ones_in_sat_presolve", &SatParameters::load_at_most_ones_in_sat_presolve)
353
+ .define_method("load_at_most_ones_in_sat_presolve=", &SatParameters::set_load_at_most_ones_in_sat_presolve)
354
+ .define_method("log_prefix", &SatParameters::log_prefix)
355
+ // .define_method("log_prefix=", &SatParameters::set_log_prefix)
356
+ .define_method("log_search_progress", &SatParameters::log_search_progress)
357
+ .define_method("log_search_progress=", &SatParameters::set_log_search_progress)
358
+ .define_method("log_subsolver_statistics", &SatParameters::log_subsolver_statistics)
359
+ .define_method("log_subsolver_statistics=", &SatParameters::set_log_subsolver_statistics)
360
+ .define_method("log_to_response", &SatParameters::log_to_response)
361
+ .define_method("log_to_response=", &SatParameters::set_log_to_response)
362
+ .define_method("log_to_stdout", &SatParameters::log_to_stdout)
363
+ .define_method("log_to_stdout=", &SatParameters::set_log_to_stdout)
364
+ .define_method("lp_dual_tolerance", &SatParameters::lp_dual_tolerance)
365
+ .define_method("lp_dual_tolerance=", &SatParameters::set_lp_dual_tolerance)
366
+ .define_method("lp_primal_tolerance", &SatParameters::lp_primal_tolerance)
367
+ .define_method("lp_primal_tolerance=", &SatParameters::set_lp_primal_tolerance)
368
+ .define_method("max_all_diff_cut_size", &SatParameters::max_all_diff_cut_size)
369
+ .define_method("max_all_diff_cut_size=", &SatParameters::set_max_all_diff_cut_size)
370
+ .define_method("max_alldiff_domain_size", &SatParameters::max_alldiff_domain_size)
371
+ .define_method("max_alldiff_domain_size=", &SatParameters::set_max_alldiff_domain_size)
372
+ .define_method("max_backjump_levels", &SatParameters::max_backjump_levels)
373
+ .define_method("max_backjump_levels=", &SatParameters::set_max_backjump_levels)
374
+ .define_method("max_clause_activity_value", &SatParameters::max_clause_activity_value)
375
+ .define_method("max_clause_activity_value=", &SatParameters::set_max_clause_activity_value)
376
+ .define_method("max_consecutive_inactive_count", &SatParameters::max_consecutive_inactive_count)
377
+ .define_method("max_consecutive_inactive_count=", &SatParameters::set_max_consecutive_inactive_count)
378
+ .define_method("max_cut_rounds_at_level_zero", &SatParameters::max_cut_rounds_at_level_zero)
379
+ .define_method("max_cut_rounds_at_level_zero=", &SatParameters::set_max_cut_rounds_at_level_zero)
380
+ .define_method("max_deterministic_time", &SatParameters::max_deterministic_time)
381
+ .define_method("max_deterministic_time=", &SatParameters::set_max_deterministic_time)
382
+ .define_method("max_domain_size_for_linear2_expansion", &SatParameters::max_domain_size_for_linear2_expansion)
383
+ .define_method("max_domain_size_for_linear2_expansion=", &SatParameters::set_max_domain_size_for_linear2_expansion)
384
+ .define_method("max_domain_size_when_encoding_eq_neq_constraints", &SatParameters::max_domain_size_when_encoding_eq_neq_constraints)
385
+ .define_method("max_domain_size_when_encoding_eq_neq_constraints=", &SatParameters::set_max_domain_size_when_encoding_eq_neq_constraints)
386
+ .define_method("max_drat_time_in_seconds", &SatParameters::max_drat_time_in_seconds)
387
+ .define_method("max_drat_time_in_seconds=", &SatParameters::set_max_drat_time_in_seconds)
388
+ .define_method("max_integer_rounding_scaling", &SatParameters::max_integer_rounding_scaling)
389
+ .define_method("max_integer_rounding_scaling=", &SatParameters::set_max_integer_rounding_scaling)
390
+ .define_method("max_lin_max_size_for_expansion", &SatParameters::max_lin_max_size_for_expansion)
391
+ .define_method("max_lin_max_size_for_expansion=", &SatParameters::set_max_lin_max_size_for_expansion)
392
+ .define_method("max_memory_in_mb", &SatParameters::max_memory_in_mb)
393
+ .define_method("max_memory_in_mb=", &SatParameters::set_max_memory_in_mb)
394
+ .define_method("max_num_cuts", &SatParameters::max_num_cuts)
395
+ .define_method("max_num_cuts=", &SatParameters::set_max_num_cuts)
396
+ .define_method("max_num_deterministic_batches", &SatParameters::max_num_deterministic_batches)
397
+ .define_method("max_num_deterministic_batches=", &SatParameters::set_max_num_deterministic_batches)
398
+ .define_method("max_num_intervals_for_timetable_edge_finding", &SatParameters::max_num_intervals_for_timetable_edge_finding)
399
+ .define_method("max_num_intervals_for_timetable_edge_finding=", &SatParameters::set_max_num_intervals_for_timetable_edge_finding)
400
+ .define_method("max_number_of_conflicts", &SatParameters::max_number_of_conflicts)
401
+ .define_method("max_number_of_conflicts=", &SatParameters::set_max_number_of_conflicts)
402
+ .define_method("max_pairs_pairwise_reasoning_in_no_overlap_2d", &SatParameters::max_pairs_pairwise_reasoning_in_no_overlap_2d)
403
+ .define_method("max_pairs_pairwise_reasoning_in_no_overlap_2d=", &SatParameters::set_max_pairs_pairwise_reasoning_in_no_overlap_2d)
404
+ .define_method("max_presolve_iterations", &SatParameters::max_presolve_iterations)
405
+ .define_method("max_presolve_iterations=", &SatParameters::set_max_presolve_iterations)
406
+ .define_method("max_sat_reverse_assumption_order", &SatParameters::max_sat_reverse_assumption_order)
407
+ .define_method("max_sat_reverse_assumption_order=", &SatParameters::set_max_sat_reverse_assumption_order)
408
+ .define_method("max_size_to_create_precedence_literals_in_disjunctive", &SatParameters::max_size_to_create_precedence_literals_in_disjunctive)
409
+ .define_method("max_size_to_create_precedence_literals_in_disjunctive=", &SatParameters::set_max_size_to_create_precedence_literals_in_disjunctive)
410
+ .define_method("max_time_in_seconds", &SatParameters::max_time_in_seconds)
411
+ .define_method("max_time_in_seconds=", &SatParameters::set_max_time_in_seconds)
412
+ .define_method("max_variable_activity_value", &SatParameters::max_variable_activity_value)
413
+ .define_method("max_variable_activity_value=", &SatParameters::set_max_variable_activity_value)
414
+ .define_method("maximum_regions_to_split_in_disconnected_no_overlap_2d", &SatParameters::maximum_regions_to_split_in_disconnected_no_overlap_2d)
415
+ .define_method("maximum_regions_to_split_in_disconnected_no_overlap_2d=", &SatParameters::set_maximum_regions_to_split_in_disconnected_no_overlap_2d)
416
+ .define_method("merge_at_most_one_work_limit", &SatParameters::merge_at_most_one_work_limit)
417
+ .define_method("merge_at_most_one_work_limit=", &SatParameters::set_merge_at_most_one_work_limit)
418
+ .define_method("merge_no_overlap_work_limit", &SatParameters::merge_no_overlap_work_limit)
419
+ .define_method("merge_no_overlap_work_limit=", &SatParameters::set_merge_no_overlap_work_limit)
420
+ .define_method("min_orthogonality_for_lp_constraints", &SatParameters::min_orthogonality_for_lp_constraints)
421
+ .define_method("min_orthogonality_for_lp_constraints=", &SatParameters::set_min_orthogonality_for_lp_constraints)
422
+ .define_method("minimize_reduction_during_pb_resolution", &SatParameters::minimize_reduction_during_pb_resolution)
423
+ .define_method("minimize_reduction_during_pb_resolution=", &SatParameters::set_minimize_reduction_during_pb_resolution)
424
+ .define_method("minimize_shared_clauses", &SatParameters::minimize_shared_clauses)
425
+ .define_method("minimize_shared_clauses=", &SatParameters::set_minimize_shared_clauses)
426
+ .define_method("mip_automatically_scale_variables", &SatParameters::mip_automatically_scale_variables)
427
+ .define_method("mip_automatically_scale_variables=", &SatParameters::set_mip_automatically_scale_variables)
428
+ .define_method("mip_check_precision", &SatParameters::mip_check_precision)
429
+ .define_method("mip_check_precision=", &SatParameters::set_mip_check_precision)
430
+ .define_method("mip_compute_true_objective_bound", &SatParameters::mip_compute_true_objective_bound)
431
+ .define_method("mip_compute_true_objective_bound=", &SatParameters::set_mip_compute_true_objective_bound)
432
+ .define_method("mip_drop_tolerance", &SatParameters::mip_drop_tolerance)
433
+ .define_method("mip_drop_tolerance=", &SatParameters::set_mip_drop_tolerance)
434
+ .define_method("mip_max_activity_exponent", &SatParameters::mip_max_activity_exponent)
435
+ .define_method("mip_max_activity_exponent=", &SatParameters::set_mip_max_activity_exponent)
436
+ .define_method("mip_max_bound", &SatParameters::mip_max_bound)
437
+ .define_method("mip_max_bound=", &SatParameters::set_mip_max_bound)
438
+ .define_method("mip_max_valid_magnitude", &SatParameters::mip_max_valid_magnitude)
439
+ .define_method("mip_max_valid_magnitude=", &SatParameters::set_mip_max_valid_magnitude)
440
+ .define_method("mip_presolve_level", &SatParameters::mip_presolve_level)
441
+ .define_method("mip_presolve_level=", &SatParameters::set_mip_presolve_level)
442
+ .define_method("mip_scale_large_domain", &SatParameters::mip_scale_large_domain)
443
+ .define_method("mip_scale_large_domain=", &SatParameters::set_mip_scale_large_domain)
444
+ .define_method("mip_treat_high_magnitude_bounds_as_infinity", &SatParameters::mip_treat_high_magnitude_bounds_as_infinity)
445
+ .define_method("mip_treat_high_magnitude_bounds_as_infinity=", &SatParameters::set_mip_treat_high_magnitude_bounds_as_infinity)
446
+ .define_method("mip_var_scaling", &SatParameters::mip_var_scaling)
447
+ .define_method("mip_var_scaling=", &SatParameters::set_mip_var_scaling)
448
+ .define_method("mip_wanted_precision", &SatParameters::mip_wanted_precision)
449
+ .define_method("mip_wanted_precision=", &SatParameters::set_mip_wanted_precision)
450
+ .define_method("name", &SatParameters::name)
451
+ // .define_method("name=", &SatParameters::set_name)
452
+ .define_method("new_constraints_batch_size", &SatParameters::new_constraints_batch_size)
453
+ .define_method("new_constraints_batch_size=", &SatParameters::set_new_constraints_batch_size)
454
+ .define_method("new_linear_propagation", &SatParameters::new_linear_propagation)
455
+ .define_method("new_linear_propagation=", &SatParameters::set_new_linear_propagation)
456
+ .define_method("no_overlap_2d_boolean_relations_limit", &SatParameters::no_overlap_2d_boolean_relations_limit)
457
+ .define_method("no_overlap_2d_boolean_relations_limit=", &SatParameters::set_no_overlap_2d_boolean_relations_limit)
458
+ .define_method("num_conflicts_before_strategy_changes", &SatParameters::num_conflicts_before_strategy_changes)
459
+ .define_method("num_conflicts_before_strategy_changes=", &SatParameters::set_num_conflicts_before_strategy_changes)
460
+ .define_method("num_full_subsolvers", &SatParameters::num_full_subsolvers)
461
+ .define_method("num_full_subsolvers=", &SatParameters::set_num_full_subsolvers)
462
+ .define_method("num_search_workers", &SatParameters::num_search_workers)
463
+ .define_method("num_search_workers=", &SatParameters::set_num_search_workers)
464
+ .define_method("num_violation_ls", &SatParameters::num_violation_ls)
465
+ .define_method("num_violation_ls=", &SatParameters::set_num_violation_ls)
466
+ .define_method("num_workers", &SatParameters::num_workers)
467
+ .define_method("num_workers=", &SatParameters::set_num_workers)
468
+ .define_method("only_add_cuts_at_level_zero", &SatParameters::only_add_cuts_at_level_zero)
469
+ .define_method("only_add_cuts_at_level_zero=", &SatParameters::set_only_add_cuts_at_level_zero)
470
+ .define_method("only_solve_ip", &SatParameters::only_solve_ip)
471
+ .define_method("only_solve_ip=", &SatParameters::set_only_solve_ip)
472
+ .define_method("optimize_with_core", &SatParameters::optimize_with_core)
473
+ .define_method("optimize_with_core=", &SatParameters::set_optimize_with_core)
474
+ .define_method("optimize_with_lb_tree_search", &SatParameters::optimize_with_lb_tree_search)
475
+ .define_method("optimize_with_lb_tree_search=", &SatParameters::set_optimize_with_lb_tree_search)
476
+ .define_method("optimize_with_max_hs", &SatParameters::optimize_with_max_hs)
477
+ .define_method("optimize_with_max_hs=", &SatParameters::set_optimize_with_max_hs)
478
+ .define_method("output_drat_proof", &SatParameters::output_drat_proof)
479
+ .define_method("output_drat_proof=", &SatParameters::set_output_drat_proof)
480
+ .define_method("output_lrat_proof", &SatParameters::output_lrat_proof)
481
+ .define_method("output_lrat_proof=", &SatParameters::set_output_lrat_proof)
482
+ .define_method("pb_cleanup_increment", &SatParameters::pb_cleanup_increment)
483
+ .define_method("pb_cleanup_increment=", &SatParameters::set_pb_cleanup_increment)
484
+ .define_method("pb_cleanup_ratio", &SatParameters::pb_cleanup_ratio)
485
+ .define_method("pb_cleanup_ratio=", &SatParameters::set_pb_cleanup_ratio)
486
+ .define_method("permute_presolve_constraint_order", &SatParameters::permute_presolve_constraint_order)
487
+ .define_method("permute_presolve_constraint_order=", &SatParameters::set_permute_presolve_constraint_order)
488
+ .define_method("permute_variable_randomly", &SatParameters::permute_variable_randomly)
489
+ .define_method("permute_variable_randomly=", &SatParameters::set_permute_variable_randomly)
490
+ .define_method("polarity_exploit_ls_hints", &SatParameters::polarity_exploit_ls_hints)
491
+ .define_method("polarity_exploit_ls_hints=", &SatParameters::set_polarity_exploit_ls_hints)
492
+ .define_method("polarity_rephase_increment", &SatParameters::polarity_rephase_increment)
493
+ .define_method("polarity_rephase_increment=", &SatParameters::set_polarity_rephase_increment)
494
+ .define_method("polish_lp_solution", &SatParameters::polish_lp_solution)
495
+ .define_method("polish_lp_solution=", &SatParameters::set_polish_lp_solution)
496
+ .define_method("presolve_blocked_clause", &SatParameters::presolve_blocked_clause)
497
+ .define_method("presolve_blocked_clause=", &SatParameters::set_presolve_blocked_clause)
498
+ .define_method("presolve_bva_threshold", &SatParameters::presolve_bva_threshold)
499
+ .define_method("presolve_bva_threshold=", &SatParameters::set_presolve_bva_threshold)
500
+ .define_method("presolve_bve_clause_weight", &SatParameters::presolve_bve_clause_weight)
501
+ .define_method("presolve_bve_clause_weight=", &SatParameters::set_presolve_bve_clause_weight)
502
+ .define_method("presolve_bve_threshold", &SatParameters::presolve_bve_threshold)
503
+ .define_method("presolve_bve_threshold=", &SatParameters::set_presolve_bve_threshold)
504
+ .define_method("presolve_extract_integer_enforcement", &SatParameters::presolve_extract_integer_enforcement)
505
+ .define_method("presolve_extract_integer_enforcement=", &SatParameters::set_presolve_extract_integer_enforcement)
506
+ .define_method("presolve_inclusion_work_limit", &SatParameters::presolve_inclusion_work_limit)
507
+ .define_method("presolve_inclusion_work_limit=", &SatParameters::set_presolve_inclusion_work_limit)
508
+ .define_method("presolve_probing_deterministic_time_limit", &SatParameters::presolve_probing_deterministic_time_limit)
509
+ .define_method("presolve_probing_deterministic_time_limit=", &SatParameters::set_presolve_probing_deterministic_time_limit)
510
+ .define_method("presolve_substitution_level", &SatParameters::presolve_substitution_level)
511
+ .define_method("presolve_substitution_level=", &SatParameters::set_presolve_substitution_level)
512
+ .define_method("presolve_use_bva", &SatParameters::presolve_use_bva)
513
+ .define_method("presolve_use_bva=", &SatParameters::set_presolve_use_bva)
514
+ .define_method("probing_deterministic_time_limit", &SatParameters::probing_deterministic_time_limit)
515
+ .define_method("probing_deterministic_time_limit=", &SatParameters::set_probing_deterministic_time_limit)
516
+ .define_method("probing_num_combinations_limit", &SatParameters::probing_num_combinations_limit)
517
+ .define_method("probing_num_combinations_limit=", &SatParameters::set_probing_num_combinations_limit)
518
+ .define_method("propagation_loop_detection_factor", &SatParameters::propagation_loop_detection_factor)
519
+ .define_method("propagation_loop_detection_factor=", &SatParameters::set_propagation_loop_detection_factor)
520
+ .define_method("pseudo_cost_reliability_threshold", &SatParameters::pseudo_cost_reliability_threshold)
521
+ .define_method("pseudo_cost_reliability_threshold=", &SatParameters::set_pseudo_cost_reliability_threshold)
522
+ .define_method("push_all_tasks_toward_start", &SatParameters::push_all_tasks_toward_start)
523
+ .define_method("push_all_tasks_toward_start=", &SatParameters::set_push_all_tasks_toward_start)
524
+ .define_method("random_branches_ratio", &SatParameters::random_branches_ratio)
525
+ .define_method("random_branches_ratio=", &SatParameters::set_random_branches_ratio)
526
+ .define_method("random_polarity_ratio", &SatParameters::random_polarity_ratio)
527
+ .define_method("random_polarity_ratio=", &SatParameters::set_random_polarity_ratio)
528
+ .define_method("random_seed", &SatParameters::random_seed)
529
+ .define_method("random_seed=", &SatParameters::set_random_seed)
530
+ .define_method("randomize_search", &SatParameters::randomize_search)
531
+ .define_method("randomize_search=", &SatParameters::set_randomize_search)
532
+ .define_method("relative_gap_limit", &SatParameters::relative_gap_limit)
533
+ .define_method("relative_gap_limit=", &SatParameters::set_relative_gap_limit)
534
+ .define_method("remove_fixed_variables_early", &SatParameters::remove_fixed_variables_early)
535
+ .define_method("remove_fixed_variables_early=", &SatParameters::set_remove_fixed_variables_early)
536
+ .define_method("repair_hint", &SatParameters::repair_hint)
537
+ .define_method("repair_hint=", &SatParameters::set_repair_hint)
538
+ .define_method("restart_dl_average_ratio", &SatParameters::restart_dl_average_ratio)
539
+ .define_method("restart_dl_average_ratio=", &SatParameters::set_restart_dl_average_ratio)
540
+ .define_method("restart_lbd_average_ratio", &SatParameters::restart_lbd_average_ratio)
541
+ .define_method("restart_lbd_average_ratio=", &SatParameters::set_restart_lbd_average_ratio)
542
+ .define_method("restart_period", &SatParameters::restart_period)
543
+ .define_method("restart_period=", &SatParameters::set_restart_period)
544
+ .define_method("restart_running_window_size", &SatParameters::restart_running_window_size)
545
+ .define_method("restart_running_window_size=", &SatParameters::set_restart_running_window_size)
546
+ .define_method("root_lp_iterations", &SatParameters::root_lp_iterations)
547
+ .define_method("root_lp_iterations=", &SatParameters::set_root_lp_iterations)
548
+ .define_method("routing_cut_dp_effort", &SatParameters::routing_cut_dp_effort)
549
+ .define_method("routing_cut_dp_effort=", &SatParameters::set_routing_cut_dp_effort)
550
+ .define_method("routing_cut_max_infeasible_path_length", &SatParameters::routing_cut_max_infeasible_path_length)
551
+ .define_method("routing_cut_max_infeasible_path_length=", &SatParameters::set_routing_cut_max_infeasible_path_length)
552
+ .define_method("routing_cut_subset_size_for_binary_relation_bound", &SatParameters::routing_cut_subset_size_for_binary_relation_bound)
553
+ .define_method("routing_cut_subset_size_for_binary_relation_bound=", &SatParameters::set_routing_cut_subset_size_for_binary_relation_bound)
554
+ .define_method("routing_cut_subset_size_for_exact_binary_relation_bound", &SatParameters::routing_cut_subset_size_for_exact_binary_relation_bound)
555
+ .define_method("routing_cut_subset_size_for_exact_binary_relation_bound=", &SatParameters::set_routing_cut_subset_size_for_exact_binary_relation_bound)
556
+ .define_method("routing_cut_subset_size_for_shortest_paths_bound", &SatParameters::routing_cut_subset_size_for_shortest_paths_bound)
557
+ .define_method("routing_cut_subset_size_for_shortest_paths_bound=", &SatParameters::set_routing_cut_subset_size_for_shortest_paths_bound)
558
+ .define_method("routing_cut_subset_size_for_tight_binary_relation_bound", &SatParameters::routing_cut_subset_size_for_tight_binary_relation_bound)
559
+ .define_method("routing_cut_subset_size_for_tight_binary_relation_bound=", &SatParameters::set_routing_cut_subset_size_for_tight_binary_relation_bound)
560
+ .define_method("save_lp_basis_in_lb_tree_search", &SatParameters::save_lp_basis_in_lb_tree_search)
561
+ .define_method("save_lp_basis_in_lb_tree_search=", &SatParameters::set_save_lp_basis_in_lb_tree_search)
562
+ .define_method("search_random_variable_pool_size", &SatParameters::search_random_variable_pool_size)
563
+ .define_method("search_random_variable_pool_size=", &SatParameters::set_search_random_variable_pool_size)
564
+ .define_method("share_binary_clauses", &SatParameters::share_binary_clauses)
565
+ .define_method("share_binary_clauses=", &SatParameters::set_share_binary_clauses)
566
+ .define_method("share_glue_clauses", &SatParameters::share_glue_clauses)
567
+ .define_method("share_glue_clauses=", &SatParameters::set_share_glue_clauses)
568
+ .define_method("share_glue_clauses_dtime", &SatParameters::share_glue_clauses_dtime)
569
+ .define_method("share_glue_clauses_dtime=", &SatParameters::set_share_glue_clauses_dtime)
570
+ .define_method("share_level_zero_bounds", &SatParameters::share_level_zero_bounds)
571
+ .define_method("share_level_zero_bounds=", &SatParameters::set_share_level_zero_bounds)
572
+ .define_method("share_linear2_bounds", &SatParameters::share_linear2_bounds)
573
+ .define_method("share_linear2_bounds=", &SatParameters::set_share_linear2_bounds)
574
+ .define_method("share_objective_bounds", &SatParameters::share_objective_bounds)
575
+ .define_method("share_objective_bounds=", &SatParameters::set_share_objective_bounds)
576
+ .define_method("shared_tree_balance_tolerance", &SatParameters::shared_tree_balance_tolerance)
577
+ .define_method("shared_tree_balance_tolerance=", &SatParameters::set_shared_tree_balance_tolerance)
578
+ .define_method("shared_tree_max_nodes_per_worker", &SatParameters::shared_tree_max_nodes_per_worker)
579
+ .define_method("shared_tree_max_nodes_per_worker=", &SatParameters::set_shared_tree_max_nodes_per_worker)
580
+ .define_method("shared_tree_num_workers", &SatParameters::shared_tree_num_workers)
581
+ .define_method("shared_tree_num_workers=", &SatParameters::set_shared_tree_num_workers)
582
+ .define_method("shared_tree_open_leaves_per_worker", &SatParameters::shared_tree_open_leaves_per_worker)
583
+ .define_method("shared_tree_open_leaves_per_worker=", &SatParameters::set_shared_tree_open_leaves_per_worker)
584
+ .define_method("shared_tree_split_min_dtime", &SatParameters::shared_tree_split_min_dtime)
585
+ .define_method("shared_tree_split_min_dtime=", &SatParameters::set_shared_tree_split_min_dtime)
586
+ .define_method("shared_tree_worker_enable_phase_sharing", &SatParameters::shared_tree_worker_enable_phase_sharing)
587
+ .define_method("shared_tree_worker_enable_phase_sharing=", &SatParameters::set_shared_tree_worker_enable_phase_sharing)
588
+ .define_method("shared_tree_worker_enable_trail_sharing", &SatParameters::shared_tree_worker_enable_trail_sharing)
589
+ .define_method("shared_tree_worker_enable_trail_sharing=", &SatParameters::set_shared_tree_worker_enable_trail_sharing)
590
+ .define_method("shared_tree_worker_min_restarts_per_subtree", &SatParameters::shared_tree_worker_min_restarts_per_subtree)
591
+ .define_method("shared_tree_worker_min_restarts_per_subtree=", &SatParameters::set_shared_tree_worker_min_restarts_per_subtree)
592
+ .define_method("shaving_deterministic_time_in_probing_search", &SatParameters::shaving_deterministic_time_in_probing_search)
593
+ .define_method("shaving_deterministic_time_in_probing_search=", &SatParameters::set_shaving_deterministic_time_in_probing_search)
594
+ .define_method("shaving_search_deterministic_time", &SatParameters::shaving_search_deterministic_time)
595
+ .define_method("shaving_search_deterministic_time=", &SatParameters::set_shaving_search_deterministic_time)
596
+ .define_method("shaving_search_threshold", &SatParameters::shaving_search_threshold)
597
+ .define_method("shaving_search_threshold=", &SatParameters::set_shaving_search_threshold)
598
+ .define_method("solution_pool_diversity_limit", &SatParameters::solution_pool_diversity_limit)
599
+ .define_method("solution_pool_diversity_limit=", &SatParameters::set_solution_pool_diversity_limit)
600
+ .define_method("solution_pool_size", &SatParameters::solution_pool_size)
601
+ .define_method("solution_pool_size=", &SatParameters::set_solution_pool_size)
602
+ .define_method("stop_after_first_solution", &SatParameters::stop_after_first_solution)
603
+ .define_method("stop_after_first_solution=", &SatParameters::set_stop_after_first_solution)
604
+ .define_method("stop_after_presolve", &SatParameters::stop_after_presolve)
605
+ .define_method("stop_after_presolve=", &SatParameters::set_stop_after_presolve)
606
+ .define_method("stop_after_root_propagation", &SatParameters::stop_after_root_propagation)
607
+ .define_method("stop_after_root_propagation=", &SatParameters::set_stop_after_root_propagation)
608
+ .define_method("strategy_change_increase_ratio", &SatParameters::strategy_change_increase_ratio)
609
+ .define_method("strategy_change_increase_ratio=", &SatParameters::set_strategy_change_increase_ratio)
610
+ .define_method("subsume_during_vivification", &SatParameters::subsume_during_vivification)
611
+ .define_method("subsume_during_vivification=", &SatParameters::set_subsume_during_vivification)
612
+ .define_method("subsumption_during_conflict_analysis", &SatParameters::subsumption_during_conflict_analysis)
613
+ .define_method("subsumption_during_conflict_analysis=", &SatParameters::set_subsumption_during_conflict_analysis)
614
+ .define_method("symmetry_detection_deterministic_time_limit", &SatParameters::symmetry_detection_deterministic_time_limit)
615
+ .define_method("symmetry_detection_deterministic_time_limit=", &SatParameters::set_symmetry_detection_deterministic_time_limit)
616
+ .define_method("symmetry_level", &SatParameters::symmetry_level)
617
+ .define_method("symmetry_level=", &SatParameters::set_symmetry_level)
618
+ .define_method("table_compression_level", &SatParameters::table_compression_level)
619
+ .define_method("table_compression_level=", &SatParameters::set_table_compression_level)
620
+ .define_method("transitive_precedences_work_limit", &SatParameters::transitive_precedences_work_limit)
621
+ .define_method("transitive_precedences_work_limit=", &SatParameters::set_transitive_precedences_work_limit)
622
+ .define_method("use_absl_random", &SatParameters::use_absl_random)
623
+ .define_method("use_absl_random=", &SatParameters::set_use_absl_random)
624
+ .define_method("use_all_different_for_circuit", &SatParameters::use_all_different_for_circuit)
625
+ .define_method("use_all_different_for_circuit=", &SatParameters::set_use_all_different_for_circuit)
626
+ .define_method("use_area_energetic_reasoning_in_no_overlap_2d", &SatParameters::use_area_energetic_reasoning_in_no_overlap_2d)
627
+ .define_method("use_area_energetic_reasoning_in_no_overlap_2d=", &SatParameters::set_use_area_energetic_reasoning_in_no_overlap_2d)
628
+ .define_method("use_blocking_restart", &SatParameters::use_blocking_restart)
629
+ .define_method("use_blocking_restart=", &SatParameters::set_use_blocking_restart)
630
+ .define_method("use_chronological_backtracking", &SatParameters::use_chronological_backtracking)
631
+ .define_method("use_chronological_backtracking=", &SatParameters::set_use_chronological_backtracking)
632
+ .define_method("use_combined_no_overlap", &SatParameters::use_combined_no_overlap)
633
+ .define_method("use_combined_no_overlap=", &SatParameters::set_use_combined_no_overlap)
634
+ .define_method("use_conservative_scale_overload_checker", &SatParameters::use_conservative_scale_overload_checker)
635
+ .define_method("use_conservative_scale_overload_checker=", &SatParameters::set_use_conservative_scale_overload_checker)
636
+ .define_method("use_disjunctive_constraint_in_cumulative", &SatParameters::use_disjunctive_constraint_in_cumulative)
637
+ .define_method("use_disjunctive_constraint_in_cumulative=", &SatParameters::set_use_disjunctive_constraint_in_cumulative)
638
+ .define_method("use_dual_scheduling_heuristics", &SatParameters::use_dual_scheduling_heuristics)
639
+ .define_method("use_dual_scheduling_heuristics=", &SatParameters::set_use_dual_scheduling_heuristics)
640
+ .define_method("use_dynamic_precedence_in_cumulative", &SatParameters::use_dynamic_precedence_in_cumulative)
641
+ .define_method("use_dynamic_precedence_in_cumulative=", &SatParameters::set_use_dynamic_precedence_in_cumulative)
642
+ .define_method("use_dynamic_precedence_in_disjunctive", &SatParameters::use_dynamic_precedence_in_disjunctive)
643
+ .define_method("use_dynamic_precedence_in_disjunctive=", &SatParameters::set_use_dynamic_precedence_in_disjunctive)
644
+ .define_method("use_energetic_reasoning_in_no_overlap_2d", &SatParameters::use_energetic_reasoning_in_no_overlap_2d)
645
+ .define_method("use_energetic_reasoning_in_no_overlap_2d=", &SatParameters::set_use_energetic_reasoning_in_no_overlap_2d)
646
+ .define_method("use_erwa_heuristic", &SatParameters::use_erwa_heuristic)
647
+ .define_method("use_erwa_heuristic=", &SatParameters::set_use_erwa_heuristic)
648
+ .define_method("use_exact_lp_reason", &SatParameters::use_exact_lp_reason)
649
+ .define_method("use_exact_lp_reason=", &SatParameters::set_use_exact_lp_reason)
650
+ .define_method("use_extended_probing", &SatParameters::use_extended_probing)
651
+ .define_method("use_extended_probing=", &SatParameters::set_use_extended_probing)
652
+ .define_method("use_feasibility_jump", &SatParameters::use_feasibility_jump)
653
+ .define_method("use_feasibility_jump=", &SatParameters::set_use_feasibility_jump)
654
+ .define_method("use_feasibility_pump", &SatParameters::use_feasibility_pump)
655
+ .define_method("use_feasibility_pump=", &SatParameters::set_use_feasibility_pump)
656
+ .define_method("use_hard_precedences_in_cumulative", &SatParameters::use_hard_precedences_in_cumulative)
657
+ .define_method("use_hard_precedences_in_cumulative=", &SatParameters::set_use_hard_precedences_in_cumulative)
658
+ .define_method("use_implied_bounds", &SatParameters::use_implied_bounds)
659
+ .define_method("use_implied_bounds=", &SatParameters::set_use_implied_bounds)
660
+ .define_method("use_lb_relax_lns", &SatParameters::use_lb_relax_lns)
661
+ .define_method("use_lb_relax_lns=", &SatParameters::set_use_lb_relax_lns)
662
+ .define_method("use_linear3_for_no_overlap_2d_precedences", &SatParameters::use_linear3_for_no_overlap_2d_precedences)
663
+ .define_method("use_linear3_for_no_overlap_2d_precedences=", &SatParameters::set_use_linear3_for_no_overlap_2d_precedences)
664
+ .define_method("use_lns", &SatParameters::use_lns)
665
+ .define_method("use_lns=", &SatParameters::set_use_lns)
666
+ .define_method("use_lns_only", &SatParameters::use_lns_only)
667
+ .define_method("use_lns_only=", &SatParameters::set_use_lns_only)
668
+ .define_method("use_ls_only", &SatParameters::use_ls_only)
669
+ .define_method("use_ls_only=", &SatParameters::set_use_ls_only)
670
+ .define_method("use_new_integer_conflict_resolution", &SatParameters::use_new_integer_conflict_resolution)
671
+ .define_method("use_new_integer_conflict_resolution=", &SatParameters::set_use_new_integer_conflict_resolution)
672
+ .define_method("use_objective_lb_search", &SatParameters::use_objective_lb_search)
673
+ .define_method("use_objective_lb_search=", &SatParameters::set_use_objective_lb_search)
674
+ .define_method("use_objective_shaving_search", &SatParameters::use_objective_shaving_search)
675
+ .define_method("use_objective_shaving_search=", &SatParameters::set_use_objective_shaving_search)
676
+ .define_method("use_optimization_hints", &SatParameters::use_optimization_hints)
677
+ .define_method("use_optimization_hints=", &SatParameters::set_use_optimization_hints)
678
+ .define_method("use_optional_variables", &SatParameters::use_optional_variables)
679
+ .define_method("use_optional_variables=", &SatParameters::set_use_optional_variables)
680
+ .define_method("use_overload_checker_in_cumulative", &SatParameters::use_overload_checker_in_cumulative)
681
+ .define_method("use_overload_checker_in_cumulative=", &SatParameters::set_use_overload_checker_in_cumulative)
682
+ .define_method("use_pb_resolution", &SatParameters::use_pb_resolution)
683
+ .define_method("use_pb_resolution=", &SatParameters::set_use_pb_resolution)
684
+ .define_method("use_phase_saving", &SatParameters::use_phase_saving)
685
+ .define_method("use_phase_saving=", &SatParameters::set_use_phase_saving)
686
+ .define_method("use_precedences_in_disjunctive_constraint", &SatParameters::use_precedences_in_disjunctive_constraint)
687
+ .define_method("use_precedences_in_disjunctive_constraint=", &SatParameters::set_use_precedences_in_disjunctive_constraint)
688
+ .define_method("use_probing_search", &SatParameters::use_probing_search)
689
+ .define_method("use_probing_search=", &SatParameters::set_use_probing_search)
690
+ .define_method("use_rins_lns", &SatParameters::use_rins_lns)
691
+ .define_method("use_rins_lns=", &SatParameters::set_use_rins_lns)
692
+ .define_method("use_sat_inprocessing", &SatParameters::use_sat_inprocessing)
693
+ .define_method("use_sat_inprocessing=", &SatParameters::set_use_sat_inprocessing)
694
+ .define_method("use_shared_tree_search", &SatParameters::use_shared_tree_search)
695
+ .define_method("use_shared_tree_search=", &SatParameters::set_use_shared_tree_search)
696
+ .define_method("use_strong_propagation_in_disjunctive", &SatParameters::use_strong_propagation_in_disjunctive)
697
+ .define_method("use_strong_propagation_in_disjunctive=", &SatParameters::set_use_strong_propagation_in_disjunctive)
698
+ .define_method("use_symmetry_in_lp", &SatParameters::use_symmetry_in_lp)
699
+ .define_method("use_symmetry_in_lp=", &SatParameters::set_use_symmetry_in_lp)
700
+ .define_method("use_timetable_edge_finding_in_cumulative", &SatParameters::use_timetable_edge_finding_in_cumulative)
701
+ .define_method("use_timetable_edge_finding_in_cumulative=", &SatParameters::set_use_timetable_edge_finding_in_cumulative)
702
+ .define_method("use_timetabling_in_no_overlap_2d", &SatParameters::use_timetabling_in_no_overlap_2d)
703
+ .define_method("use_timetabling_in_no_overlap_2d=", &SatParameters::set_use_timetabling_in_no_overlap_2d)
704
+ .define_method("use_try_edge_reasoning_in_no_overlap_2d", &SatParameters::use_try_edge_reasoning_in_no_overlap_2d)
705
+ .define_method("use_try_edge_reasoning_in_no_overlap_2d=", &SatParameters::set_use_try_edge_reasoning_in_no_overlap_2d)
706
+ .define_method("variable_activity_decay", &SatParameters::variable_activity_decay)
707
+ .define_method("variable_activity_decay=", &SatParameters::set_variable_activity_decay)
708
+ .define_method("variables_shaving_level", &SatParameters::variables_shaving_level)
709
+ .define_method("variables_shaving_level=", &SatParameters::set_variables_shaving_level)
710
+ .define_method("violation_ls_compound_move_probability", &SatParameters::violation_ls_compound_move_probability)
711
+ .define_method("violation_ls_compound_move_probability=", &SatParameters::set_violation_ls_compound_move_probability)
712
+ .define_method("violation_ls_perturbation_period", &SatParameters::violation_ls_perturbation_period)
713
+ .define_method("violation_ls_perturbation_period=", &SatParameters::set_violation_ls_perturbation_period);
165
714
 
166
715
  Rice::define_class_under<CpModelBuilder>(m, "CpModel")
167
716
  .define_constructor(Rice::Constructor<CpModelBuilder>())
@@ -193,32 +742,32 @@ void init_constraint(Rice::Module& m) {
193
742
  })
194
743
  .define_method(
195
744
  "new_interval_var",
196
- [](CpModelBuilder& self, IntVar start, IntVar size, IntVar end, const std::string& name) {
745
+ [](CpModelBuilder& self, const IntVar& start, const IntVar& size, const IntVar& end, const std::string& name) {
197
746
  return self.NewIntervalVar(start, size, end).WithName(name);
198
747
  })
199
748
  .define_method(
200
749
  "new_optional_interval_var",
201
- [](CpModelBuilder& self, IntVar start, IntVar size, IntVar end, BoolVar presence, const std::string& name) {
750
+ [](CpModelBuilder& self, const IntVar& start, const IntVar& size, const IntVar& end, const BoolVar& presence, const std::string& name) {
202
751
  return self.NewOptionalIntervalVar(start, size, end, presence).WithName(name);
203
752
  })
204
753
  .define_method(
205
754
  "add_bool_or",
206
- [](CpModelBuilder& self, std::vector<BoolVar> literals) {
755
+ [](CpModelBuilder& self, const std::vector<BoolVar>& literals) {
207
756
  return self.AddBoolOr(literals);
208
757
  })
209
758
  .define_method(
210
759
  "add_bool_and",
211
- [](CpModelBuilder& self, std::vector<BoolVar> literals) {
760
+ [](CpModelBuilder& self, const std::vector<BoolVar>& literals) {
212
761
  return self.AddBoolAnd(literals);
213
762
  })
214
763
  .define_method(
215
764
  "add_bool_xor",
216
- [](CpModelBuilder& self, std::vector<BoolVar> literals) {
765
+ [](CpModelBuilder& self, const std::vector<BoolVar>& literals) {
217
766
  return self.AddBoolXor(literals);
218
767
  })
219
768
  .define_method(
220
769
  "add_implication",
221
- [](CpModelBuilder& self, BoolVar a, BoolVar b) {
770
+ [](CpModelBuilder& self, const BoolVar& a, const BoolVar& b) {
222
771
  return self.AddImplication(a, b);
223
772
  })
224
773
  .define_method(
@@ -253,7 +802,7 @@ void init_constraint(Rice::Module& m) {
253
802
  })
254
803
  .define_method(
255
804
  "add_linear_expression_in_domain",
256
- [](CpModelBuilder& self, LinearExpr expr, Domain domain) {
805
+ [](CpModelBuilder& self, LinearExpr expr, const Domain& domain) {
257
806
  return self.AddLinearConstraint(expr, domain);
258
807
  })
259
808
  .define_method(
@@ -263,7 +812,7 @@ void init_constraint(Rice::Module& m) {
263
812
  })
264
813
  .define_method(
265
814
  "add_all_different",
266
- [](CpModelBuilder& self, std::vector<IntVar> vars) {
815
+ [](CpModelBuilder& self, const std::vector<IntVar>& vars) {
267
816
  return self.AddAllDifferent(vars);
268
817
  })
269
818
  .define_method(
@@ -278,7 +827,7 @@ void init_constraint(Rice::Module& m) {
278
827
  })
279
828
  .define_method(
280
829
  "add_inverse_constraint",
281
- [](CpModelBuilder& self, std::vector<IntVar> variables, std::vector<IntVar> inverse_variables) {
830
+ [](CpModelBuilder& self, const std::vector<IntVar>& variables, const std::vector<IntVar>& inverse_variables) {
282
831
  return self.AddInverseConstraint(variables, inverse_variables);
283
832
  })
284
833
  .define_method(
@@ -313,7 +862,7 @@ void init_constraint(Rice::Module& m) {
313
862
  })
314
863
  .define_method(
315
864
  "add_no_overlap",
316
- [](CpModelBuilder& self, std::vector<IntervalVar> vars) {
865
+ [](CpModelBuilder& self, const std::vector<IntervalVar>& vars) {
317
866
  return self.AddNoOverlap(vars);
318
867
  })
319
868
  .define_method(
@@ -348,12 +897,12 @@ void init_constraint(Rice::Module& m) {
348
897
  })
349
898
  .define_method(
350
899
  "add_assumption",
351
- [](CpModelBuilder& self, BoolVar lit) {
900
+ [](CpModelBuilder& self, const BoolVar& lit) {
352
901
  self.AddAssumption(lit);
353
902
  })
354
903
  .define_method(
355
904
  "add_assumptions",
356
- [](CpModelBuilder& self, std::vector<BoolVar> literals) {
905
+ [](CpModelBuilder& self, const std::vector<BoolVar>& literals) {
357
906
  self.AddAssumptions(literals);
358
907
  })
359
908
  .define_method(
@@ -370,7 +919,9 @@ void init_constraint(Rice::Module& m) {
370
919
  "to_s",
371
920
  [](CpModelBuilder& self) {
372
921
  std::string proto_string;
373
- google::protobuf::TextFormat::PrintToString(self.Proto(), &proto_string);
922
+ if (!google::protobuf::TextFormat::PrintToString(self.Proto(), &proto_string)) {
923
+ throw Rice::Exception(rb_eRuntimeError, "PrintToString failed");
924
+ }
374
925
  return proto_string;
375
926
  });
376
927
 
@@ -402,7 +953,7 @@ void init_constraint(Rice::Module& m) {
402
953
  } else if (status == CpSolverStatus::UNKNOWN) {
403
954
  return Symbol("unknown");
404
955
  } else {
405
- throw std::runtime_error("Unknown solver status");
956
+ throw std::runtime_error{"Unknown solver status"};
406
957
  }
407
958
  })
408
959
  .define_method(
@@ -426,34 +977,105 @@ void init_constraint(Rice::Module& m) {
426
977
  "_solve",
427
978
  [](Object self, CpModelBuilder& model, SatParameters& parameters, Object callback) {
428
979
  Model m;
980
+ m.Add(NewSatParameters(parameters));
429
981
 
430
- if (!callback.is_nil()) {
431
- // use a single worker since Ruby code cannot be run in a non-Ruby thread
432
- parameters.set_num_search_workers(1);
982
+ std::atomic<bool> done{false};
983
+ Channel<CpSolverResponse> channel;
984
+ Rice::Object ruby_thread;
985
+ std::optional<Rice::Exception> exception;
433
986
 
434
- m.Add(NewFeasibleSolutionObserver(
435
- [&callback](const CpSolverResponse& r) {
436
- if (!ruby_native_thread_p()) {
437
- throw std::runtime_error("Non-Ruby thread");
987
+ auto with_gvl = [](std::function<void()> f) {
988
+ auto ruby_wrapper = [](void* arg) -> void* {
989
+ (*static_cast<decltype(f)*>(arg))();
990
+ return nullptr;
991
+ };
992
+ rb_thread_call_with_gvl(ruby_wrapper, &f);
993
+ };
994
+
995
+ auto ruby_observer = [&]() {
996
+ return Rice::detail::no_gvl([&]() {
997
+ while (true) {
998
+ if (done.load() && channel.empty()) {
999
+ break;
1000
+ }
1001
+
1002
+ while (true) {
1003
+ std::optional<CpSolverResponse> response = channel.recv_timeout(std::chrono::milliseconds(10));
1004
+ if (!response) {
1005
+ break;
1006
+ }
1007
+
1008
+ bool stop = false;
1009
+ with_gvl([&]() {
1010
+ try {
1011
+ try {
1012
+ callback.call("response=", response.value());
1013
+ callback.call("on_solution_callback");
1014
+ stop = static_cast<bool>(callback.attr_get("@stopped"));
1015
+ } catch (const Rice::Exception& e) {
1016
+ exception = e;
1017
+ stop = true;
1018
+ }
1019
+ callback.call("response=", Object(Qnil));
1020
+ } catch (const Rice::Exception& e) {
1021
+ exception = e;
1022
+ stop = true;
1023
+ }
1024
+ });
1025
+
1026
+ if (stop) {
1027
+ StopSearch(&m);
1028
+ return Qnil;
1029
+ }
438
1030
  }
439
1031
 
440
- callback.call("response=", r);
441
- callback.call("on_solution_callback");
1032
+ with_gvl([]() {
1033
+ Rice::detail::protect(rb_thread_schedule);
1034
+ });
1035
+ }
1036
+ return Qnil;
1037
+ });
1038
+ };
1039
+
1040
+ auto ruby_wrapper = [](void* arg) {
1041
+ return (*static_cast<decltype(ruby_observer)*>(arg))();
1042
+ };
1043
+
1044
+ if (!callback.is_nil()) {
1045
+ ruby_thread = Rice::detail::protect([&]() {
1046
+ return rb_thread_create(ruby_wrapper, &ruby_observer);
1047
+ });
1048
+
1049
+ m.Add(NewFeasibleSolutionObserver(
1050
+ [&](const CpSolverResponse& response) {
1051
+ channel.send(response);
442
1052
  })
443
1053
  );
444
1054
  }
445
1055
 
446
- m.Add(NewSatParameters(parameters));
447
- return SolveCpModel(model.Build(), &m);
1056
+ CpSolverResponse response = Rice::detail::no_gvl([&]() {
1057
+ return SolveCpModel(model.Build(), &m);
1058
+ });
1059
+
1060
+ if (!callback.is_nil()) {
1061
+ done = true;
1062
+ ruby_thread.call("value");
1063
+
1064
+ if (exception.has_value()) {
1065
+ throw exception.value();
1066
+ }
1067
+ }
1068
+
1069
+ return response;
448
1070
  })
449
1071
  .define_method(
450
1072
  "_solution_integer_value",
451
- [](Object self, const CpSolverResponse& response, IntVar x) {
1073
+ [](Object self, const CpSolverResponse& response, const IntVar& x) {
452
1074
  return SolutionIntegerValue(response, x);
453
1075
  })
454
1076
  .define_method(
455
1077
  "_solution_boolean_value",
456
- [](Object self, const CpSolverResponse& response, BoolVar x) {
1078
+ [](Object self, const CpSolverResponse& response, const BoolVar& x) {
457
1079
  return SolutionBooleanValue(response, x);
458
1080
  });
459
1081
  }