资源简介
CMA-ES算法的C++包,里面有简单的使用说明注释,以及一个简单的函数拟合举例
代码片段和文件信息
/**
* @file example1.cpp
* Very short example source code. The purpose of the example codes is to be
* edited/extended.
*/
#include
#include
#include “cmaes.h“
/**
* 例子:拟合y=2*x+1
*/
double x_t[15] = {123456789};
double y_t[15] = {35791113151719};
/**
* fitfun拟合函数(损失函数)
*/
double fitfun(double const *x int N)
{
double sum = 0;
for(int i=0; i<9; i++)
{
sum+=((x[0]*x_t[i]+x[1]) - y_t[i])*((x[0]*x_t[i]+x[1]) - y_t[i]);
}
return sum;
}
int main(int char**)
{
CMAES evo;
double *arFunvals *const*pop *xfinal*xx;
/**
* 这里设置参数个数,目前为2
*/
const int dim = 2; //
double xstart[dim];
for(int i=0; i double stddev[dim];
for(int i=0; i Parameters parameters;
parameters.init(dim xstart stddev);
arFunvals = evo.init(parameters);
std::cout << evo.sayHello() << std::endl;
while(!evo.testForTermination())
{
pop = evo.samplePopulation();
for (int i = 0; i < evo.get(CMAES::Lambda); ++i)
arFunvals[i] = fitfun(pop[i] (int) evo.get(CMAES::Dimension));
evo.updateDistribution(arFunvals);
xx = evo.getNew(CMAES::XMean);
/**
* xx为中间的参数值,可在此判断准确率
*/
}
std::cout << “Stop:“ << std::endl << evo.getStopMessage();
evo.writeToFile(CMAES::WKResume “resumeevo1.dat“);
/**
* xfinal为拟合的参数最终结果
*/
xfinal = evo.getNew(CMAES::XMean);
for(int i=0; i std::cout<
delete[] xfinal;
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-05-07 10:09 CMAES\
文件 51429 2013-08-02 05:00 CMAES\cmaes.h
文件 1831 2018-05-07 10:08 CMAES\example.cpp
文件 10456 2013-08-02 05:00 CMAES\parameters.h
文件 1795 2013-08-02 05:00 CMAES\random.h
文件 2338 2013-08-02 05:00 CMAES\timings.h
文件 993 2013-08-02 05:00 CMAES\utils.h
- 上一篇:BOW+SIFT特征提取OpenCV实现
- 下一篇:最小生成树MFC
评论
共有 条评论