iPopt 및 Snopt와 같은 비선형 프로그래밍 솔버에 대한 현대적이고 가벼운 고유의 C ++ 인터페이스.
해결할 비선형 최적화 문제는 다음과 같이 정의됩니다.
특징 • 설치 • 예제 • 기부 • 출판물 • 저자
iPopt / snopt 및 고유의 장점을 결합합니다 .
| ipopt / snopt | 고유 |
|---|---|
| 비선형 최적화를위한 고품질 솔버 | vectors와 매트릭스의 현대적이고 직관적 인 제형 |
| 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을 구축하는 데 사용됩니다.
UML과 같은 그래픽 개요는 여기에서 볼 수 있습니다.
설치하는 가장 쉬운 방법은 Ros Binaries를 통한 것입니다.
sudo apt-get install ros-<distro>-ifopt
ROS를 사용하지 않거나 배포판에 Binaries가 존재하지 않는 경우 소스에서 이러한 패키지를 쉽게 만들 수 있습니다. 이를 위해 필요한 종속성 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 Command Line 도구를 다운로드 한 다음 :
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} )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 (또는 설치된 경우 snopt) Gtest가 설치된 경우 ifopt_core-test 표시됩니다.
iPopt를 올바르게 설치하고 올바르게 링크 한 경우 바이너리 예제를 직접 실행할 수도 있습니다 (먼저 Makefile 사용하여 빌드 폴더로 이동).
make test ARGS= ' -R ifopt_ipopt-example -V '산출:
1.0 0.0다리 로봇의 동작을 생성하기 위해 여러 변수 세트와 제약 조건이있는 TOWR에서 취한 더 많은 문제가 다음을 생성합니다.
우리는 추가 솔버에 대한 인터페이스, 버그 수정, 단위 테스트 또는 문서 업데이트 등 Pull Request를 좋아합니다. 자세한 내용은 Contributing.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 버전의 iPopt 버전을 사용하려면 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 통해 예를 들어 해당 빌드 폴더를 가리키십시오.
export SNOPT_DIR=/home/your_name/Code/Snopt그리고 cmake로 실행하십시오
cmake -DBUILD_SNOPT=ON ..