11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_SOLVERS_SOLVERS_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_SOLVERS_SOLVERS_H_
16namespace layer1_foundations {
61 int argc, std::string *argv,
182 int argc, std::string *argv,
263 int *weights,
int nb_weights,
int target_value,
266 int *weights,
int *bounds,
int nb_weights,
int target_value,
269 int nb_cols,
int *Inc,
int nb_to_select,
270 int *Rhs,
int verbose_level);
272 int *Inc,
int nb_to_select,
int verbose_level);
273 void init_RHS(
int RHS_value,
int verbose_level);
275 int nb_to_select,
int verbose_level);
279 int &
Aij(
int i,
int j);
280 int &
Gij(
int i,
int j);
287 void print2(
int f_with_gcd);
301 void get_solutions(
long int *&Sol,
int &nb_sol,
int verbose_level);
309 const char *fname_tree,
310 void (*user_callback_solution_found)(
int *sol,
int len,
311 int nb_sol,
void *data),
313 int solve_all_mckay(
long int &nb_backtrack_nodes,
int maxresults,
int verbose_level);
317 int f_max_sol,
int max_sol,
322 int j_fst(
int j,
int verbose_level);
323 int j_nxt(
int j,
int verbose_level);
325 long int &nb_backtrack_nodes,
int &nb_sol,
int verbose_level);
327 int maxresults,
long int &nb_backtrack_nodes,
328 int minrhs,
int &nb_sol,
int verbose_level);
335 int *&values,
int *&multiplicities,
int verbose_level);
345 int &nb_eqns_replaced,
int *&eqns_replaced,
347 void split_by_equation(
int eqn_idx,
int f_solve_case,
int solve_case_idx,
int verbose_level);
349 int f_solve_case,
int solve_case_idx_r,
int solve_case_idx_m,
352 int max_number_of_coefficients,
360 void read_xml(std::ifstream &f,
char *
label,
int verbose_level);
367 int f_box_width,
int box_width,
int bit_depth,
int verbose_level);
369 std::string &fname_base,
373 std::string &fname_base,
375 int f_solution,
int *solution,
int solution_sz,
382 void analyze(
int verbose_level);
432 int argc, std::string *argv,
500 int *solution,
int len,
int nb_sol,
void *data);
516 int *solution,
int len,
int nb_sol,
void *data),
530 void Solve(
int verbose_level);
557 void SearchRHS(
int k,
int verbose_level);
607 #define INTERVAL_IN_SECONDS 1
620 int aEqnAnz,
int aVarAnz);
621 void possolve(std::vector<int> &lo, std::vector<int> &hi,
622 std::vector<equation> &eqn,
623 std::vector<int> &lorhs, std::vector<int> &hirhs,
624 std::vector<int> &neqn,
int numeqn,
int numvar,
634 int hirs1,
int eqn2,
equation &e2,
int *pl2,
635 int *plors2,
int *phirs2,
int verbose_level);
636 void pruneqn(std::vector<int> &lo, std::vector<int> &hi,
638 std::vector<int> &lorhs, std::vector<int> &hirhs,
639 std::vector<equation> &eqn, std::vector<int> &neqn,
640 int numeqn,
int verbose_level);
641 void varprune(std::vector<int> &lo, std::vector<int> &hi,
642 std::vector<int> &lorhs, std::vector<int> &hirhs,
643 std::vector<equation> &eqn, std::vector<int> &neqn,
644 int numeqn,
int verbose_level);
645 void puteqns(std::vector<int> &lo, std::vector<int> &hi,
647 std::vector<int> &lorhs, std::vector<int> &hirhs,
648 std::vector<equation> &eqn, std::vector<int> &neqn,
650 int divideeqns(std::vector<int> &lorhs, std::vector<int> &hirhs,
651 std::vector<equation> &eqn, std::vector<int> &neqn,
653 int gcd(
int n1,
int n2);
654 void solve(
int level,
655 std::vector<int> &alo, std::vector<int> &ahi,
656 std::vector<bool> &aactive,
int numvar,
657 std::vector<int> &lorhs, std::vector<int> &hirhs,
658 std::vector<equation> &eqn, std::vector<int> &neqn,
659 int numeqn,
int verbose_level);
661 std::vector<int> &lo, std::vector<int> &hi,
662 std::vector<bool> &
active,
int numvar,
663 std::vector<int> &lorhs, std::vector<int> &hirhs,
664 std::vector<equation> &eqn, std::vector<int> &neqn,
665 int numeqn,
int &f_restriction_made,
667 void log_12l(
long int current_node,
int level);
compact storage of 0/1-data as bitvectors
a graph with a vertex coloring
options for drawing an object of type layered_graph
to describe an activity for a diophantine system from command line arguments
int f_project_to_single_equation_and_solve
int f_project_to_two_equations_and_solve
int read_arguments(int argc, std::string *argv, int verbose_level)
int max_number_of_coefficients
diophant_activity_description()
int f_test_single_equation
int f_perform_column_reductions
~diophant_activity_description()
to perform an activity for a diophantine system using diophant_activity_description
void perform_activity(diophant_activity_description *Descr, diophant *Dio, int verbose_level)
diophant_activity_description * Descr
void init_from_file(diophant_activity_description *Descr, int verbose_level)
to create a diophantine system from diophant_description
diophant_description * Descr
void init(diophant_description *Descr, int verbose_level)
to describe a diophantine system from command line arguments
int read_arguments(int argc, std::string *argv, int verbose_level)
int problem_of_Steiner_type_nb_t_orbits
std::string x_bounds_text
int f_override_polynomial
int f_coefficient_matrix_csv
int f_problem_of_Steiner_type
std::string override_polynomial
std::string problem_of_Steiner_type_covering_matrix_fname
std::string external_lines_as_subset_of_secants_text
std::string RHS_constant_text
std::string coefficient_matrix_text
std::string maximal_arc_secants_text
std::string coefficient_matrix_csv
diophantine systems of equations (i.e., linear systems over the integers)
void make_clique_graph_adjacency_matrix(data_structures::bitvector *&Adj, int verbose_level)
void get_solutions(long int *&Sol, int &nb_sol, int verbose_level)
int solve_all_DLX(int verbose_level)
void trivial_row_reductions(int &f_no_solution, int verbose_level)
void make_clique_graph(graph_theory::colored_graph *&CG, int verbose_level)
int count_non_zero_coefficients_in_row(int i)
void print2(int f_with_gcd)
void init_problem_of_Steiner_type_with_RHS(int nb_rows, int nb_cols, int *Inc, int nb_to_select, int *Rhs, int verbose_level)
void init_eqn_label(int i, char *label)
int solve_all_DLX_with_RHS_and_callback(int f_write_tree, const char *fname_tree, void(*user_callback_solution_found)(int *sol, int len, int nb_sol, void *data), int verbose_level)
int maximum_number_of_non_zero_coefficients_in_row()
void read_xml(std::ifstream &f, char *label, int verbose_level)
int solve_next_mckay(int verbose_level)
void init_RHS(int RHS_value, int verbose_level)
void coefficient_values_in_row(int i, int &nb_values, int *&values, int *&multiplicities, int verbose_level)
void project_to_two_equations(diophant *D, int eqn1_idx, int eqn2_idx, int verbose_level)
int solve_first_mckay(int f_once, int verbose_level)
int solve_next_betten(int verbose_level)
int test_solution(int *sol, int len, int verbose_level)
int is_zero_outside(int first, int len, int i)
void fill_coefficient_matrix_with(int a)
int solve_once_mckay(int verbose_level)
void project_to_single_equation(diophant *D, int eqn_idx, int verbose_level)
void print_eqn(int i, int f_with_gcd)
int solve_all_betten_with_conditions(int verbose_level, int f_max_sol, int max_sol, int f_max_time, int max_time_in_seconds)
int f_broken_off_because_of_maxtime
void delete_equation(int I)
void set_x_max_constant(int a)
diophant_equation_type * type
int j_fst(int j, int verbose_level)
void multiply_A_x_to_RHS1()
void draw_partitioned(std::string &fname_base, graphics::layered_graph_draw_options *Draw_options, int f_solution, int *solution, int solution_sz, int verbose_level)
void read_solutions_from_file(std::string &fname_sol, int verbose_level)
int solve_all_mckay(long int &nb_backtrack_nodes, int maxresults, int verbose_level)
int solve_first_mckay_once_option(int f_once, int verbose_level)
void init_clique_finding_problem(int *Adj, int nb_pts, int nb_to_select, int verbose_level)
void solve_mckay(const char *label, int maxresults, long int &nb_backtrack_nodes, int &nb_sol, int verbose_level)
int solve_all_DLX_with_RHS(int f_write_tree, const char *fname_tree, int verbose_level)
void init_problem_of_Steiner_type(int nb_rows, int nb_cols, int *Inc, int nb_to_select, int verbose_level)
void write_solutions(std::string &fname, int verbose_level)
void project(diophant *D, int first, int len, int *&eqn_number, int &nb_eqns_replaced, int *&eqns_replaced, int verbose_level)
void get_solutions_full_length(int *&Sol, int &nb_sol, int verbose_level)
void make_clique_graph_and_save(std::string &clique_graph_fname, int verbose_level)
void draw_as_bitmap(std::string &fname, int f_box_width, int box_width, int bit_depth, int verbose_level)
void latex_it(std::ostream &ost)
void write_xml(std::ostream &ost, const char *label)
void init_partition_problem_with_bounds(int *weights, int *bounds, int nb_weights, int target_value, int verbose_level)
void split_by_two_equations(int eqn1_idx, int eqn2_idx, int f_solve_case, int solve_case_idx_r, int solve_case_idx_m, int verbose_level)
void project_to_single_equation_and_solve(int max_number_of_coefficients, int verbose_level)
int j_nxt(int j, int verbose_level)
void solve_mckay_override_minrhs_in_inequalities(const char *label, int maxresults, long int &nb_backtrack_nodes, int minrhs, int &nb_sol, int verbose_level)
void eliminate_zero_rows_quick(int verbose_level)
void test_if_the_last_solution_is_unique()
void analyze(int verbose_level)
int solve_all_betten(int verbose_level)
void get_coefficient_matrix(int *&M, int &nb_rows, int &nb_cols, int verbose_level)
void eliminate_zero_rows(int *&eqn_number, int verbose_level)
void print_eqn_compressed(int i)
void join_problems(diophant *D1, diophant *D2, int verbose_level)
void draw_it(std::string &fname_base, graphics::layered_graph_draw_options *Draw_options, int verbose_level)
int solve_first_betten(int verbose_level)
void test_solution_full_length(int *sol, int verbose_level)
std::deque< std::vector< int > > _results
void init_partition_problem(int *weights, int nb_weights, int target_value, int verbose_level)
void read_general_format(std::string &fname, int verbose_level)
void get_columns(int *col, int nb_col, data_structures::set_of_sets *&S, int verbose_level)
void write_gurobi_binary_variables(const char *fname)
int solve_first(int verbose_level)
void print_eqn_dense(int i)
void test_solution_file(std::string &solution_file, int verbose_level)
void set_x_min_constant(int a)
void split_by_equation(int eqn_idx, int f_solve_case, int solve_case_idx, int verbose_level)
diophant * trivial_column_reductions(int verbose_level)
void init_var_labels(long int *labels, int verbose_level)
void save_in_general_format(std::string &fname, int verbose_level)
description of a problem instance for dancing links solver
dlx_problem_description()
~dlx_problem_description()
int read_arguments(int argc, std::string *argv, int verbose_level)
An implementation of Donald Knuth's dancing links algorithm to solve exact cover problems.
void TransposeAndSolveRHS(int *Data, int nb_rows, int nb_cols, int *RHS, int f_has_type, diophant_equation_type *type, int verbose_level)
void SearchRHS(int k, int verbose_level)
int * nb_changed_type_columns
void UnCover(dlx_node *ColNode)
void init(dlx_problem_description *Descr, int verbose_level)
void open_solution_file(int verbose_level)
void TransposeAppendAndSolve(int *Data, int nb_rows, int nb_cols, int verbose_level)
std::string solutions_fname
void count_nb_choices(int k, dlx_node *Column)
dlx_node * ChooseColumnFancyRHS()
void AppendRowAndSolveRHS(int *Data, int nb_rows, int nb_cols, int *RHS, int f_has_type, diophant_equation_type *type, int verbose_level)
void * callback_solution_found_data
dlx_node * get_column_header(int c)
int * changed_type_columns
void install_callback_solution_found(void(*callback_solution_found)(int *solution, int len, int nb_sol, void *data), void *callback_solution_found_data)
void de_install_callback_solution_found()
void Create_RHS(int nb_cols, int *RHS, int f_has_type, diophant_equation_type *type, int verbose_level)
void AppendRowAndSolve(int *Data, int nb_rows, int nb_cols, int verbose_level)
dlx_node * ChooseColumn()
void Solve_with_RHS(int *RHS, int f_has_type, diophant_equation_type *type, int verbose_level)
void(* callback_solution_found)(int *solution, int len, int nb_sol, void *data)
void print_if_necessary(int k)
dlx_node * ChooseColumnFancy()
diophant_equation_type * type
int IsColumnNotDone(int c)
dlx_problem_description * Descr
dlx_node * ChooseColumnRHS()
int nb_changed_type_columns_total
void close_solution_file()
void open_tree_file(int verbose_level)
void Cover(dlx_node *ColNode)
void CreateMatrix(int *Data, int nb_rows, int nb_cols, int verbose_level)
void process_solution(int k)
int f_has_callback_solution_found
void Solve(int verbose_level)
solves diophantine systems according to McKay
void possolve(std::vector< int > &lo, std::vector< int > &hi, std::vector< equation > &eqn, std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< int > &neqn, int numeqn, int numvar, int verbose_level)
void Init(diophant *lgs, const char *label, int aEqnAnz, int aVarAnz)
void varprune(std::vector< int > &lo, std::vector< int > &hi, std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< equation > &eqn, std::vector< int > &neqn, int numeqn, int verbose_level)
void pruneqn(std::vector< int > &lo, std::vector< int > &hi, int numvar, std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< equation > &eqn, std::vector< int > &neqn, int numeqn, int verbose_level)
void puteqns(std::vector< int > &lo, std::vector< int > &hi, int numvar, std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< equation > &eqn, std::vector< int > &neqn, int numeqn)
int restrict_variables(int level, std::vector< int > &lo, std::vector< int > &hi, std::vector< bool > &active, int numvar, std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< equation > &eqn, std::vector< int > &neqn, int numeqn, int &f_restriction_made, int verbose_level)
int divideeqns(std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< equation > &eqn, std::vector< int > &neqn, int numeqn)
bool subtract(int eqn1, equation &e1, int l1, int lors1, int hirs1, int eqn2, equation &e2, int *pl2, int *plors2, int *phirs2, int verbose_level)
std::vector< int > branch
long int nb_calls_to_solve
std::vector< bool > active
void log_12l(long int current_node, int level)
void solve(int level, std::vector< int > &alo, std::vector< int > &ahi, std::vector< bool > &aactive, int numvar, std::vector< int > &lorhs, std::vector< int > &hirhs, std::vector< equation > &eqn, std::vector< int > &neqn, int numeqn, int verbose_level)
std::vector< bool > unitcoeffs
const char * problem_label
std::vector< term > equation
the orbiter library for the classification of combinatorial objects
internal class for the dancing links exact cover algorithm
a term in a diophantine system of type tMCKAY