SemiDiscreteOT 1.0
Semi-Discrete Optimal Transport Library
Loading...
Searching...
No Matches
ParameterManager.h
Go to the documentation of this file.
1#ifndef PARAMETER_MANAGER_H
2#define PARAMETER_MANAGER_H
3
4#include <deal.II/base/parameter_acceptor.h>
5#include <deal.II/base/conditional_ostream.h>
6#include <deal.II/base/mpi.h>
7#include <string>
8
9// ANSI color codes for output formatting
10#ifndef RESET
11#define RESET "\033[0m"
12#define CYAN "\033[36m"
13#define BLUE "\033[34m"
14#define GREEN "\033[32m"
15#define MAGENTA "\033[35m"
16#define YELLOW "\033[33m"
17#define RED "\033[31m"
18#define BOLD "\033[1m"
19#endif
20
21using namespace dealii;
22
29class SotParameterManager : public ParameterAcceptor
30{
31public:
36 SotParameterManager(const MPI_Comm &comm);
37
43 unsigned int n_refinements = 0;
46 bool use_tetrahedral_mesh = false;
47 bool use_custom_density = false;
48 std::string density_file_path;
49 std::string density_file_format = "vtk";
50 std::string density_field_name = "normalized_density";
51 };
52
57 unsigned int max_iterations = 1000;
58 double tolerance = 1;
59 std::string solver_control_type = "l1norm";
60 double epsilon = 1e-3;
61 double tau = 1e-8;
62 std::string distance_threshold_type = "pointwise";
63 bool verbose_output = true;
64 std::string solver_type = "BFGS";
65 unsigned int quadrature_order = 3;
66 unsigned int nb_points = 1000;
67 unsigned int n_threads = 0;
68 bool use_epsilon_scaling = false;
70 unsigned int epsilon_scaling_steps = 5;
71 bool use_log_sum_exp_trick = false;
72 };
73
79 // Source mesh hierarchy parameters
80 bool source_enabled = false;
82 int source_max_vertices = 10000;
83 std::string source_hierarchy_dir = "output/data_multilevel/source_multilevel";
84
85 // Target point cloud hierarchy parameters
86 bool target_enabled = false;
88 int target_max_points = 1000;
89 std::string target_hierarchy_dir = "output/data_multilevel/target_multilevel";
91
92 // Python clustering parameters
93 bool use_python_clustering = false;
94 std::string python_script_name = "multilevel_clustering_scipy.py";
95
96 // Common parameters
97 std::string output_prefix = "output/multilevel/sot";
98 };
99
104 std::string implementation = "dealii";
105 };
106
111 double truncation_radius = -1.0;
112 };
113
118 std::vector<unsigned int> indices;
119 std::string potential_folder = "";
120 double truncation_radius = -1.0;
121 };
122
123 // Const access to parameters through getters
131
132 // Direct access to parameters through references
140 std::string& selected_task;
141 std::string& io_coding;
142
143 // MPI-related getters
144 const MPI_Comm& get_mpi_communicator() const { return mpi_communicator; }
145 const ConditionalOStream& get_pcout() const { return pcout; }
146
151 void print_logo() const;
152 virtual void print_parameters() const;
153protected:
154 // MPI members
156 const unsigned int n_mpi_processes;
157 const unsigned int this_mpi_process;
158 ConditionalOStream pcout;
159
160 // Helper methods for printing specific parameter groups
161 void print_mesh_parameters() const;
162 void print_solver_parameters() const;
163 void print_multilevel_parameters() const;
167 void print_task_information() const;
168 void print_section_header(const std::string& section_name) const;
169
170private:
171
172 // Storage for parameters
174 std::string io_coding_storage = "txt";
182};
183
191 {
192 public:
197 LloydParameterManager(const MPI_Comm &comm);
198
203 unsigned int max_iterations = 1000;
204 double relative_tolerance = 1e-8;
205 };
206
208
209 // Direct access to parameters through references
211
216 virtual void print_parameters() const override;
217 private:
218 // Helper methods for printing specific parameter groups
219 void print_lloyd_parameters() const;
220 void print_task_information() const;
221
222 // Storage for parameters
224 };
225
226#endif
void print_lloyd_parameters() const
LloydParameters lloyd_params_storage
virtual void print_parameters() const override
void print_task_information() const
const LloydParameters & get_lloyd_params() const
LloydParameters & lloyd_params
const TransportMapParameters & get_transport_map_params() const
ConditionalDensityParameters & conditional_density_params
MeshParameters & source_params
const unsigned int this_mpi_process
ConditionalOStream pcout
void print_section_header(const std::string &section_name) const
MeshParameters target_params_storage
const MultilevelParameters & get_multilevel_params() const
const unsigned int n_mpi_processes
SolverParameters & solver_params
MultilevelParameters & multilevel_params
void print_power_diagram_parameters() const
ConditionalDensityParameters conditional_density_params_storage
const MPI_Comm & get_mpi_communicator() const
void print_conditional_density_parameters() const
const PowerDiagramParameters & get_power_diagram_params() const
const MeshParameters & get_target_params() const
void print_mesh_parameters() const
SolverParameters solver_params_storage
MeshParameters source_params_storage
MeshParameters & target_params
virtual void print_parameters() const
void print_transport_map_parameters() const
std::string & selected_task
PowerDiagramParameters & power_diagram_params
std::string selected_task_storage
const ConditionalDensityParameters & get_conditional_density_params() const
const ConditionalOStream & get_pcout() const
const MeshParameters & get_source_params() const
TransportMapParameters transport_map_params_storage
MultilevelParameters multilevel_params_storage
void print_solver_parameters() const
std::string io_coding_storage
PowerDiagramParameters power_diagram_params_storage
void print_multilevel_parameters() const
void print_task_information() const
TransportMapParameters & transport_map_params
const SolverParameters & get_solver_params() const
unsigned int max_iterations
Number of max iterations.
double relative_tolerance
Convergence tolerance.
std::vector< unsigned int > indices
Indices for conditional density computation.
double truncation_radius
Truncation radius for conditional density computation (-1 = disabled)
std::string potential_folder
Folder to load potential from (empty = default)
bool use_custom_density
Whether to use custom density.
unsigned int n_refinements
Number of global refinement steps.
std::string density_field_name
Name of the field in the VTK file.
bool use_tetrahedral_mesh
Whether to use tetrahedral elements (3D only)
std::string grid_generator_arguments
Arguments for the grid generator.
std::string density_file_path
Path to the density file.
std::string grid_generator_function
Name of the grid generator function.
std::string density_file_format
Format of the density file (vtk/h5)
std::string source_hierarchy_dir
Source hierarchy directory.
bool target_enabled
Whether to use target multilevel approach.
bool source_enabled
Whether to use source multilevel approach.
bool use_softmax_potential_transfer
Use softmax for potential transfer between target levels.
int source_max_vertices
Maximum vertices for finest source level.
int target_min_points
Minimum points for coarsest target level.
std::string target_hierarchy_dir
Target hierarchy directory.
int target_max_points
Maximum points for finest target level.
bool use_python_clustering
Whether to use Python scripts for clustering.
std::string python_script_name
Name of the Python script to use.
int source_min_vertices
Minimum vertices for coarsest source level.
std::string output_prefix
Output directory prefix.
std::string implementation
Implementation choice (dealii/geogram)
unsigned int nb_points
Number of points for discretization.
std::string distance_threshold_type
Type of distance threshold bound (pointwise|integral|geometric)
double tolerance
Convergence tolerance.
unsigned int epsilon_scaling_steps
Number of scaling steps.
std::string solver_type
Type of optimization solver.
bool use_log_sum_exp_trick
Enable log-sum-exp trick for numerical stability with small entropy.
unsigned int quadrature_order
Order of quadrature formula.
unsigned int n_threads
Number of threads (0 = auto)
std::string solver_control_type
Type of solver control to use (l1norm/componentwise)
bool verbose_output
Enable detailed solver output.
unsigned int max_iterations
Maximum number of solver iterations.
bool use_epsilon_scaling
Enable epsilon scaling strategy.
double epsilon_scaling_factor
Factor for epsilon reduction.
double tau
Integral radius bound tolerance.
double epsilon
Entropy regularization parameter.
double truncation_radius
Truncation radius for map approximation (-1 = disabled)