Orbiter 2022
Combinatorial Objects
large_set_was_activity.cpp
Go to the documentation of this file.
1/*
2 * large_set_was_activity.cpp
3 *
4 * Created on: May 27, 2021
5 * Author: betten
6 */
7
8
9
10#include "orbiter.h"
11
12using namespace std;
13
14namespace orbiter {
15namespace layer5_applications {
16namespace apps_combinatorics {
17
18
19
21{
22 Descr = NULL;
23 LSW = NULL;
24}
25
26
28{
29}
30
31
33 large_set_was *LSW, int verbose_level)
34{
35 int f_v = (verbose_level >= 1);
36
37 if (f_v) {
38 cout << "large_set_was_activity::perform_activity" << endl;
39 }
40
43
44
46
51 verbose_level);
52 }
53
55
59 verbose_level);
60 }
61
63
67 verbose_level);
68
69 }
70
72
73 long int *starter_set = NULL;
74 int starter_set_sz = 0;
75
78 starter_set,
79 starter_set_sz,
81 verbose_level);
82 }
83
84
85 if (f_v) {
86 cout << "large_set_was_activity::perform_activity done" << endl;
87 }
88
89}
90
91
92#if 0
93if (f_compute_normalizer_orbits) {
94 if (f_v) {
95 cout << "large_set_classify::process_starter_case computing orbits "
96 "of normalizer on orbits of index " << selected_type_idx << endl;
97 }
98
99 action *A_on_orbits;
100 action *A_on_orbits_restricted;
101 schreier *Sch;
102
103 A_on_orbits = NEW_OBJECT(action);
104 A_on_orbits->induced_action_on_orbits(A_reduced,
105 OoS->Sch /* H_orbits_on_spreads*/,
106 TRUE /*f_play_it_safe*/, verbose_level - 1);
107
108 A_on_orbits_restricted = A_on_orbits->restricted_action(
109 OoS->Orbits_classified->Sets[selected_type_idx],
110 OoS->Orbits_classified->Set_size[selected_type_idx],
111 verbose_level);
112
113 if (f_v) {
114 cout << "large_set_classify::process_starter_case before "
115 "compute_orbits_on_points for the restricted action "
116 "on the good orbits" << endl;
117 }
118 A_on_orbits_restricted->compute_orbits_on_points(
119 Sch, N_gens->gens, verbose_level - 1);
120
121 if (f_v) {
122 cout << "large_set_classify::process_starter_case "
123 "the number of orbits of the normalizer on the "
124 "good orbits is " << Sch->nb_orbits << endl;
125 Sch->print_and_list_orbits_tex(cout);
126 cout << "printing orbits through Design_table_reduced_idx:" << endl;
127 Sch->print_and_list_orbits_using_labels(
128 cout, Design_table_reduced_idx);
129 }
130
131 {
132 long int *Orbits_under_N;
133 file_io Fio;
134 string fname_out;
135 int i, a, l;
136
137
138 Orbits_under_N = NEW_lint(Sch->nb_orbits * 2);
139
140 fname_out.assign(prefix);
141 fname_out.append("_graph_");
142 fname_out.append(group_label);
143 fname_out.append("_N_orbit_reps.csv");
144
145 for (i = 0; i < Sch->nb_orbits; i++) {
146 l = Sch->orbit_len[i];
147 a = Sch->orbit[Sch->orbit_first[i]];
148 Orbits_under_N[2 * i + 0] = a;
149 Orbits_under_N[2 * i + 1] = l;
150 }
151 Fio.lint_matrix_write_csv(fname_out, Orbits_under_N, Sch->nb_orbits, 2);
152
153 FREE_lint(Orbits_under_N);
154 }
155
156 FREE_OBJECT(Sch);
157 FREE_OBJECT(A_on_orbits_restricted);
158 FREE_OBJECT(A_on_orbits);
159 if (f_v) {
160 cout << "large_set_classify::process_starter_case "
161 "computing orbits of normalizer done" << endl;
162 }
163}
164
165
166if (f_read_solution_file) {
167 if (f_v) {
168 cout << "large_set_classify::process_starter_case "
169 "trying to read solution file " << solution_file_name << endl;
170 }
171 int i, j, a, b, l, h;
172
173 file_io Fio;
174 int nb_solutions;
175 int *Solutions;
176 int solution_size;
177
178 Fio.read_solutions_from_file_and_get_solution_size(solution_file_name,
179 nb_solutions, Solutions, solution_size,
180 verbose_level);
181 cout << "Read the following solutions from file:" << endl;
182 Orbiter->Int_vec.matrix_print(Solutions, nb_solutions, solution_size);
183 cout << "Number of solutions = " << nb_solutions << endl;
184 cout << "solution_size = " << solution_size << endl;
185
186 int sz = starter_set_sz + solution_size * orbit_length;
187
188 if (sz != size_of_large_set) {
189 cout << "large_set_classify::process_starter_case sz != size_of_large_set" << endl;
190 exit(1);
191 }
192
193
194 nb_large_sets = nb_solutions;
195 Large_sets = NEW_lint(nb_solutions * sz);
196 for (i = 0; i < nb_solutions; i++) {
197 Orbiter->Lint_vec.copy(starter_set, Large_sets + i * sz, starter_set_sz);
198 for (j = 0; j < solution_size; j++) {
199#if 0
200 a = Solutions[i * solution_size + j];
201 b = OoS->Orbits_classified->Sets[selected_type_idx][a];
202#else
203 b = Solutions[i * solution_size + j];
204 // the labels in the graph are set according to
205 // OoS->Orbits_classified->Sets[selected_type_idx][]
206 //b = OoS->Orbits_classified->Sets[selected_type_idx][a];
207#endif
208 OoS->Sch->get_orbit(b,
209 Large_sets + i * sz + starter_set_sz + j * orbit_length,
210 l, 0 /* verbose_level*/);
211 if (l != orbit_length) {
212 cout << "large_set_classify::process_starter_case l != orbit_length" << endl;
213 exit(1);
214 }
215 }
216 for (j = 0; j < solution_size * orbit_length; j++) {
217 a = Large_sets[i * sz + starter_set_sz + j];
218 b = Design_table_reduced_idx[a];
219 Large_sets[i * sz + starter_set_sz + j] = b;
220 }
221 }
222 {
223 file_io Fio;
224 string fname_out;
225 string_tools ST;
226
227 fname_out.assign(solution_file_name);
228 ST.replace_extension_with(fname_out, "_packings.csv");
229
230 ST.replace_extension_with(fname_out, "_packings.csv");
231
232 Fio.lint_matrix_write_csv(fname_out, Large_sets, nb_solutions, sz);
233 }
234 long int *Packings_explicit;
235 int Sz = sz * design_size;
236
237 Packings_explicit = NEW_lint(nb_solutions * Sz);
238 for (i = 0; i < nb_solutions; i++) {
239 for (j = 0; j < sz; j++) {
240 a = Large_sets[i * sz + j];
241 for (h = 0; h < design_size; h++) {
242 b = Design_table[a * design_size + h];
243 Packings_explicit[i * Sz + j * design_size + h] = b;
244 }
245 }
246 }
247 {
248 file_io Fio;
249 string fname_out;
250 string_tools ST;
251
252 fname_out.assign(solution_file_name);
253 ST.replace_extension_with(fname_out, "_packings_explicit.csv");
254
255 Fio.lint_matrix_write_csv(fname_out, Packings_explicit, nb_solutions, Sz);
256 }
257 FREE_lint(Large_sets);
258 FREE_lint(Packings_explicit);
259
260}
261else {
262 if (f_v) {
263 cout << "large_set_classify::process_starter_case "
264 "before OoS->create_graph_on_orbits_of_a_certain_length" << endl;
265 }
266
267
268 OoS->create_graph_on_orbits_of_a_certain_length(
269 CG,
270 fname,
271 orbit_length,
272 selected_type_idx,
273 f_has_user_data, NULL /* int *user_data */, 0 /* user_data_size */,
274 TRUE /* f_has_colors */, nb_remaining_colors, reduced_design_color_table,
275 large_set_design_test_pair_of_orbits,
276 this /* *test_function_data */,
277 verbose_level);
278
279 if (f_v) {
280 cout << "large_set_classify::process_starter_case "
281 "after OoS->create_graph_on_orbits_of_a_certain_length" << endl;
282 }
283 if (f_v) {
284 cout << "large_set_classify::process_starter_case "
285 "before CG->save" << endl;
286 }
287
288 CG->save(fname, verbose_level);
289
290 FREE_OBJECT(CG);
291}
292#endif
293
294}}}
295
296
void copy(long int *from, long int *to, long int len)
Definition: lint_vec.cpp:80
description of an activity for a large set search with assumed symmetry
poset_classification::poset_classification_control * normalizer_on_orbits_of_a_given_length_control
void perform_activity(large_set_was_activity_description *Descr, large_set_was *LSW, int verbose_level)
classification of large sets of designs with assumed symmetry
void create_graph_on_orbits_of_length(std::string &fname, int orbit_length, int verbose_level)
void read_solution_file(std::string &solution_file_name, long int *starter_set, int starter_set_sz, int orbit_length, int verbose_level)
void create_graph_on_orbits_of_length_based_on_N_orbits(std::string &fname_mask, int orbit_length2, int verbose_level)
void do_normalizer_on_orbits_of_a_given_length(int orbit_length, int nb_of_orbits_to_choose, poset_classification::poset_classification_control *Control, int verbose_level)
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define TRUE
Definition: foundations.h:231
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects