github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/ml/ml.inl.hpp (about) 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