#优化 #求解器 #mpc #控制系统 #嵌入式 #内存管理 #nmpc

optimization_engine

一个纯Rust框架,用于嵌入式非凸优化。非常适合机器人!

25个版本

0.9.1 2024年8月14日
0.9.0 2024年3月20日
0.8.1 2023年10月27日
0.7.7 2023年1月17日
0.2.2 2019年3月22日

#1机器人学 类别中排名

Download history 1050/week @ 2024-05-04 1178/week @ 2024-05-11 858/week @ 2024-05-18 922/week @ 2024-05-25 1158/week @ 2024-06-01 815/week @ 2024-06-08 777/week @ 2024-06-15 863/week @ 2024-06-22 569/week @ 2024-06-29 638/week @ 2024-07-06 432/week @ 2024-07-13 798/week @ 2024-07-20 1281/week @ 2024-07-27 1332/week @ 2024-08-03 1276/week @ 2024-08-10 972/week @ 2024-08-17

每月5,071次下载
optima 中使用

MIT/Apache

3.5MB
15K SLoC

JavaScript 9K SLoC // 0.2% comments Rust 5.5K SLoC // 0.1% comments Shell 120 SLoC // 0.2% comments Jupyter Notebooks 36 SLoC // 0.5% comments Batch 26 SLoC Python 20 SLoC // 0.3% comments

包含 (WOFF字体,330KB) lato-normal-italic.woff、(WOFF字体,325KB) lato-bold-italic.woff、(WOFF字体,310KB) lato-bold.woff、(WOFF字体,310KB) lato-normal.woff、(WOFF字体,195KB) lato-bold-italic.woff2、(WOFF字体,185KB) lato-bold.woff2更多

OpEn logo

CodeFactor GHA continuous integration build status

MIT license Apache v2 license

Gitter Tweet Chat on Discord

优化引擎(OpEn)是下一代机器人和自主系统快速、精确嵌入式优化的求解器。

文档可在以下地址找到: alphaville.github.io/optimization-engine

目录

功能

OpEn 是 CVXGen 非凸问题的对应物。

  • 快速非凸参数优化
  • 用 Rust 编写的数值算法
  • 可证明安全的内存管理
  • 自动生成 ROS 软件包

OpEn 适合

  • 嵌入式 非线性模型预测控制,
  • 嵌入式 非线性移动预测估计 及其在
  • 机器人和先进制造系统中的应用
  • 自动驾驶汽车
  • 无人机和航空航天

演示

代码生成

代码生成?小菜一碟!

OpEn 生成 Rust 中的参数优化器模块 - 它非常快 - 它是安全的 - 它可以在嵌入式设备上运行。

您可以使用 OpEn 的 MATLABPython 接口生成您的参数优化器的 Rust 代码。

然后可以直接使用 Rust 调用,或者作为通过套接字提供的服务来使用。

Easy Code Generation

您只需要很少的代码就可以在很短的时间内生成参数优化器。

OpEn 允许应用开发者和研究人员专注于应用挑战,而不是解决相关参数优化问题的枯燥任务(如在非线性模型预测控制中)。

嵌入式应用

OpEn 可在嵌入式设备上运行;在此,我们看到它在 intel Atom 上运行,用于实验室规模微型飞行器的自主导航 - 控制器以 20Hz 的频率运行,仅使用 15% 的 CPU!

Fast NMPC of MAV

参数问题

OpEn 可以解决通用形式的非凸参数优化问题

standard parametric optimziation problem

其中,f 是一个光滑的成本函数,U 是一个简单(可能非凸)的集合,F1F2 是非线性光滑映射,而 C 是一个凸集(了解更多)。

代码生成示例

使用几行 Python 代码即可生成代码(详细说明请参阅文档

import opengen as og
import casadi.casadi as cs

# Define variables
# ------------------------------------
u = cs.SX.sym("u", 5)
p = cs.SX.sym("p", 2)

# Define cost function and constraints
# ------------------------------------
phi = og.functions.rosenbrock(u, p)
f2 = cs.vertcat(1.5 * u[0] - u[1],
                cs.fmax(0.0, u[2] - u[3] + 0.1))
bounds = og.constraints.Ball2(None, 1.5)
problem = og.builder.Problem(u, p, phi) \
    .with_penalty_constraints(f2)       \
    .with_constraints(bounds)
    
# Configuration and code generation
# ------------------------------------
build_config = og.config.BuildConfiguration()  \
    .with_build_directory("python_test_build") \
    .with_tcp_interface_config()
meta = og.config.OptimizerMeta()
solver_config = og.config.SolverConfiguration()    \
    .with_tolerance(1e-5)                          \
    .with_constraints_tolerance(1e-4)
builder = og.builder.OpEnOptimizerBuilder(problem, meta,
                                          build_config, solver_config)
builder.build()

只需几行 MATLAB 代码即可生成代码(详细说明请参阅文档

% Define variables
% ------------------------------------
u = casadi.SX.sym('u', 5);
p = casadi.SX.sym('p', 2);

% Define cost function and constraints
% ------------------------------------
phi = rosenbrock(u, p);
f2 = [1.5*u(1) - u(2);
      max(0, u(3)-u(4)+0.1)];

bounds = OpEnConstraints.make_ball_at_origin(5.0);

opEnBuilder = OpEnOptimizerBuilder()...
    .with_problem(u, p, phi, bounds)...
    .with_build_name('penalty_new')...
    .with_fpr_tolerance(1e-5)...
    .with_constraints_as_penalties(f2);

opEnOptimizer = opEnBuilder.build();

入门

联系我们

你喜欢 OpEn 吗?

在 github 上用一颗星来展示...

Star

许可证

OpEn 是一个免费的开源项目。您可以在Apache 许可证 v2.0MIT 许可证的条款下使用它。

核心团队


Pantelis Sopasakis

Emil Fresk

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何有意提交以包含在作品中的贡献,都将如上双许可,不附加任何其他条款或条件。

在您向 Optimization Engine 贡献之前,请阅读我们的贡献指南

贡献者列表由 github 自动生成,请在此查看。

引用 OpEn

请按以下方式引用 OpEn(arXiv 版本

@inproceedings{open2020,
  author="P. Sopasakis and E. Fresk and P. Patrinos",
  title="{OpEn}: Code Generation for Embedded Nonconvex Optimization",
  booktitle="IFAC World Congress",
  year="2020",
  address="Berlin"
}

依赖项

~2.6–4.5MB
~90K SLoC