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 在 机器人学 类别中排名
每月5,071次下载
在 optima 中使用
3.5MB
15K SLoC
包含 (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)是下一代机器人和自主系统快速、精确嵌入式优化的求解器。
文档可在以下地址找到: alphaville.github.io/optimization-engine
目录
功能
OpEn 是 CVXGen 非凸问题的对应物。
- 快速非凸参数优化
- 用 Rust 编写的数值算法
- 可证明安全的内存管理
- 自动生成 ROS 软件包
OpEn 适合
- 嵌入式 非线性模型预测控制,
- 嵌入式 非线性移动预测估计 及其在
- 机器人和先进制造系统中的应用
- 自动驾驶汽车
- 无人机和航空航天
演示
代码生成
代码生成?小菜一碟!
OpEn 生成 Rust 中的参数优化器模块 - 它非常快 - 它是安全的 - 它可以在嵌入式设备上运行。
您可以使用 OpEn 的 MATLAB 或 Python 接口生成您的参数优化器的 Rust 代码。
然后可以直接使用 Rust 调用,或者作为通过套接字提供的服务来使用。
您只需要很少的代码就可以在很短的时间内生成参数优化器。
OpEn 允许应用开发者和研究人员专注于应用挑战,而不是解决相关参数优化问题的枯燥任务(如在非线性模型预测控制中)。
嵌入式应用
OpEn 可在嵌入式设备上运行;在此,我们看到它在 intel Atom 上运行,用于实验室规模微型飞行器的自主导航 - 控制器以 20Hz 的频率运行,仅使用 15% 的 CPU!
参数问题
OpEn 可以解决通用形式的非凸参数优化问题
其中,f 是一个光滑的成本函数,U 是一个简单(可能非凸)的集合,F1 和 F2 是非线性光滑映射,而 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 的更多信息
- 快速安装指南
- OpEn 在 Rust 中
- OpEn 在 Python 中 (示例)
- OpEn 在 MATLAB 中 (示例)
- OpEn+Jupyter 在 Docker 中
- 生成 ROS 软件包
- 在 C/C++ 中调用 OpEn
- OpEn 的 TCP/IP 接口
- 常见问题解答
联系我们
你喜欢 OpEn 吗?
在 github 上用一颗星来展示...
许可证
OpEn 是一个免费的开源项目。您可以在Apache 许可证 v2.0或MIT 许可证的条款下使用它。
核心团队
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