อินเทอร์เฟซ C ++ ที่มีน้ำหนักเบาและมีน้ำหนักเบาไปยังนักแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นเช่น IPOPT และ SNOPT
ตัวอย่างปัญหาการเพิ่มประสิทธิภาพแบบไม่เชิงเส้นในการแก้ปัญหาหมายถึง:
คุณสมบัติ•การติดตั้ง•ตัวอย่าง•มีส่วนร่วม•สิ่งพิมพ์•ผู้เขียน
รวม ข้อดีของ ipopt / snopt และ eigen:
| ipopt / snopt | ไอเท็น |
|---|---|
| ✔นักแก้ปัญหาคุณภาพสูงสำหรับการเพิ่มประสิทธิภาพแบบไม่เชิงเส้น | ✔สูตรที่ทันสมัยและใช้งานง่ายของเวกเตอร์และเมทริกซ์ |
| C ++ API ไม่สะดวกและผิดพลาดได้ง่าย (พอยน์เตอร์ดิบ, การจัดการดัชนี, การก่อสร้าง Jacobian) | ✔การใช้งานที่มีประสิทธิภาพสูง |
| การเชื่อมโยงและการส่งออกยาก |
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() และจากนั้นใช้เพื่อสร้าง Jacobian ที่สมบูรณ์สำหรับค่าใช้จ่ายและข้อ จำกัด
ภาพรวมกราฟิกเป็น UML สามารถดูได้ที่นี่
วิธีที่ง่ายที่สุดในการติดตั้งคือผ่าน ROS Binaries และคุณพร้อมแล้ว!
sudo apt-get install ros-<distro>-ifopt
ในกรณีที่คุณไม่ได้ใช้ ROS หรือไบนารีไม่มีอยู่สำหรับ distro ของคุณคุณสามารถสร้างแพ็คเกจเหล่านี้ได้อย่างง่ายดายจากแหล่งที่มา สำหรับสิ่งนี้ให้ติดตั้ง 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ใช้: รวมในโครงการ Catkin ของคุณโดยเพิ่มลงใน 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 (หรือ SNOPT ถ้าติดตั้ง) เช่นเดียวกับ ifopt_core-test หากติดตั้ง GTEST
หากคุณติดตั้ง IPOPT และเชื่อมโยงอย่างถูกต้องคุณสามารถเรียกใช้ตัวอย่างไบนารีได้โดยตรง (อีกครั้งแรกนำทางไปยังโฟลเดอร์บิลด์ด้วย Makefile )
make test ARGS= ' -R ifopt_ipopt-example -V 'เอาท์พุท:
1.0 0.0ปัญหาที่เกี่ยวข้องมากขึ้นนำมาจาก Towr พร้อมตัวแปรหลายชุดและข้อ จำกัด ในการสร้างการเคลื่อนไหวสำหรับหุ่นยนต์ขาที่สร้างสิ่งต่อไปนี้:
เราชอบคำขอดึงไม่ว่าจะเป็นส่วนต่อประสานกับตัวแก้ปัญหาเพิ่มเติมการแก้ไขข้อบกพร่องการทดสอบหน่วยหรือการอัปเดตเอกสาร โปรดดูที่ข้อมูลเพิ่มเติมสำหรับข้อมูลเพิ่มเติม ดูรายการผู้สนับสนุนที่เข้าร่วมในโครงการนี้ที่นี่
หากคุณใช้งานนี้โปรดพิจารณาอ้างดังนี้:
@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 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 ให้ชี้ CMake ไปที่โฟลเดอร์บิลด์นั้นใน ~/.bashrc ของคุณผ่านเช่น
export SNOPT_DIR=/home/your_name/Code/Snoptและเรียกใช้ cmake เป็น
cmake -DBUILD_SNOPT=ON ..