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