#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/Optimize/BruteforceOptimizer.hpp>
|
| | 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) |
◆ AlgBurteForce()
| Slic3r::opt::detail::AlgBurteForce::AlgBurteForce |
( |
const StopCriteria & | cr, |
|
|
size_t | gs ) |
|
inline |
size_t gridsz
Definition BruteforceOptimizer.hpp:31
StopCriteria stc
Definition BruteforceOptimizer.hpp:30
References gridsz, and stc.
◆ 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
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.
◆ 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) {
51
52 auto max_iter =
stc.max_iterations();
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)) {
64 double absdiff = std::abs(score - result.score);
65
66 result.score = score;
67 result.optimum = inp;
68
69
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;
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().
◆ gridsz
| size_t Slic3r::opt::detail::AlgBurteForce::gridsz |
◆ stc
◆ to_min
| bool Slic3r::opt::detail::AlgBurteForce::to_min |
The documentation for this struct was generated from the following file: