OpenCV 4.5.3(日本語機械翻訳)
ml.inl.hpp
1 // This file is part of OpenCV project.
2 // It is subject to the license terms in the LICENSE file found in the top-level directory
3 // of this distribution and at http://opencv.org/license.html.
4
5 #ifndef OPENCV_ML_INL_HPP
6 #define OPENCV_ML_INL_HPP
7
8 namespace cv { namespace ml {
9
10 // declared in ml.hpp
11 template<class SimulatedAnnealingSolverSystem>
12 int simulatedAnnealingSolver(SimulatedAnnealingSolverSystem& solverSystem,
13 double initialTemperature, double finalTemperature, double coolingRatio,
14 size_t iterationsPerStep,
15 CV_OUT double* lastTemperature,
16 cv::RNG& rngEnergy
17)
18{
19 CV_Assert(finalTemperature > 0);
20 CV_Assert(initialTemperature > finalTemperature);
21 CV_Assert(iterationsPerStep > 0);
22 CV_Assert(coolingRatio < 1.0f);
23 double Ti = initialTemperature;
24 double previousEnergy = solverSystem.energy();
25 int exchange = 0;
26 while (Ti > finalTemperature)
27 {
28 for (size_t i = 0; i < iterationsPerStep; i++)
29 {
30 solverSystem.changeState();
31 double newEnergy = solverSystem.energy();
32 if (newEnergy < previousEnergy)
33 {
34 previousEnergy = newEnergy;
35 exchange++;
36 }
37 else
38 {
39 double r = rngEnergy.uniform(0.0, 1.0);
40 if (r < std::exp(-(newEnergy - previousEnergy) / Ti))
41 {
42 previousEnergy = newEnergy;
43 exchange++;
44 }
45 else
46 {
47 solverSystem.reverseState();
48 }
49 }
50 }
51 Ti *= coolingRatio;
52 }
53 if (lastTemperature)
54 *lastTemperature = Ti;
55 return exchange;
56}
57
58}} //namespace
59
60 #endif // OPENCV_ML_INL_HPP
Random Number Generator
Definition: core.hpp:2783
int uniform(int a, int b)
returns uniformly distributed integer random number from [a,b) range
CV_EXPORTS_W void exp(InputArray src, OutputArray dst)
Calculates the exponent of every array element.
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails
Definition: base.hpp:342
cv
"black box" representation of the file storage associated with a file on disk.
Definition: aruco.hpp:75