非线性求解器Casadi使用简介

非线性求解器Casadi使用简介

Casadi做为一款非线性求解器,支持python、C++、matlab等多种语言,能够解决非常多的工程问题。具体使用请参考casadi官方使用文档
使用Casadi主要包含3个步骤:构造变量、构造目标函数和设置求解器。

构造变量和目标函数

使用casadi求解优化问题时,就需要将变量定义成casadi能够识别的形式,其中可以将变量定义成向量、矩阵的形式,如“x = SX.sym(‘x’)”定义的是一个一维变量,“y=SX.sym(‘y’, 5)”定义的是一个5维向量变量
在定义完变量后,定义目标函数则是一件非常容易的事情。如“f=x * x + 5 * x”。

设置求解器

在casadi中,根据不同的问题有多种求解方式,如NLP问题、QP问题等,同时还需要设置一些约束条件,以及设置求解器参数如最大迭代步长、求解精度等。这些将在使用例程当中介绍。

使用例程

以下将通过一个非常简单的python程序介绍求解一个QP问题(需要使用“pip install casadi”安装python包)。
优化的问题如式(1)所示。
min ⁡ x , y J = min ⁡ x , y x 2 + y 2 s . t . 0 ≤ x + y − 10 (1) \begin{array}{l} \min \limits_{x,y}{J}=\min \limits_{x, y} {x^2+y^2} \\ s.t. \quad 0 \leq x+y-10 \end{array} \tag{1} x,yminJ=x,yminx2+y2s.t.0x+y10(1)
式(1)的最优值为50,解为 ( x , y ) = ( 5 , 5 ) (x,y)=(5,5) (x,y)=(5,5)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import casadi as ca
import casadi.tools as ca_tools
import numpy as np
import time
import math

if __name__ == '__main__':
    print("begin the test program.")
    x = ca.SX.sym('x')   #定义一 维变量x
    y = ca.SX.sym('y')   #定义一 维变量y
    
    f = x**2+y**2    #定义目标函数
    
    qp = {'x': ca.vertcat(x, y), 'f': f, 'g': x+y-10}
    S = ca.qpsol('S', 'qpoases', qp)    #加载求解器
    print(S)
    r = S(lbg = 0)    #加载约束条件并进行求解
    x_opt = r['x']
    print('x_opt:', x_opt)    #显示求解结果

扩展内容

目前已经使用该求解器做过MPC控制,效果非常可观。当然,理论上需要是优化求解的工程问题,只要能用数学公式描述出来,就能够使用这款求解器求解问题。比如规划、定位、SLAM等。

  • 9
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值