?? optimizermethod.cpp
字號(hào):
//#include "StdAfx.h"
#include "OptimizerMethod.h"
using namespace std;
COptimizerMethod::COptimizerMethod(void)
{
m_fAmplitudeGain=1.2;
m_fDecreaseGain=0.5;
m_fStepAmplitudeMax=0.9;
m_fStepAmplitudeMin=1e-6;
}
COptimizerMethod::COptimizerMethod(float AmplitudeGain,float DecreaseGain,float StepAmplitudeMax)
{
m_fAmplitudeGain=AmplitudeGain;
m_fDecreaseGain=DecreaseGain;
m_fStepAmplitudeMax=StepAmplitudeMax;
m_fStepAmplitudeMin=1e-6;
}
COptimizerMethod::~COptimizerMethod(void)
{
}
float COptimizerMethod::RPPOP_DeltaStepSeek(double& CurrentErrorDif,double& PreErrorDif,double& PreDeltaStep)
{
float AdjustStep;//最后結(jié)果,即本此調(diào)整步長(zhǎng)
float DeltaStep;//步長(zhǎng)調(diào)整值的變化量
if (CurrentErrorDif*PreErrorDif>0)//%誤差單調(diào)(上升或下降)
{
DeltaStep=min(float(m_fAmplitudeGain*PreDeltaStep),m_fStepAmplitudeMax);
PreDeltaStep=DeltaStep;//;%步長(zhǎng)調(diào)整的幅值,當(dāng)前計(jì)算的結(jié)果傳出去下次用
AdjustStep=-DeltaStep*sign(CurrentErrorDif);
PreErrorDif=CurrentErrorDif;//%為下一次準(zhǔn)備
}
else if (CurrentErrorDif*PreErrorDif<0)//%誤差經(jīng)過(guò)極值
{
AdjustStep=-PreDeltaStep;
PreDeltaStep=max(float(m_fDecreaseGain*PreDeltaStep),m_fStepAmplitudeMin);//%當(dāng)前計(jì)算的結(jié)果傳出去下次用
PreErrorDif=0;//關(guān)鍵在此處,必須把0傳出去
}
else if (CurrentErrorDif*PreErrorDif==0)//%誤差曾經(jīng)過(guò)極值
{
AdjustStep=-sign(CurrentErrorDif)*PreDeltaStep;
PreErrorDif=CurrentErrorDif;//%為下一次準(zhǔn)備
}
return AdjustStep;
}
inline float COptimizerMethod::sign(double &number)
{
float Sign=number>=0?1.0:-1.0;
return Sign;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -