Ceres Solver简介及使用

news/2024/11/28 10:53:47/

      Ceres Solver是一个开源的C++库,用于建模和解决大型、复杂的优化问题。它是一个成熟、功能丰富且高性能的库,自2010年以来一直在Google生产中使用。最新发布版本为2.1.0,license为BSD,它支持在Windows、Linux、Mac、Android、iOS上编译,源码地址:https://ceres-solver.googlesource.com/ceres-solver 
      Ceres Solver可用于解决两类问题
      (1).具有边界约束的非线性最小二乘(Non-linear Least Squares)问题;
      (2).一般无约束优化问题。
      Ceres Solver依赖项
      (1).必须的:CMake、Eigen、glog、gflags;
      (2).可选的:SuiteSparse、BLAS and LAPACK、CUDA。
      Ceres Solver在Ubuntu 20.04上编译:eigen, glog, gflags, ceres-solver都在/home/spring/Soft目录下

      (1).clone eigen源码:这里使用3.3.7版本,依次执行如下命令:

git clone https://gitlab.com/libeigen/eigen.git
cd eigen
git checkout 3.3.7

      编译eigen,在eigen目录下执行build_eigen.sh,其内容如下:

#! /bin/bashif [[ ! -d "build" ]]; thenmkdir buildcd build
elsecd build
ficmake \-DCMAKE_CXX_FLAGS=-fPIC \-DCMAKE_C_FLAGS=-fPIC \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=../install \..
make -j2
make install

      (2).clone glog源码:这里使用v0.4.0版本,依次执行如下命令:

git clone https://github.com/google/glog.git
cd glog
git checkout v0.4.0

      编译glog,在glog目录下直接执行build_glog.sh,其内容与build_eigen.sh完全一致。

      (3).clone gflags源码:这里使用v2.2.2版本,依次执行如下命令:

git clone https://github.com/gflags/gflags.git
cd gflags
git checkout v2.2.2

      编译gflags,在gflags目录执行build_gflags.sh,其内容与build_eigen.sh完全一致。

      (4).clone Ceres Solver源码:这里使用1.14.0版本,依次执行如下命令:

git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout 1.14.0

      编译ceres-solver,在ceres-solver目录执行build_ceres-solver.sh,其内容如下:

#! /bin/bashif [[ ! -d "build" ]]; thenmkdir buildcd build
elsecd build
fipath=/home/spring/Softcmake \-DCMAKE_CXX_FLAGS=-fPIC \-DCMAKE_C_FLAGS=-fPIC \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=../install \-DEigen3_DIR=${path}/eigen/install/share/eigen3/cmake \-Dglog_DIR=${path}/glog/install/lib/cmake/glog \-Dgflags_DIR=${path}/gflags/install/lib/cmake/gflags \..
make -j2
make install

      Ceres Solver调用:在/home/spring/Soft目录下新建test目录,此目录内文件内容依次如下

      (1).main.cpp:

#include <iostream>
#include <glog/logging.h>
#include <ceres/ceres.h>using namespace ceres;struct CostFunctor {template <typename T>bool operator()(const T* const x, T* residual) const {residual[0] = 10.0 - x[0];return true;}
};int main(int argc, char** argv)
{// reference: http://ceres-solver.org/nnls_tutorial.htmlgoogle::InitGoogleLogging(argv[0]);// The variable to solve for with its initial value.double initial_x = 5.0;double x = initial_x;// Build the problem.Problem problem;// Set up the only cost function (also known as residual). This uses// auto-differentiation to obtain the derivative (jacobian).CostFunction* cost_function = new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);problem.AddResidualBlock(cost_function, nullptr, &x);// Run the solver!Solver::Options options;options.linear_solver_type = ceres::DENSE_QR;options.minimizer_progress_to_stdout = true;Solver::Summary summary;Solve(options, &problem, &summary);std::cout << summary.BriefReport() << "\n";std::cout << "x : " << initial_x << " -> " << x << "\n";return 0;
}

      (2).build.sh:

#! /bin/bashif [[ ! -d "build" ]]; thenmkdir buildcd build
elsecd build
fipath=/home/spring/Softcp ${path}/glog/install/lib/libglog.a .
cp ${path}/gflags/install/lib/libgflags.a .
cp ${path}/ceres-solver/install/lib/libceres.a .cmake ..
make

      (3).CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)
project(test_ceres-solver)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../eigen/install/include/eigen3${CMAKE_CURRENT_SOURCE_DIR}/../glog/install/include${CMAKE_CURRENT_SOURCE_DIR}/../gflags/install/include${CMAKE_CURRENT_SOURCE_DIR}/../ceres-solver/install/include
)add_executable(${CMAKE_PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/build)
target_link_libraries(${CMAKE_PROJECT_NAME} ceres glog gflags pthread)

      执行:

      首先执行:./build.sh

      然后执行:./build/test_ceres-solver ,结果如下图所示:

 


http://www.ppmy.cn/news/966999.html

相关文章

互联网晚报 | 31省份月最低工资标准出炉;迪士尼宣布裁员7000人;国美电器破产清算呈请被驳回...

全国31省份月最低工资标准出炉 近日&#xff0c;全国31省份月最低工资标准出炉&#xff0c;上海月最低工资标准为全国最高&#xff0c;达到2590元。天津、河北、江苏、浙江、安徽、福建、山东、河南、湖北、重庆、四川等15个地区第一档最低工资标准都达到了2000元及以上。&…

LLM(1)之基础使用prompt

LLM之prompt提示词 Author&#xff1a;Once Day Date&#xff1a;2023年4月30日 参考文章&#xff1a; 中文完整版全9集ChatGPT提示工程师&#xff5c;AI大神吴恩达教你写提示词ChatGPT Shortcut - 简单易用的 ChatGPT 快捷指令表&#xff0c;让生产力倍增&#xff01;标签筛…

腾讯云发布5G远程驾驶云;中国电信发布通用视觉大模型2.0;Meta推新语言模型Toolformer丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 腾讯云联合中国联通宁夏、福建分公司发布5G远程驾驶云 4月28日&#xff0c;在第六届数字中国建设峰会上&#xff0c;腾讯云携手中国联通宁夏、福建两省区分公司&#xff0c;首次对外发布了“基于闽宁云的5G远程…

这些你熟知的 app 和服务,都用上了人工智能

从微软在 Microsoft 365 服务中全面整合 GPT-4 能力 &#xff0c;让 PPT、Word 文档、Excel 表格的制作变成了「一句话的事」&#xff0c;到 Adobe 刚刚发布 Adobe Firefly模型集合&#xff0c;让图形设计、字体风格、视频渲染乃至 3D 建模的门槛显著降低——你我熟知的那些工…

超300家生态伙伴参与文心千帆内测,百度智能云销售线索单月增长超4倍

5月18日&#xff0c;百度智能云在广州举行2023百度智能云合作伙伴大会&#xff0c;向在场的300家政企客户展示文心大模型在场景应用、生态建设领域的最新进展。 百度集团执行副总裁、百度智能云事业群总裁沈抖在视频致辞中表示&#xff0c;自3月16日文心一言内测以来&#xff…

全球中国 AI 大模型 ( LLM ) 列表

文章目录 AI 大模型简介中国大模型列表大模型列表国外大模型开源大模型基础大模型非基础大模型模型架构AI 大模型简介 AI 大模型(Large Language Model,简称LLM)是一种人工智能技术,通过深度学习算法训练大规模数据集来生成自然语言文本(如文章、对话等)。该技术的应用范…

马斯克宣布将卸任推特CEO:转战技术岗位 ;王坚正式回归阿里云;科大讯飞否认星火大模型套壳ChatGPT|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

关于中国的医疗改革,看人工智能(chatGPT)怎么回答!

1.对于中国的医疗改革你们什么好的建议&#xff1f; 作为一个语言模型&#xff0c;我可以为您提供一些建议&#xff0c;但请注意这仅仅是一些普遍的建议。医疗改革是一个复杂的议题&#xff0c;需要综合考虑各种因素&#xff0c;包括政治、经济、文化和社会等方面。以下是一些…