From 0a439570a03bfa8654aca673ea22910c25892ece Mon Sep 17 00:00:00 2001 From: catree Date: Fri, 15 Dec 2017 14:09:59 +0100 Subject: [PATCH] Move SimulatedAnnealingSolver::Impl in cpp file. Fix some typos. --- modules/ml/include/opencv2/ml.hpp | 29 ++++++----------------------- modules/ml/src/ann_mlp.cpp | 36 +++++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/modules/ml/include/opencv2/ml.hpp b/modules/ml/include/opencv2/ml.hpp index 35a5a62..1ea79f2 100644 --- a/modules/ml/include/opencv2/ml.hpp +++ b/modules/ml/include/opencv2/ml.hpp @@ -1920,7 +1920,7 @@ public: class CV_EXPORTS SimulatedAnnealingSolver : public Algorithm { public: - SimulatedAnnealingSolver() { init(); }; + SimulatedAnnealingSolver() { init(); } ~SimulatedAnnealingSolver(); /** Give energy value for a state of system.*/ virtual double energy() =0; @@ -1947,31 +1947,14 @@ public: * @param ite number of iteration per temperature step ite \> 0 */ void setIterPerStep(int ite); - struct Impl; -protected : + +protected: void init(); + +private: + struct Impl; Impl* impl; }; -struct SimulatedAnnealingSolver::Impl -{ - RNG rEnergy; - double coolingRatio; - double initialT; - double finalT; - int iterPerStep; - Impl() - { - initialT = 2; - finalT = 0.1; - coolingRatio = 0.95; - iterPerStep = 100; - refcount = 1; - } - int refcount; - ~Impl() { refcount--;CV_Assert(refcount==0); } -}; - - //! @} ml } diff --git a/modules/ml/src/ann_mlp.cpp b/modules/ml/src/ann_mlp.cpp index fddc0ae..2ab0537 100644 --- a/modules/ml/src/ann_mlp.cpp +++ b/modules/ml/src/ann_mlp.cpp @@ -42,6 +42,24 @@ namespace cv { namespace ml { +struct SimulatedAnnealingSolver::Impl +{ + RNG rEnergy; + double coolingRatio; + double initialT; + double finalT; + int iterPerStep; + Impl() + { + initialT = 2; + finalT = 0.1; + coolingRatio = 0.95; + iterPerStep = 100; + refcount = 1; + } + int refcount; + ~Impl() { refcount--;CV_Assert(refcount==0); } +}; struct AnnParams { @@ -135,24 +153,24 @@ void SimulatedAnnealingSolver::setInitialTemperature(double x) { CV_Assert(x>0); impl->initialT = x; -}; +} void SimulatedAnnealingSolver::setFinalTemperature(double x) { CV_Assert(x>0); impl->finalT = x; -}; +} double SimulatedAnnealingSolver::getFinalTemperature() { return impl->finalT; -}; +} void SimulatedAnnealingSolver::setCoolingRatio(double x) { CV_Assert(x>0 && x<1); impl->coolingRatio = x; -}; +} class SimulatedAnnealingANN_MLP : public ml::SimulatedAnnealingSolver { @@ -169,19 +187,23 @@ public: SimulatedAnnealingANN_MLP(ml::ANN_MLP *x, Ptr d) : nn(x), data(d) { initVarMap(); - }; + } + void changedState() { index = rIndex.uniform(0, nbVariables); double dv = rVar.uniform(-1.0, 1.0); varTmp = *adrVariables[index]; *adrVariables[index] = dv; - }; + } + void reverseChangedState() { *adrVariables[index] = varTmp; - }; + } + double energy() { return nn->calcError(data, false, noArray()); } + protected: void initVarMap() { -- 2.7.4