IPOPTやSnoptなどの非線形プログラミングソルバーへの最新の軽量の固有のC ++インターフェイス。
解決する非線形最適化問題の例は、次のように定義されます。
機能•インストール•例•貢献•出版物•著者
IPOPT / SNOPTとEIGENの利点を組み合わせます。
| IPOPT / SNOPT | 固有 |
|---|---|
| 非線形最適化のための高品質のソルバー | bectorとマトリックスの最新の直感的な定式化 |
| C ++ API不便でエラーが発生しやすい(生のポインター、インデックス管理、ヤコビアン構造) | ✔️非常に効率的な実装 |
| リンクとエクスポートの困難 |
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 、各変数セットに関して個別に各コスト/制約セットの導関数を個別に定義できます。これにより、ベクトル全体の可変セットの順序が変更されると、この導関数情報がまだ有効であることが保証されます。これらの「ヤコビアンブロック」はConstraintSet::FillJacobianBlock()を通じて提供され、その後、コストと制約のために完全なヤコビアンを構築するために使用する必要があります。
UMLとしてのグラフィカルな概要は、ここで見ることができます。
インストールする最も簡単な方法は、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に追加して、キャットキンプロジェクトを含めてください
add_compile_options (-std=c++11)
find_package (catkin COMPONENTS ifopt)
include_directories ( ${catkin_INCLUDE_DIRS} )
target_link_libraries (foo ${catkin_LIBRARIES} )Package.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 (またはインストールされている場合はスノップ)と、gtestがインストールされている場合はifopt_core-test確認する必要があります。
IPOPTを正しくインストールしてリンクしている場合は、バイナリの例を直接実行することもできます(もう一度、最初にMakefileを使用してビルドフォルダーに移動します)
make test ARGS= ' -R ifopt_ipopt-example -V '出力:
1.0 0.0TOWRから取られたより複数の問題と、脚のロボットの動きを生成するための複数の変数セットと制約を備えた問題は、以下を生成します。
追加のソルバーへのインターフェイス、バグ修正、ユニットテスト、ドキュメントの更新など、プルリクエストが大好きです。詳細については、converting.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}
}
このコードが開発された研究プロジェクト:
Alexander W. Winkler-初期作業/メンテナー
これは、次の機関で行われました。
ソースから構築していて、IPOPT ~/.bashrcローカルにインストールされたバージョンを使用したい場合
export IPOPT_DIR=/home/your_name/Code/Ipopt-3.12.8/buildOSが事前コンパイルされたバイナリまたは必要なバージョンを提供しない場合は、ここで説明するようにソースから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にインターフェイスが必要な場合は、 ~/.bashrcを介してそのビルドフォルダーにcmakeをポイントします
export SNOPT_DIR=/home/your_name/Code/Snoptcmakeを実行します
cmake -DBUILD_SNOPT=ON ..