目录

一、源码安装cadasi

二、安装ipopt

三、一个实际的例子


一、源码安装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

输出结果为

Logo

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

更多推荐