Orbiter 2022
Combinatorial Objects
solver.h
Go to the documentation of this file.
1// solver.h
2//
3// Anton Betten
4//
5// moved here from top_level.h: July 28, 2018
6// top_level started: September 23 2010
7// based on global.h, which was taken from reader.h: 3/22/09
8
9
10
11#ifndef ORBITER_SRC_LIB_TOP_LEVEL_SOLVER_SOLVER_H_
12#define ORBITER_SRC_LIB_TOP_LEVEL_SOLVER_SOLVER_H_
13
14
15namespace orbiter {
16namespace layer4_classification {
17
18
19// #############################################################################
20// exact_cover.cpp
21// #############################################################################
22
23
25
26
28public:
29
30 std::string input_prefix;
31 std::string output_prefix;
32 std::string solution_prefix;
33 std::string base_fname;
34
35 std::string fname_solutions;
36 std::string fname_statistics;
37
38 void *user_data;
39
40 actions::action *A_base;
41 actions::action *A_on_blocks;
42
43
44 void (*prepare_function_new)(exact_cover *E, int starter_case,
45 long int *candidates, int nb_candidates,
46 groups::strong_generators *Strong_gens,
47 solvers::diophant *&Dio, long int *&col_label,
48 int &f_ruled_out,
49 int verbose_level);
50
51
52
53 void (*early_test_func)(long int *S, int len,
54 long int *candidates, int nb_candidates,
55 long int *good_candidates, int &nb_good_candidates,
56 void *data, int verbose_level);
58
60 int (*solution_test_func)(exact_cover *EC, long int *S, int len,
61 void *data, int verbose_level);
63
66 int starter_case, int verbose_level);
67
68
70
71 int f_lex;
72
76
79
82 long int *starter; // [starter_size]
83
87
90 void null();
91 void freeself();
92 void init_basic(void *user_data,
93 actions::action *A_base, actions::action *A_on_blocks,
94 int target_size, int starter_size,
95 std::string &input_prefix, std::string &output_prefix,
96 std::string &solution_prefix, std::string &base_fname,
97 int f_lex,
98 int verbose_level);
99
101 void (*early_test_func)(long int *S, int len,
102 long int *candidates, int nb_candidates,
103 long int *good_candidates, int &nb_good_candidates,
104 void *data, int verbose_level),
106 int verbose_level);
108 void (*prepare_function_new)(exact_cover *E, int starter_case,
109 long int *candidates, int nb_candidates,
110 groups::strong_generators *Strong_gens,
111 solvers::diophant *&Dio, long int *&col_label,
112 int &f_ruled_out,
113 int verbose_level),
114 int verbose_level);
115 void set_split(int split_r, int split_m, int verbose_level);
116 void set_single_case(int single_case, int verbose_level);
117 void randomize(std::string &random_permutation_fname, int verbose_level);
119 int (*solution_test_func)(exact_cover *EC, long int *S, int len,
120 void *data, int verbose_level),
122 int verbose_level);
125 int starter_case, int verbose_level)
126 );
127 void compute_liftings_new(int f_solve, int f_save, int f_read_instead,
128 int f_draw_system, std::string &fname_system,
129 int f_write_tree, std::string &fname_tree, int verbose_level);
130 void compute_liftings_single_case_new(int starter_case,
131 int f_solve, int f_save, int f_read_instead,
132 int &nb_col,
133 long int *&Solutions, int &sol_length, int &nb_sol,
134 int &nb_backtrack, int &dt,
135 int f_draw_system, std::string &fname_system,
136 int f_write_tree, std::string &fname_tree,
137 int verbose_level);
138 void lexorder_test(long int *live_blocks2, int &nb_live_blocks2,
139 data_structures_groups::vector_ge *stab_gens,
140 int verbose_level);
141};
142
143
144
145
146// #############################################################################
147// exact_cover_arguments.cpp
148// #############################################################################
149
150
152
153
154
156public:
157 actions::action *A;
158 actions::action *A2;
161 std::string base_fname;
163 std::string input_prefix;
165 std::string output_prefix;
167 std::string solution_prefix;
172 int f_lex;
180 std::string fname_system;
182 std::string fname_tree;
183 void (*prepare_function_new)(exact_cover *E, int starter_case,
184 long int *candidates, int nb_candidates,
185 groups::strong_generators *Strong_gens,
186 solvers::diophant *&Dio, long int *&col_label,
187 int &f_ruled_out,
188 int verbose_level);
189 void (*early_test_function)(long int *S, int len,
190 long int *candidates, int nb_candidates,
191 long int *good_candidates, int &nb_good_candidates,
192 void *data, int verbose_level);
195 int (*solution_test_func)(exact_cover *EC, long int *S, int len,
196 void *data, int verbose_level);
200 int starter_case, int verbose_level);
201
204
207 void null();
208 void freeself();
209 int read_arguments(int argc, std::string *argv,
210 int verbose_level);
211 void compute_lifts(int verbose_level);
212};
213
214}}
215
216
217#endif /* ORBITER_SRC_LIB_TOP_LEVEL_SOLVER_SOLVER_H_ */
218
219
220
command line arguments to control the lifting via exact cover
Definition: solver.h:155
void(* prepare_function_new)(exact_cover *E, int starter_case, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, solvers::diophant *&Dio, long int *&col_label, int &f_ruled_out, int verbose_level)
Definition: solver.h:183
void(* late_cleanup_function)(exact_cover *EC, int starter_case, int verbose_level)
Definition: solver.h:199
void(* early_test_function)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level)
Definition: solver.h:189
int read_arguments(int argc, std::string *argv, int verbose_level)
int(* solution_test_func)(exact_cover *EC, long int *S, int len, void *data, int verbose_level)
Definition: solver.h:195
exact cover problems arising with the lifting of combinatorial objects
Definition: solver.h:27
void set_single_case(int single_case, int verbose_level)
void set_split(int split_r, int split_m, int verbose_level)
void(* prepare_function_new)(exact_cover *E, int starter_case, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, solvers::diophant *&Dio, long int *&col_label, int &f_ruled_out, int verbose_level)
Definition: solver.h:44
void add_solution_test_function(int(*solution_test_func)(exact_cover *EC, long int *S, int len, void *data, int verbose_level), void *solution_test_func_data, int verbose_level)
int(* solution_test_func)(exact_cover *EC, long int *S, int len, void *data, int verbose_level)
Definition: solver.h:60
void init_basic(void *user_data, actions::action *A_base, actions::action *A_on_blocks, int target_size, int starter_size, std::string &input_prefix, std::string &output_prefix, std::string &solution_prefix, std::string &base_fname, int f_lex, int verbose_level)
Definition: exact_cover.cpp:58
void add_late_cleanup_function(void(*late_cleanup_function)(exact_cover *E, int starter_case, int verbose_level))
void compute_liftings_new(int f_solve, int f_save, int f_read_instead, int f_draw_system, std::string &fname_system, int f_write_tree, std::string &fname_tree, int verbose_level)
void init_early_test_func(void(*early_test_func)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *early_test_func_data, int verbose_level)
void init_prepare_function_new(void(*prepare_function_new)(exact_cover *E, int starter_case, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, solvers::diophant *&Dio, long int *&col_label, int &f_ruled_out, int verbose_level), int verbose_level)
void(* early_test_func)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level)
Definition: solver.h:53
void(* late_cleanup_function)(exact_cover *E, int starter_case, int verbose_level)
Definition: solver.h:65
void randomize(std::string &random_permutation_fname, int verbose_level)
void compute_liftings_single_case_new(int starter_case, int f_solve, int f_save, int f_read_instead, int &nb_col, long int *&Solutions, int &sol_length, int &nb_sol, int &nb_backtrack, int &dt, int f_draw_system, std::string &fname_system, int f_write_tree, std::string &fname_tree, int verbose_level)
void lexorder_test(long int *live_blocks2, int &nb_live_blocks2, data_structures_groups::vector_ge *stab_gens, int verbose_level)
the orbiter library for the classification of combinatorial objects