ubantu安装casadi框架并使用ipopt求解器(包含一个c++的例子)
编译 test_casadi表示编译后输出的文件, test.cpp表示当前编译的cpp文件。之后我们尝试使用这个求解器,但是他老式提示找不到ipopt,这是因为在编译的时候,需要用。通过源码安装后的文件被放在了/usr/local/lib这个文件夹中。这个是确认包含ipopt这个求解器。一、源码安装cadasi。
·
目录
一、源码安装cadasi
git clone https://github.com/casadi/casadi.git
cd casadi
mkdir build
cd build
cmake ..
make
sudo make install
通过源码安装后的文件被放在了/usr/local/lib这个文件夹中。
二、安装ipopt
直接运行
sudo apt-get install coinor-libipopt-dev
之后我们尝试使用这个求解器,但是他老式提示找不到ipopt,这是因为在编译的时候,需要用
cmake .. -DWITH_IPOPT=ON
这个是确认包含ipopt这个求解器。
三、一个实际的例子
#include <casadi/casadi.hpp>
int main() {
// 定义变量
casadi::SX x = casadi::SX::sym("x");
casadi::SX y = casadi::SX::sym("y");
// 定义目标函数
casadi::SX f = (1 - x) * (1 - x) + 100 * (y - x * x) * (y - x * x);
// 定义约束条件
casadi::SX g = x + y - 1;
// 创建优化问题
casadi::SXDict nlp = {{"x", casadi::SX::vertcat({x, y})}, {"f", f}, {"g", g}};
// 创建求解器
casadi::Function solver = casadi::nlpsol("solver", "ipopt", nlp);
// 求解优化问题
std::map<std::string, casadi::DM> arg = {{"lbx", casadi::DM::ones(2)},
{"ubx", casadi::DM::ones(2)},
{"lbg", casadi::DM(0)},
{"ubg", casadi::DM(0)},
{"x0", casadi::DM::zeros(2)}};
std::map<std::string, casadi::DM> res = solver(arg);
// 输出结果
std::cout << "Optimal solution: " << res.at("x") << std::endl;
return 0;
}
编译 test_casadi表示编译后输出的文件, test.cpp表示当前编译的cpp文件。
g++ -std=c++11 -o test_casadi test.cpp -lcasadi -Wl,-rpath,/usr/local/lib
运行编译后的文件
./test_casadi
输出结果为

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)