我已经从
http://matt.eifelle.com/2012/07/17/just-a-small-example-of-numerical-optimization-in-c/
并尝试在不知道以下源的 auto 的 g++ 4.4.6 中编译:
auto optimizer = Optimization::Local::build_simplex(
fun,
Optimization::Local::make_and_criteria(Optimization::Local::IterationCriterion(max_iterations),
Optimization::Local::RelativeValueCriterion<float>(ftol)));
阅读网页,我知道这是因为 C++11 支持 auto,所以我尝试搜索我下载的源代码,有一个 simplex.h,它具有以下源代码:
template<class Function, class Criterion>
static Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> build_simplex(const Function& fun, const Criterion& criterion)
{
return Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion>(criterion);
}
然后我改变
auto optimizer
至
Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> optimizer
或者
Optimization::Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> optimizer
没有人会通过编译器!
我不太了解 c++ 的模板用法,除了获得 c++11 编译,我应该为这个 auto 做什么返回的数据类型修改?
更新 :
感谢您的帮助,我修改int optimizer
并编译,我得到
test_rosenbrock_simplex.cpp:44: error: cannot convert Optimization::Local::Simplex<float, Eigen::Matrix<float, 2, 1, 0, 2, 1>, Rosenbrock, Optimization::Local::AndCriteria<Optimization::Local::IterationCriterion, Optimization::Local::RelativeValueCriterion<float> > >
:int
初始化
然后我将代码更改为:
Optimization::Local::Simplex<float, Eigen::Matrix<float, 2, 1, 0, 2, 1>, Rosenbrock, Optimization::Local::AndCriteria<Optimization::Local::IterationCriterion, Optimization::Local::RelativeValueCriterion<float> > > optimizer
有用 !!!!!
g++ -O2 -march=native -msse2 -m64 -DEIGEN_NO_DEBUG test_rosenbrock_simplex.cpp -I/home/usrA/tools/eigen-eigen-5097c01bcdc4 -o test_rosenbrock_simplex.exe
./test_rosenbrock_simplex.exe
-2.75 -0.5 0
2.1875 1.125 0
Starting point: 10
10
Starting value: 8181
Best point: 1
1
Best value: 5.68434e-14