OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::opt::detail::AlgBurteForce Struct Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/Optimize/BruteforceOptimizer.hpp>

Collaboration diagram for Slic3r::opt::detail::AlgBurteForce:

Public Member Functions

 AlgBurteForce (const StopCriteria &cr, size_t gs)
template<int D, size_t N, class Fn, class Cmp>
bool run (std::array< size_t, N > &idx, Result< N > &result, const Bounds< N > &bounds, Fn &&fn, Cmp &&cmp)
template<class Fn, size_t N>
Result< N > optimize (Fn &&fn, const Input< N > &, const Bounds< N > &bounds)

Public Attributes

bool to_min
StopCriteria stc
size_t gridsz

Detailed Description

Constructor & Destructor Documentation

◆ AlgBurteForce()

Slic3r::opt::detail::AlgBurteForce::AlgBurteForce ( const StopCriteria & cr,
size_t gs )
inline
33: stc{cr}, gridsz{gs} {}
size_t gridsz
Definition BruteforceOptimizer.hpp:31
StopCriteria stc
Definition BruteforceOptimizer.hpp:30

References gridsz, and stc.

Member Function Documentation

◆ optimize()

template<class Fn, size_t N>
Result< N > Slic3r::opt::detail::AlgBurteForce::optimize ( Fn && fn,
const Input< N > & ,
const Bounds< N > & bounds )
inline
91 {
92 std::array<size_t, N> idx = {};
93 Result<N> result;
94
95 if (to_min) {
96 result.score = std::numeric_limits<double>::max();
97 run<int(N) - 1>(idx, result, bounds, std::forward<Fn>(fn),
98 std::less<double>{});
99 }
100 else {
101 result.score = std::numeric_limits<double>::lowest();
102 run<int(N) - 1>(idx, result, bounds, std::forward<Fn>(fn),
103 std::greater<double>{});
104 }
105
106 return result;
107 }
Bounds< N > bounds(const Bound(&b)[N])
Definition Optimizer.hpp:175
bool to_min
Definition BruteforceOptimizer.hpp:29
bool run(std::array< size_t, N > &idx, Result< N > &result, const Bounds< N > &bounds, Fn &&fn, Cmp &&cmp)
Definition BruteforceOptimizer.hpp:41

References Slic3r::opt::bounds(), run(), Slic3r::opt::Result< N >::score, and to_min.

Here is the call graph for this function:

◆ run()

template<int D, size_t N, class Fn, class Cmp>
bool Slic3r::opt::detail::AlgBurteForce::run ( std::array< size_t, N > & idx,
Result< N > & result,
const Bounds< N > & bounds,
Fn && fn,
Cmp && cmp )
inline
46 {
47 if (stc.stop_condition()) return false;
48
49 if constexpr (D < 0) { // Let's evaluate fn
50 Input<N> inp;
51
52 auto max_iter = stc.max_iterations();
53 if (max_iter && num_iter(idx, gridsz) >= max_iter)
54 return false;
55
56 for (size_t d = 0; d < N; ++d) {
57 const Bound &b = bounds[d];
58 double step = (b.max() - b.min()) / (gridsz - 1);
59 inp[d] = b.min() + idx[d] * step;
60 }
61
62 auto score = fn(inp);
63 if (cmp(score, result.score)) { // Change current score to the new
64 double absdiff = std::abs(score - result.score);
65
66 result.score = score;
67 result.optimum = inp;
68
69 // Check if the required precision is reached.
70 if (absdiff < stc.abs_score_diff() ||
71 absdiff < stc.rel_score_diff() * std::abs(score))
72 return false;
73 }
74
75 } else {
76 for (size_t i = 0; i < gridsz; ++i) {
77 idx[D] = i; // Mark the current grid position and dig down
78 if (!run<D - 1>(idx, result, bounds, std::forward<Fn>(fn),
79 std::forward<Cmp>(cmp)))
80 return false;
81 }
82 }
83
84 return true;
85 }
@ N
Definition CalibrationWizardSavePage.cpp:124
long num_iter(const std::array< size_t, N > &idx, size_t gridsz)
Definition BruteforceOptimizer.hpp:18
std::array< double, N > Input
Definition Optimizer.hpp:38
void step(Coord &crd, const Dir d, const long n=1)
Definition MarchingSquares.hpp:213

References Slic3r::opt::bounds(), gridsz, Slic3r::opt::Bound::max(), Slic3r::opt::Bound::min(), Slic3r::opt::detail::num_iter(), Slic3r::opt::Result< N >::optimum, run(), Slic3r::opt::Result< N >::score, and stc.

Referenced by optimize(), and run().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ gridsz

size_t Slic3r::opt::detail::AlgBurteForce::gridsz

Referenced by AlgBurteForce(), and run().

◆ stc

StopCriteria Slic3r::opt::detail::AlgBurteForce::stc

Referenced by AlgBurteForce(), and run().

◆ to_min

bool Slic3r::opt::detail::AlgBurteForce::to_min

Referenced by optimize().


The documentation for this struct was generated from the following file: