26#ifndef BERTINI_TRACKING_CONFIG_HPP
27#define BERTINI_TRACKING_CONFIG_HPP
39#include "bertini2/common/config.hpp"
48 enum class PrecisionType
77 using T = mpq_rational;
79 T initial_step_size = T(1)/T(10);
80 T max_step_size = T(1)/T(10);
81 T min_step_size = T(1)/T(1e100);
83 T step_size_success_factor = T(2);
84 T step_size_fail_factor = T(1)/T(2);
86 unsigned consecutive_successful_steps_before_stepsize_increase = 5;
88 unsigned min_num_steps = 1;
89 unsigned max_num_steps = 1e5;
91 unsigned frequency_of_CN_estimation = 1;
98 unsigned max_num_newton_iterations = 2;
99 unsigned min_num_newton_iterations = 1;
109 struct FixedPrecisionConfig
111 using RealType = double;
117 FixedPrecisionConfig(System
const& sys)
120 FixedPrecisionConfig() =
default;
125 std::ostream& operator<<(std::ostream & out, FixedPrecisionConfig
const& fpc)
153 struct AdaptiveMultiplePrecisionConfig
173 unsigned consecutive_successful_steps_before_precision_decrease = 10;
207 void SetAMPConfigFrom(
System const& sys)
217 AdaptiveMultiplePrecisionConfig(System
const& sys) : AdaptiveMultiplePrecisionConfig()
219 SetAMPConfigFrom(sys);
226 out <<
"coefficient_bound: " << AMP.coefficient_bound <<
"\n";
227 out <<
"degree_bound: " << AMP.degree_bound <<
"\n";
228 out <<
"epsilon: " << AMP.epsilon <<
"\n";
229 out <<
"Phi: " << AMP.Phi <<
"\n";
230 out <<
"Psi: " << AMP.Psi <<
"\n";
231 out <<
"safety_digits_1: " << AMP.safety_digits_1 <<
"\n";
232 out <<
"safety_digits_2: " << AMP.safety_digits_2 <<
"\n";
233 out <<
"consecutive_successful_steps_before_precision_decrease" << AMP.consecutive_successful_steps_before_precision_decrease <<
"\n";
252 AMP.SetAMPConfigFrom(sys);
260 class FixedPrecisionTracker;
261 class MultiplePrecisionTracker;
262 class DoublePrecisionTracker;
274 struct TrackerTraits<DoublePrecisionTracker>
276 using BaseComplexType = dbl;
277 using BaseRealType = double;
278 using EventEmitterType = FixedPrecisionTracker<DoublePrecisionTracker>;
279 using PrecisionConfig = FixedPrecisionConfig;
285 using NeededTypes = detail::TypeList<dbl>;
286 using NeededConfigs = detail::TypeList<
295 struct TrackerTraits<MultiplePrecisionTracker>
297 using BaseComplexType = mpfr_complex;
298 using BaseRealType = mpfr_float;
299 using EventEmitterType = FixedPrecisionTracker<MultiplePrecisionTracker>;
300 using PrecisionConfig = FixedPrecisionConfig;
307 using NeededTypes = detail::TypeList<mpfr_complex>;
309 using NeededConfigs = detail::TypeList<
321 using BaseComplexType = mpfr_complex;
322 using BaseRealType = mpfr_float;
323 using EventEmitterType = AMPTracker;
324 using PrecisionConfig = AdaptiveMultiplePrecisionConfig;
331 using NeededTypes = detail::TypeList<dbl, mpfr_complex>;
333 using NeededConfigs = detail::TypeList<
344 struct TrackerTraits<FixedPrecisionTracker<
D> > :
public TrackerTraits<D>
346 using BaseComplexType =
typename TrackerTraits<D>::BaseComplexType;
347 using BaseRealType =
typename TrackerTraits<D>::BaseRealType;
348 using EventEmitterType =
typename TrackerTraits<D>::EventEmitterType;
349 using PrecisionConfig =
typename TrackerTraits<D>::PrecisionConfig;
356 using NeededTypes =
typename TrackerTraits<D>::NeededTypes;
357 using NeededConfigs =
typename TrackerTraits<D>::NeededConfigs;
double D(double const &norm_J, double const &norm_J_inverse, AdaptiveMultiplePrecisionConfig const &_config)
Compute the expression from the AMP papers amp1, amp2.
Definition amp_criteria.hpp:88
The fundamental polynomial system class for Bertini2.
Definition system/system.hpp:99
size_t NumVariables() const
Functor-like class for tracking paths on a system.
Definition amp_tracker.hpp:346
Base tracker class for trackers offered in Bertini2.
Definition base_tracker.hpp:141
dbl pow(const dbl &z, int power)
Definition double_extensions.hpp:88
Bertini extensions of the Eigen linear algebra library.
Extensions to the Boost.Multiprecision library.
Definition trackers/config.hpp:154
NumErrorT coefficient_bound
User-defined bound on the sum of the abs vals of the coeffs for any polynomial in the system (for ada...
Definition trackers/config.hpp:155
unsigned int maximum_precision
User-chosed setting for the maximum allowable precision. Paths will die if their precision is request...
Definition trackers/config.hpp:171
void SetPhiPsiFromBounds()
Definition trackers/config.hpp:201
int safety_digits_2
User-chosen setting for the number of safety digits used during Criterion C.
Definition trackers/config.hpp:170
int safety_digits_1
User-chosen setting for the number of safety digits used during Criteria A & B.
Definition trackers/config.hpp:169
NumErrorT Phi
Bound on (an error bound). Used for AMP criteria A, B.
Definition trackers/config.hpp:161
NumErrorT Psi
Bound on (an error bound). Used for AMP criterion C.
Definition trackers/config.hpp:165
unsigned max_num_precision_decreases
The maximum number of times precision can be lowered during tracking of a segment of path.
Definition trackers/config.hpp:175
NumErrorT epsilon
Bound on growth in error from linear solves. This is in amp1, amp2, and is used for AMP criteria A a...
Definition trackers/config.hpp:158
void SetBoundsAndEpsilonFrom(System const &sys)
Set epsilon, degree bound, and coefficient bound from system.
Definition trackers/config.hpp:185
NumErrorT degree_bound
User-set bound on degrees of polynomials in the system - tricky to compute for factored polys,...
Definition trackers/config.hpp:156
Provides the bertini::System class.
Contains the detail/typelist helper type, for templated getting/setting/storage of config structs.