Python CasADi初步教程

文章目录

简介和安装

CasADi 是一个开源的符号计算与数值优化框架,提供了Python、MATLAB和C++ 接口。其核心机制是将数学表达式构建为有向无环图(DAG)形式的计算图,并在此基础上实现精确的自动微分,并生成高效的 C 代码,适用于大规模非线性规划(NLP)和最优控制问题(如模型预测控制 MPC)的建模与求解,在模型预测控制、机器人学与轨迹优化、电力系统等领域有着重要应用。

Python可以用pip安装

复制代码
pip install casadi -i https://pypi.tuna.tsinghua.edu.cn/simple

符号表达式SX

在CasADi中,符号表达式(Symbol eXpression)用来表示数学公式的内部对象,支持定义变量和公式并构建计算图,甚至可以自动求导。

例如, ∂ ( x 2 + sin ⁡ y ) ∂ x = 2 x \frac{\partial(x^2+\sin y)}{\partial x}=2x ∂x∂(x2+siny)=2x,示例如下

python 复制代码
import casadi as ca
x = ca.SX.sym("x")
y = ca.SX.sym("y")
f = x**2 + ca.sin(y)
ca.gradient(f, x)       # SX((x+x))

但需要注意的是,符号表达式并不能直接带入数值,在CasADi中,需要在构造Function之后,才能带入数值进行计算。下面令 x = 2 , 3 , y = 3 x=2,3, y=3 x=2,3,y=3,进行计算

python 复制代码
F = ca.Function("F", [x, y], [f])
F([2,3],3)      # DM([4.14112, 9.14112])
import numpy as np
np.array(F([2,3],3)  )

在经过数值计算后,Function的返回值是DM类型,此为数据矩阵(Data Matrix, DM),可以无缝转为数组。

在CasADi中,有两种构建SX的方法,分别是SX(n,m)和SX.sym(name, n, m),从表达式可以看出来,二者在结构上完全一致,都是 n × m n\times m n×m的数组,但后者是个带有名字的表达式,从而在交互时更加便捷。比如SX.zeros(n,m), SX.ones(n,m), SX.eye(n),顾名思义不必多说。

除了SX之外,CasADi还提供了矩阵表达式(Matrix eXpression, MX)这种数据结构,二者区别在于,在SX中,矩阵中的每个元素,都被看成独立的标量表达式;而在MX中,则将矩阵本身作为一个整体对象来运算,从而在大规模稀疏线性代数中效率更高。

牛刀小试

下面考虑一个常见的非线性规划问题

min ⁡ x , y ( x − 2 ) 2 + ( y + 1 ) 2 \min_{x,y} (x-2)^2+(y+1)^2 x,ymin(x−2)2+(y+1)2

这题很简单,一瞪眼就知道结果是 ( 2 , − 1 ) (2,-1) (2,−1),下面调用CasADi中的IPOPT求解器进行优化,结果如下

python 复制代码
x = ca.SX.sym("x")
y = ca.SX.sym("y")
obj = (x - 2)**2 + (y + 1)**2

nlp = {
    "x": ca.vertcat(x, y),
    "f": obj
}

solver = ca.nlpsol("solver", "ipopt", nlp)

sol = solver(x0=[0, 0])
print(sol["x"])
# DM([2, -1])
相关推荐
橙橙笔记1 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事1 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力3 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力3 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A4 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖4 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks4 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂5 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
tellmewhoisi5 小时前
nlp:知识库检索和dify知识库创建
python·自然语言处理
2601_968793146 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化