資源簡(jiǎn)介
實(shí)現(xiàn)的是基本差分進(jìn)化算法,輸入種群大小,進(jìn)化代數(shù),交叉因子,縮放因子,就可輸出結(jié)果
代碼片段和文件信息
/*DE_test
?*對(duì)相應(yīng)的Matlab程序進(jìn)行測(cè)試
?*/
#include?
#include?
#include?
using?namespace?std;
//產(chǎn)生隨機(jī)數(shù),隨機(jī)數(shù)為(0.0,1.0)
double?Rand_Double(void)
{
return?static_cast(rand())?/?static_cast(RAND_MAX);
}
//測(cè)試函數(shù)Hansen
//參數(shù)個(gè)數(shù)為2??維數(shù)為2
double?Hansen(double?*p_pars)
{
return?(?cos(1.0)?+?2.0*cos(p_pars[0]+2.0)?+?3.0*cos(2.0*p_pars[0]+3.0)?
+?4.0*cos(3.0*p_pars[0]+4.0)?+?5.0*cos(4.0*p_pars[0]+5.0)?)
*?(?cos(2.0*p_pars[1]+1.0)?+?2.0*cos(3.0*p_pars[1]+2.0)?+?
3.0*cos(4.0*p_pars[1]+3.0)?+?4.0*cos(5.0*p_pars[1]+4.0)?+?5.0*cos(6.0*p_pars[1]+5.0)?);
}
class?CFunction
{
public:
void?*m_p_fun;//指向測(cè)試函數(shù)的指針
int?m_pars_num;//參數(shù)個(gè)數(shù)?空間維數(shù)
double?m_min;//下限
double?m_max;//上限
bool?m_pos;//求解最小值還是最大值,如果是最小值則m_pos為false,如果是最大值則m_pos為true
public:
CFunction(void?*p_funint?pars_numdouble?mindouble?maxbool?pos)
:m_p_fun(p_fun)m_pars_num(pars_num)m_min(min)m_max(max)m_pos(pos)
{
}
virtual?double?Compute(double?*p_pars)?=?0;
評(píng)論
共有 條評(píng)論