现代,轻巧,基于特征的C ++接口,用于非线性编程求解器,例如IPOPT和SNOPT。
一个示例要解决的非线性优化问题定义为:
功能•安装•示例•贡献•出版物•作者
结合了ipopt / snopt和eigen的优势:
| ipopt / snopt | 特征 |
|---|---|
| ✔资用非线性优化的高质量求解器 | ✔️矢量和矩阵的现代,直观的配方 |
| C ++ API不便和容易出错(原始指针,索引管理,Jacobian Construction) | ✔️高效实施 |
| 链接和导出困难 |
find_package(ifopt)或CATKIN/ROS(可选)优化问题由多个自变量和约束集组成。每组代表一个共同的概念,例如,一组变量可能代表样条系数,另一个脚步位置。同样,约束集组相似的约束。 ifopt允许用户在单独的类中独立定义这些集合,然后从这些集合中构建总体问题。 (在添加或删除集合时不再担心适应索引)。
find x0, x1 (variable-sets 0 & 1)
s.t
x0_lower <= x0 <= x0_upper (bounds on variable-set x0 in R^2)
{x0,x1} = arg min c0(x0,x1)+c1(x0,x1) (cost-terms 0 and 1)
g0_lower < g0(x0,x1) < g0_upper (constraint-set 0 in R^2)
g1_lower < g1(x0,x1) < g0_upper (constraint-set 1 in R^1)
提供导数信息大大提高了解决方案速度。 ifopt允许独立相对于每个变量集定义每个成本计数/约束集的衍生物。这样可以确保当变量集的总体矢量发生变化时,此派生信息仍然有效。这些“ Jacobian块”必须通过ConstraintSet::FillJacobianBlock()提供,然后用于为成本和约束构建完整的Jacobian。
在这里可以看到图形概述。
最简单的安装方法是通过ROS二进制装置,您都设置了!
sudo apt-get install ros-<distro>-ifopt
如果您不使用ROS或不存在二进制文件的发行版,则可以轻松地从源构建这些软件包。为此,使用所需的依赖项CMAKE,EIGEN和IPOPT使用
sudo apt-get install cmake libeigen3-dev coinor-libipopt-dev
如果要链接到IPOPT的本地安装或SNOPT,请参见此处。
安装
git clone https://github.com/ethz-adrl/ifopt.git && cd ifopt
mkdir build && cd build
cmake ..
make
sudo make install # copies files in this folder to /usr/local/*
# sudo xargs rm < install_manifest.txt # in case you want to uninstall the above使用:要在您的CMAKE项目中使用,请参阅此最小CMakelists.txt :
find_package (ifopt)
# Formulate (ifopt:ifopt_core) and solve (ifopt::ifopt_ipopt) the problem
add_executable (main main.cpp)
# Pull in include directories, libraries, ...
target_link_libraries (main PUBLIC ifopt::ifopt_ipopt) 安装:下载Catkin或Catkin命令行工具,然后:
cd catkin_ws/src
git clone https://github.com/ethz-adrl/ifopt.git
cd ..
catkin_make_isolated # `catkin build` if you are using catkin command-line tools
source ./devel/setup.bash使用:通过添加到您的cmakelists.txt中包括在catkin项目中
add_compile_options (-std=c++11)
find_package (catkin COMPONENTS ifopt)
include_directories ( ${catkin_INCLUDE_DIRS} )
target_link_libraries (foo ${catkin_LIBRARIES} )将以下内容添加到您的软件包.xml :
< package >
< depend >ifopt</ depend >
</ package >导航到Makefile所在的构建文件夹,这取决于您构建代码的方式:
cd ifopt/build # plain cmake
cd catkin_ws/build_isolated/ifopt/devel # catkin_make_isolated
cd catkin_ws/build/ifopt # catkin build通过运行test目标确保正确安装了所有内容
make test您应该查看ifopt_ipopt-example....Passed (或SNOPT)以及ifopt_core-test 。
如果您正确安装了IPOPT并链接了,也可以直接运行二进制示例(再次,首先导航到使用Makefile的构建文件夹)
make test ARGS= ' -R ifopt_ipopt-example -V '输出:
1.0 0.0从TOWR中提取的一个更涉及的问题,具有多组变量和约束,以生成腿部机器人的动议,从而产生以下内容:
我们喜欢拉动请求,无论是与其他求解器的接口,错误修复,单元测试还是更新文档。请查看贡献.md以获取更多信息。请参阅此处参与该项目的贡献者列表。
如果您使用这项工作,请考虑以下引用:
@misc{ifopt,
author = {Alexander W Winkler},
title = {{Ifopt - A modern, light-weight, Eigen-based C++ interface to
Nonlinear Programming solvers Ipopt and Snopt.}},
year = 2018,
doi = {10.5281/zenodo.1135046},
url = {https://doi.org/10.5281/zenodo.1135046}
}
开发该代码的研究项目:
亚历山大·W·温克勒(Alexander W. Winkler) - 初始工作/维护者
这是在以下机构进行的:
如果您是从源构建的,并且想使用iPOPT本地安装的版本添加到您的ipopt build文件夹的路径到~/.bashrc ,例如
export IPOPT_DIR=/home/your_name/Code/Ipopt-3.12.8/build如果您的操作系统不提供预编译的二进制文件或所需的版本,则也可以轻松地从源中安装IPOPT,如下所述。该摘要可能对您有用:
wget https://www.coin-or.org/download/source/Ipopt/Ipopt-3.11.10.zip
unzip Ipopt-3.11.10.zip
cd Ipopt-3.11.10/ThirdParty/Mumps
./get.Mumps # HSL routines are faster (http://www.hsl.rl.ac.uk/ipopt/)
cd ../../
mkdir build && cd build
../configure --prefix=/usr/local
make
make test
make install
export IPOPT_DIR= ` pwd `如果您需要一个接口来snopt,请通过EG指向~/.bashrc中的构建文件夹
export SNOPT_DIR=/home/your_name/Code/Snopt并运行cmake
cmake -DBUILD_SNOPT=ON ..