From 63157d9062910f1a38415fe695d5bc4bcfe3626e Mon Sep 17 00:00:00 2001 From: FranekStark Date: Thu, 16 May 2024 18:15:24 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20dfki-ric?= =?UTF-8?q?-underactuated-lab/mimpc@a25b9d1a2e7deae138ab9350beb7e64dba5a72?= =?UTF-8?q?c4=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nojekyll | 0 MPCLeafSystem_8hpp_source.html | 123 ++ MPC_8hpp_source.html | 123 ++ REACSA_8hpp_source.html | 141 ++ SCIPSolver_8hpp_source.html | 202 ++ Simulation_8hpp_source.html | 183 ++ Solver_8hpp.html | 212 ++ Solver_8hpp__dep__incl.map | 7 + Solver_8hpp__dep__incl.md5 | 1 + Solver_8hpp__dep__incl.png | Bin 0 -> 15688 bytes Solver_8hpp__incl.map | 5 + Solver_8hpp__incl.md5 | 1 + Solver_8hpp__incl.png | Bin 0 -> 8419 bytes Solver_8hpp_source.html | 195 ++ System_8hpp.html | 126 ++ System_8hpp__dep__incl.map | 9 + System_8hpp__dep__incl.md5 | 1 + System_8hpp__dep__incl.png | Bin 0 -> 27547 bytes System_8hpp__incl.map | 4 + System_8hpp__incl.md5 | 1 + System_8hpp__incl.png | Bin 0 -> 3808 bytes System_8hpp_source.html | 122 ++ VizForces_8hpp_source.html | 135 ++ annotated.html | 97 + bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes classes.html | 97 + classmimpc_1_1MPC-members.html | 94 + classmimpc_1_1MPC.html | 207 ++ classmimpc_1_1SCIPSolver-members.html | 125 ++ classmimpc_1_1SCIPSolver.html | 467 +++++ classmimpc_1_1SCIPSolver__coll__graph.map | 4 + classmimpc_1_1SCIPSolver__coll__graph.md5 | 1 + classmimpc_1_1SCIPSolver__coll__graph.png | Bin 0 -> 15810 bytes classmimpc_1_1SCIPSolver__inherit__graph.map | 4 + classmimpc_1_1SCIPSolver__inherit__graph.md5 | 1 + classmimpc_1_1SCIPSolver__inherit__graph.png | Bin 0 -> 15810 bytes classmimpc_1_1Solver-members.html | 113 ++ classmimpc_1_1Solver.html | 839 ++++++++ classmimpc_1_1Solver__inherit__graph.map | 4 + classmimpc_1_1Solver__inherit__graph.md5 | 1 + classmimpc_1_1Solver__inherit__graph.png | Bin 0 -> 15828 bytes classmimpc_1_1System-members.html | 101 + classmimpc_1_1System.html | 336 +++ classmimpc_1_1System__inherit__graph.map | 4 + classmimpc_1_1System__inherit__graph.md5 | 1 + classmimpc_1_1System__inherit__graph.png | Bin 0 -> 7328 bytes ..._1simulation_1_1MPCLeafSystem-members.html | 91 + ...smimpc_1_1simulation_1_1MPCLeafSystem.html | 117 ++ ...mulation_1_1MPCLeafSystem__coll__graph.map | 4 + ...mulation_1_1MPCLeafSystem__coll__graph.md5 | 1 + ...mulation_1_1MPCLeafSystem__coll__graph.png | Bin 0 -> 6521 bytes ...ation_1_1MPCLeafSystem__inherit__graph.map | 4 + ...ation_1_1MPCLeafSystem__inherit__graph.md5 | 1 + ...ation_1_1MPCLeafSystem__inherit__graph.png | Bin 0 -> 6521 bytes ...c_1_1simulation_1_1Simulation-members.html | 93 + classmimpc_1_1simulation_1_1Simulation.html | 108 + ...pc_1_1simulation_1_1VizForces-members.html | 91 + classmimpc_1_1simulation_1_1VizForces.html | 120 ++ ..._1simulation_1_1VizForces__coll__graph.map | 4 + ..._1simulation_1_1VizForces__coll__graph.md5 | 1 + ..._1simulation_1_1VizForces__coll__graph.png | Bin 0 -> 5464 bytes ...imulation_1_1VizForces__inherit__graph.map | 4 + ...imulation_1_1VizForces__inherit__graph.md5 | 1 + ...imulation_1_1VizForces__inherit__graph.png | Bin 0 -> 5464 bytes classmimpc_1_1systems_1_1REACSA-members.html | 108 + classmimpc_1_1systems_1_1REACSA.html | 331 +++ ...impc_1_1systems_1_1REACSA__coll__graph.map | 4 + ...impc_1_1systems_1_1REACSA__coll__graph.md5 | 1 + ...impc_1_1systems_1_1REACSA__coll__graph.png | Bin 0 -> 4056 bytes ...c_1_1systems_1_1REACSA__inherit__graph.map | 4 + ...c_1_1systems_1_1REACSA__inherit__graph.md5 | 1 + ...c_1_1systems_1_1REACSA__inherit__graph.png | Bin 0 -> 4056 bytes closed.png | Bin 0 -> 132 bytes dir_3c04bc290434a2bfff240c0777e37105.html | 95 + dir_3c04bc290434a2bfff240c0777e37105_dep.map | 4 + dir_3c04bc290434a2bfff240c0777e37105_dep.md5 | 1 + dir_3c04bc290434a2bfff240c0777e37105_dep.png | Bin 0 -> 2274 bytes dir_7a55efb13937f868f8144ef9f510f0c6.html | 95 + dir_7a55efb13937f868f8144ef9f510f0c6_dep.map | 4 + dir_7a55efb13937f868f8144ef9f510f0c6_dep.md5 | 1 + dir_7a55efb13937f868f8144ef9f510f0c6_dep.png | Bin 0 -> 1806 bytes dir_949292de90bec6ca0ef87cb838b26113.html | 95 + dir_949292de90bec6ca0ef87cb838b26113_dep.map | 4 + dir_949292de90bec6ca0ef87cb838b26113_dep.md5 | 1 + dir_949292de90bec6ca0ef87cb838b26113_dep.png | Bin 0 -> 2201 bytes dir_d44c64559bbebec7f509842c48db8b23.html | 99 + doc.png | Bin 0 -> 746 bytes doxygen.css | 1793 +++++++++++++++++ doxygen.svg | 26 + dynsections.js | 121 ++ files.html | 98 + folderclosed.png | Bin 0 -> 616 bytes folderopen.png | Bin 0 -> 597 bytes functions.html | 183 ++ functions_func.html | 154 ++ functions_vars.html | 83 + graph_legend.html | 142 ++ graph_legend.md5 | 1 + graph_legend.png | Bin 0 -> 20615 bytes hierarchy.html | 97 + index.html | 157 ++ inherit_graph_0.map | 3 + inherit_graph_0.md5 | 1 + inherit_graph_0.png | Bin 0 -> 3114 bytes inherit_graph_1.map | 5 + inherit_graph_1.md5 | 1 + inherit_graph_1.png | Bin 0 -> 9351 bytes inherit_graph_2.map | 3 + inherit_graph_2.md5 | 1 + inherit_graph_2.png | Bin 0 -> 2962 bytes inherit_graph_3.map | 4 + inherit_graph_3.md5 | 1 + inherit_graph_3.png | Bin 0 -> 8600 bytes inherit_graph_4.map | 4 + inherit_graph_4.md5 | 1 + inherit_graph_4.png | Bin 0 -> 5442 bytes inherits.html | 115 ++ jquery.js | 35 + md_INSTALL.html | 115 ++ menu.js | 51 + menudata.js | 44 + nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes pages.html | 87 + search/all_0.html | 37 + search/all_0.js | 7 + search/all_1.html | 37 + search/all_1.js | 4 + search/all_2.html | 37 + search/all_2.js | 5 + search/all_3.html | 37 + search/all_3.js | 4 + search/all_4.html | 37 + search/all_4.js | 6 + search/all_5.html | 37 + search/all_5.js | 4 + search/all_6.html | 37 + search/all_6.js | 5 + search/all_7.html | 37 + search/all_7.js | 5 + search/all_8.html | 37 + search/all_8.js | 6 + search/all_9.html | 37 + search/all_9.js | 4 + search/all_a.html | 37 + search/all_a.js | 4 + search/all_b.html | 37 + search/all_b.js | 4 + search/all_c.html | 37 + search/all_c.js | 20 + search/all_d.html | 37 + search/all_d.js | 4 + search/all_e.html | 37 + search/all_e.js | 6 + search/all_f.html | 37 + search/all_f.js | 4 + search/classes_0.html | 37 + search/classes_0.js | 5 + search/classes_1.html | 37 + search/classes_1.js | 4 + search/classes_2.html | 37 + search/classes_2.js | 7 + search/classes_3.html | 37 + search/classes_3.js | 4 + search/close.svg | 31 + search/enums_0.html | 37 + search/enums_0.js | 4 + search/enums_1.html | 37 + search/enums_1.js | 4 + search/enums_2.html | 37 + search/enums_2.js | 4 + search/enumvalues_0.html | 37 + search/enumvalues_0.js | 4 + search/enumvalues_1.html | 37 + search/enumvalues_1.js | 4 + search/enumvalues_2.html | 37 + search/enumvalues_2.js | 5 + search/enumvalues_3.html | 37 + search/enumvalues_3.js | 4 + search/enumvalues_4.html | 37 + search/enumvalues_4.js | 4 + search/enumvalues_5.html | 37 + search/enumvalues_5.js | 4 + search/enumvalues_6.html | 37 + search/enumvalues_6.js | 4 + search/files_0.html | 37 + search/files_0.js | 5 + search/functions_0.html | 37 + search/functions_0.js | 7 + search/functions_1.html | 37 + search/functions_1.js | 4 + search/functions_2.html | 37 + search/functions_2.js | 6 + search/functions_3.html | 37 + search/functions_3.js | 4 + search/functions_4.html | 37 + search/functions_4.js | 14 + search/functions_5.html | 37 + search/functions_5.js | 5 + search/mag_sel.svg | 74 + search/nomatches.html | 13 + search/pages_0.html | 37 + search/pages_0.js | 4 + search/pages_1.html | 37 + search/pages_1.js | 4 + search/search.css | 257 +++ search/search.js | 816 ++++++++ search/search_l.png | Bin 0 -> 567 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 553 bytes search/searchdata.js | 36 + search/variables_0.html | 37 + search/variables_0.js | 4 + splitbar.png | Bin 0 -> 314 bytes sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 1 + 224 files changed, 11819 insertions(+) create mode 100644 .nojekyll create mode 100644 MPCLeafSystem_8hpp_source.html create mode 100644 MPC_8hpp_source.html create mode 100644 REACSA_8hpp_source.html create mode 100644 SCIPSolver_8hpp_source.html create mode 100644 Simulation_8hpp_source.html create mode 100644 Solver_8hpp.html create mode 100644 Solver_8hpp__dep__incl.map create mode 100644 Solver_8hpp__dep__incl.md5 create mode 100644 Solver_8hpp__dep__incl.png create mode 100644 Solver_8hpp__incl.map create mode 100644 Solver_8hpp__incl.md5 create mode 100644 Solver_8hpp__incl.png create mode 100644 Solver_8hpp_source.html create mode 100644 System_8hpp.html create mode 100644 System_8hpp__dep__incl.map create mode 100644 System_8hpp__dep__incl.md5 create mode 100644 System_8hpp__dep__incl.png create mode 100644 System_8hpp__incl.map create mode 100644 System_8hpp__incl.md5 create mode 100644 System_8hpp__incl.png create mode 100644 System_8hpp_source.html create mode 100644 VizForces_8hpp_source.html create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 classes.html create mode 100644 classmimpc_1_1MPC-members.html create mode 100644 classmimpc_1_1MPC.html create mode 100644 classmimpc_1_1SCIPSolver-members.html create mode 100644 classmimpc_1_1SCIPSolver.html create mode 100644 classmimpc_1_1SCIPSolver__coll__graph.map create mode 100644 classmimpc_1_1SCIPSolver__coll__graph.md5 create mode 100644 classmimpc_1_1SCIPSolver__coll__graph.png create mode 100644 classmimpc_1_1SCIPSolver__inherit__graph.map create mode 100644 classmimpc_1_1SCIPSolver__inherit__graph.md5 create mode 100644 classmimpc_1_1SCIPSolver__inherit__graph.png create mode 100644 classmimpc_1_1Solver-members.html create mode 100644 classmimpc_1_1Solver.html create mode 100644 classmimpc_1_1Solver__inherit__graph.map create mode 100644 classmimpc_1_1Solver__inherit__graph.md5 create mode 100644 classmimpc_1_1Solver__inherit__graph.png create mode 100644 classmimpc_1_1System-members.html create mode 100644 classmimpc_1_1System.html create mode 100644 classmimpc_1_1System__inherit__graph.map create mode 100644 classmimpc_1_1System__inherit__graph.md5 create mode 100644 classmimpc_1_1System__inherit__graph.png create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem-members.html create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem.html create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.map create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.md5 create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.png create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.map create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.md5 create mode 100644 classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.png create mode 100644 classmimpc_1_1simulation_1_1Simulation-members.html create mode 100644 classmimpc_1_1simulation_1_1Simulation.html create mode 100644 classmimpc_1_1simulation_1_1VizForces-members.html create mode 100644 classmimpc_1_1simulation_1_1VizForces.html create mode 100644 classmimpc_1_1simulation_1_1VizForces__coll__graph.map create mode 100644 classmimpc_1_1simulation_1_1VizForces__coll__graph.md5 create mode 100644 classmimpc_1_1simulation_1_1VizForces__coll__graph.png create mode 100644 classmimpc_1_1simulation_1_1VizForces__inherit__graph.map create mode 100644 classmimpc_1_1simulation_1_1VizForces__inherit__graph.md5 create mode 100644 classmimpc_1_1simulation_1_1VizForces__inherit__graph.png create mode 100644 classmimpc_1_1systems_1_1REACSA-members.html create mode 100644 classmimpc_1_1systems_1_1REACSA.html create mode 100644 classmimpc_1_1systems_1_1REACSA__coll__graph.map create mode 100644 classmimpc_1_1systems_1_1REACSA__coll__graph.md5 create mode 100644 classmimpc_1_1systems_1_1REACSA__coll__graph.png create mode 100644 classmimpc_1_1systems_1_1REACSA__inherit__graph.map create mode 100644 classmimpc_1_1systems_1_1REACSA__inherit__graph.md5 create mode 100644 classmimpc_1_1systems_1_1REACSA__inherit__graph.png create mode 100644 closed.png create mode 100644 dir_3c04bc290434a2bfff240c0777e37105.html create mode 100644 dir_3c04bc290434a2bfff240c0777e37105_dep.map create mode 100644 dir_3c04bc290434a2bfff240c0777e37105_dep.md5 create mode 100644 dir_3c04bc290434a2bfff240c0777e37105_dep.png create mode 100644 dir_7a55efb13937f868f8144ef9f510f0c6.html create mode 100644 dir_7a55efb13937f868f8144ef9f510f0c6_dep.map create mode 100644 dir_7a55efb13937f868f8144ef9f510f0c6_dep.md5 create mode 100644 dir_7a55efb13937f868f8144ef9f510f0c6_dep.png create mode 100644 dir_949292de90bec6ca0ef87cb838b26113.html create mode 100644 dir_949292de90bec6ca0ef87cb838b26113_dep.map create mode 100644 dir_949292de90bec6ca0ef87cb838b26113_dep.md5 create mode 100644 dir_949292de90bec6ca0ef87cb838b26113_dep.png create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doc.png create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 files.html create mode 100644 folderclosed.png create mode 100644 folderopen.png create mode 100644 functions.html create mode 100644 functions_func.html create mode 100644 functions_vars.html create mode 100644 graph_legend.html create mode 100644 graph_legend.md5 create mode 100644 graph_legend.png create mode 100644 hierarchy.html create mode 100644 index.html create mode 100644 inherit_graph_0.map create mode 100644 inherit_graph_0.md5 create mode 100644 inherit_graph_0.png create mode 100644 inherit_graph_1.map create mode 100644 inherit_graph_1.md5 create mode 100644 inherit_graph_1.png create mode 100644 inherit_graph_2.map create mode 100644 inherit_graph_2.md5 create mode 100644 inherit_graph_2.png create mode 100644 inherit_graph_3.map create mode 100644 inherit_graph_3.md5 create mode 100644 inherit_graph_3.png create mode 100644 inherit_graph_4.map create mode 100644 inherit_graph_4.md5 create mode 100644 inherit_graph_4.png create mode 100644 inherits.html create mode 100644 jquery.js create mode 100644 md_INSTALL.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 search/all_0.html create mode 100644 search/all_0.js create mode 100644 search/all_1.html create mode 100644 search/all_1.js create mode 100644 search/all_2.html create mode 100644 search/all_2.js create mode 100644 search/all_3.html create mode 100644 search/all_3.js create mode 100644 search/all_4.html create mode 100644 search/all_4.js create mode 100644 search/all_5.html create mode 100644 search/all_5.js create mode 100644 search/all_6.html create mode 100644 search/all_6.js create mode 100644 search/all_7.html create mode 100644 search/all_7.js create mode 100644 search/all_8.html create mode 100644 search/all_8.js create mode 100644 search/all_9.html create mode 100644 search/all_9.js create mode 100644 search/all_a.html create mode 100644 search/all_a.js create mode 100644 search/all_b.html create mode 100644 search/all_b.js create mode 100644 search/all_c.html create mode 100644 search/all_c.js create mode 100644 search/all_d.html create mode 100644 search/all_d.js create mode 100644 search/all_e.html create mode 100644 search/all_e.js create mode 100644 search/all_f.html create mode 100644 search/all_f.js create mode 100644 search/classes_0.html create mode 100644 search/classes_0.js create mode 100644 search/classes_1.html create mode 100644 search/classes_1.js create mode 100644 search/classes_2.html create mode 100644 search/classes_2.js create mode 100644 search/classes_3.html create mode 100644 search/classes_3.js create mode 100644 search/close.svg create mode 100644 search/enums_0.html create mode 100644 search/enums_0.js create mode 100644 search/enums_1.html create mode 100644 search/enums_1.js create mode 100644 search/enums_2.html create mode 100644 search/enums_2.js create mode 100644 search/enumvalues_0.html create mode 100644 search/enumvalues_0.js create mode 100644 search/enumvalues_1.html create mode 100644 search/enumvalues_1.js create mode 100644 search/enumvalues_2.html create mode 100644 search/enumvalues_2.js create mode 100644 search/enumvalues_3.html create mode 100644 search/enumvalues_3.js create mode 100644 search/enumvalues_4.html create mode 100644 search/enumvalues_4.js create mode 100644 search/enumvalues_5.html create mode 100644 search/enumvalues_5.js create mode 100644 search/enumvalues_6.html create mode 100644 search/enumvalues_6.js create mode 100644 search/files_0.html create mode 100644 search/files_0.js create mode 100644 search/functions_0.html create mode 100644 search/functions_0.js create mode 100644 search/functions_1.html create mode 100644 search/functions_1.js create mode 100644 search/functions_2.html create mode 100644 search/functions_2.js create mode 100644 search/functions_3.html create mode 100644 search/functions_3.js create mode 100644 search/functions_4.html create mode 100644 search/functions_4.js create mode 100644 search/functions_5.html create mode 100644 search/functions_5.js create mode 100644 search/mag_sel.svg create mode 100644 search/nomatches.html create mode 100644 search/pages_0.html create mode 100644 search/pages_0.js create mode 100644 search/pages_1.html create mode 100644 search/pages_1.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/searchdata.js create mode 100644 search/variables_0.html create mode 100644 search/variables_0.js create mode 100644 splitbar.png create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/MPCLeafSystem_8hpp_source.html b/MPCLeafSystem_8hpp_source.html new file mode 100644 index 0000000..3b552b4 --- /dev/null +++ b/MPCLeafSystem_8hpp_source.html @@ -0,0 +1,123 @@ + + + + + + + +MIMPC++: include/sim/MPCLeafSystem.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
MPCLeafSystem.hpp
+
+
+
1 #pragma once
+
2 
+
3 #include "drake/systems/framework/leaf_system.h"
+
4 #include "MPC.hpp"
+
5 #include "System.hpp"
+
6 
+
7 namespace mimpc::simulation {
+
8  template<class MPCType> requires std::derived_from<MPCType, MPC<typename MPCType::SYSTEM_TYPE, typename MPCType::SOLVER_TYPE>>
+
9  class MPCLeafSystem : public drake::systems::LeafSystem<double> {
+
10  public:
+
11 
+
12  MPCLeafSystem(MPCType &reacsaSolver, double control_dt,
+
13  const MPCType::SYSTEM_TYPE::StateVec &state_constraints_lb,
+
14  const MPCType::SYSTEM_TYPE::StateVec &state_constraints_ub);
+
15 
+
16  ~MPCLeafSystem() override;
+
17 
+
18  private:
+
19  MPCType &reacsa_solver_;
+
20  double control_dt_;
+
21  MPCType::SYSTEM_TYPE::StateVec state_constraints_lb_;
+
22  MPCType::SYSTEM_TYPE::StateVec state_constraints_ub_;
+
23 
+
24  drake::systems::InputPort<double> *plant_out_port_;
+
25  drake::systems::OutputPort<double> *mpc_time_port_;
+
26  drake::systems::OutputPort<double> *control_out_port_;
+
27  drake::systems::DiscreteStateIndex control_out_state_;
+
28  drake::systems::DiscreteStateIndex mpc_time_out_state_;
+
29 
+
30  drake::systems::EventStatus discreteUpdate(const drake::systems::Context<double> &context,
+
31  drake::systems::DiscreteValues<double> *discrete_state) const;
+
32 
+
33  };
+
34 }
+
35 #include "MPCLeafSystem.tpp"
+
Abstract class to represent system dynamics.
+
Definition: MPCLeafSystem.hpp:9
+
+ + + + diff --git a/MPC_8hpp_source.html b/MPC_8hpp_source.html new file mode 100644 index 0000000..1c4a329 --- /dev/null +++ b/MPC_8hpp_source.html @@ -0,0 +1,123 @@ + + + + + + + +MIMPC++: include/MPC.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
MPC.hpp
+
+
+
1 #pragma once
+
2 
+
3 #include "Solver.hpp"
+
4 #include <type_traits>
+
5 #include <concepts>
+
6 
+
7 namespace mimpc {
+
14  template<class SystemType, class SolverType> requires
+
15  std::derived_from<SystemType, System<SystemType::NUM_STATES, SystemType::NUM_CONT_INPUTS, SystemType::NUM_BIN_INPUTS>> &&
+
16  std::derived_from<SolverType, Solver<SystemType, SolverType::PRED_STEPS, SolverType::MIN_STEPS_ON, SolverType::MIN_STEPS_OFF, SolverType::MAX_STEPS_ON, SolverType::NUM_STEPS_SOLVER_DELAY, SolverType::INTEGRATION_SCHEME>>
+
17  class MPC {
+
18  public:
+
19  using SYSTEM_TYPE = SystemType;
+
20  using SOLVER_TYPE = SolverType;
+
21  private:
+
22  SolverType &solver_;
+
23  Eigen::Matrix<double, SystemType::NUM_STATES, SolverType::PRED_STEPS + 1, Eigen::RowMajor> last_x_;
+
24  Eigen::Matrix<double, SystemType::NUM_CONT_INPUTS +
+
25  SystemType::NUM_BIN_INPUTS, SolverType::PRED_STEPS, Eigen::RowMajor> last_u_;
+
26  Eigen::Matrix<double,
+
27  SystemType::NUM_CONT_INPUTS + SystemType::NUM_BIN_INPUTS,
+
28  SolverType::history_depth + SolverType::NUM_STEPS_SOLVER_DELAY> history_;
+
29  public:
+
35  explicit MPC(SolverType &solver);
+
36 
+
46  SOLVER_RETURN control(const SystemType::StateVec &state, SystemType::InputVec &input, std::string &stats);
+
47 
+
48  virtual ~MPC() = default;
+
49  };
+
50 };
+
51 
+
52 #include "MPC.tpp"
+
Abstract class that represents any solver interface and provides a low-lever mpc solver interface.
+
SOLVER_RETURN
Definition: Solver.hpp:18
+
Definition: MPC.hpp:17
+
SOLVER_RETURN control(const SystemType::StateVec &state, SystemType::InputVec &input, std::string &stats)
+
MPC(SolverType &solver)
+
+ + + + diff --git a/REACSA_8hpp_source.html b/REACSA_8hpp_source.html new file mode 100644 index 0000000..e3c59e5 --- /dev/null +++ b/REACSA_8hpp_source.html @@ -0,0 +1,141 @@ + + + + + + + +MIMPC++: include/systems/REACSA.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
REACSA.hpp
+
+
+
1 #pragma once
+
2 
+
3 #include "../System.hpp"
+
4 #include "REACSA_constants.h"
+
5 namespace mimpc::systems {
+
6  using SystemSized = System<7, 1, 8>;
+
7 
+
8  class REACSA : public SystemSized {
+
9  private:
+
10  const double system_m_;
+
11  const double body_Izz_;
+
12  const double rw_Izz_;
+
13  const double r_;
+
14  const double f_nom;
+
15 
+
16  SystemSized::AMatrix A_;
+
17  SystemSized::BMatrix B_;
+
18  public:
+
19 
+
20  REACSA(double systemM, double bodyIzz, double rwIzz, double r, double fNom);
+
21 
+
22  REACSA();
+
23 
+
24  virtual ~REACSA() = default;
+
25 
+
26  SystemSized::AMatrix getA(const SystemSized::StateVec &state) const override;
+
27 
+
28  SystemSized::BMatrix getB(const SystemSized::StateVec &state) const override;
+
29 
+
30  void updateA(const SystemSized::StateVec &state,
+
31  std::function<void(unsigned int, unsigned int, double)> &changeAval) const override;
+
32 
+
33  void updateB(const SystemSized::StateVec &state,
+
34  std::function<void(unsigned int, unsigned int, double)> &changeBval) const override;
+
35 
+
36  static double get_angular_velocity_bound(double rw_speed_final_bound);
+
37 
+
38  static void get_limitcycle_v_bounds(unsigned int num_break_thrusts, double &v_bound, double &x_bound);
+
39 
+
40  static double
+
41  get_angular_velocity_bound(double body_Izz, double rw_Izz, double rw_speed_max, double rw_speed_final_bound);
+
42 
+
43  static void
+
44  get_limitcycle_v_bounds(unsigned int num_break_thrusts, double system_m, double f_nom, double t_min_on,
+
45  double t_min_off, double t_max_on, double &v_bound, double &x_bound);
+
46 
+
47  };
+
48 }
+
49 
+
Definition: System.hpp:32
+
Definition: REACSA.hpp:8
+
void updateB(const SystemSized::StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeBval) const override
+
SystemSized::BMatrix getB(const SystemSized::StateVec &state) const override
+
SystemSized::AMatrix getA(const SystemSized::StateVec &state) const override
+
void updateA(const SystemSized::StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeAval) const override
+
+ + + + diff --git a/SCIPSolver_8hpp_source.html b/SCIPSolver_8hpp_source.html new file mode 100644 index 0000000..1bc97d8 --- /dev/null +++ b/SCIPSolver_8hpp_source.html @@ -0,0 +1,202 @@ + + + + + + + +MIMPC++: include/solvers/SCIPSolver.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
SCIPSolver.hpp
+
+
+
1 #pragma once
+
2 
+
3 #include <scip/scip.h>
+
4 #include <scip/scipdefplugins.h>
+
5 #include <array>
+
6 #include <type_traits>
+
7 #include <concepts>
+
8 
+
9 #include "../Solver.hpp"
+
10 
+
11 namespace mimpc {
+
12 
+
16  template<class SystemType, int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme> requires
+
17  std::derived_from<SystemType, System<SystemType::NUM_STATES, SystemType::NUM_CONT_INPUTS, SystemType::NUM_BIN_INPUTS>>
+
18  class SCIPSolver
+
19  : public Solver<SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme> {
+
20  public:
+ +
22  private:
+
23  SCIP *scip_problem_;
+
24  std::array<std::array<SCIP_VAR *, N + 1>, SystemType::NUM_STATES> scip_state_vars_;
+
25  std::array<std::array<SCIP_VAR *, N>, SystemType::NUM_INPUTS> scip_input_vars_;
+
26  std::array<std::array<SCIP_CONS *, SystemType::NUM_STATES>, N> scip_dynamic_const_;
+
27  std::array<std::array<SCIP_CONS *,
+ +
29  max_steps_on>, SystemType::NUM_BIN_INPUTS> scip_pattern_timing_max_const_;
+
30  std::array<std::array<SCIP_CONS *, 1 + N - 2>, SystemType::NUM_BIN_INPUTS> scip_pattern_timing_min_const_;
+
31 
+
32  std::array<std::array<SCIP_VAR *, N + 1>, SystemType::NUM_STATES> scip_T_state_;
+
33  std::array<std::array<SCIP_VAR *, N>, SystemType::NUM_INPUTS> scip_T_input_;
+
34  std::array<std::array<SCIP_CONS *, N + 1>, SystemType::NUM_STATES> scip_Tconsp_state_;
+
35  std::array<std::array<SCIP_CONS *, N + 1>, SystemType::NUM_STATES> scip_Tconsm_state_;
+
36  std::array<std::array<SCIP_CONS *, N>, SystemType::NUM_INPUTS> scip_Tconsp_input_;
+
37  std::array<std::array<SCIP_CONS *, N>, SystemType::NUM_INPUTS> scip_Tconsm_input_;
+
38 
+
39 
+
40  std::array<std::array<SCIP_VAR *, N + 1>, SystemType::NUM_STATES> scip_QuadCostErr_states_;
+
41  std::array<std::array<SCIP_CONS *, N + 1>, SystemType::NUM_STATES> scip_QuadCostErrCons_states_;
+
42 
+
43  SCIP_CONS *scip_QuadCostCons_;
+
44  SCIP_Var *scip_QuadCostSum_;
+
45 
+
46  COST_TYPE cost_type_;
+
47  bool compensate_controller_delay_;
+
48 
+
49  const SystemType &system_;
+
50  double system_dt_;
+
51  Eigen::Vector<double, SystemType::NUM_STATES> state_;
+
52  Eigen::Vector<double, SystemType::NUM_STATES> state_cost_weights_;
+
53  Eigen::Vector<double, SystemType::NUM_STATES> final_state_cost_weights_;
+
54  Eigen::Vector<double, SystemType::NUM_INPUTS> input_cost_weights_;
+
55  Eigen::Vector<double, SystemType::NUM_STATES> set_point_;
+
56 
+
57  void setCost(COST_TYPE cost_type) override;
+
58 
+
59  public:
+
60 
+
71  SCIPSolver(const typename SystemType::StateVec &state_weights,
+
72  const typename SystemType::StateVec &final_weights,
+
73  const typename SystemType::InputVec &input_weights, const typename SystemType::StateVec &set_point,
+
74  COST_TYPE cost_type,
+
75  const SystemType &system, double system_dt);
+
76 
+
77  virtual ~SCIPSolver();
+
78 
+
79  void addInputConstraintOnIndex(int index, double lb, double ub) override;
+
80 
+
81  void addStateConstraintOnIndex(int index, double lb, double ub) override;
+
82 
+
83  void addInputConstraintOnStep(int step, const typename SystemType::InputVec &lb,
+
84  const typename SystemType::InputVec &ub) override;
+
85 
+
86  void addStateConstraintOnStep(int step, const typename SystemType::StateVec &lb,
+
87  const typename SystemType::StateVec &ub) override;
+
88 
+
89  void setFinalWeights(const typename SystemType::StateVec &final_weights) override;
+
90 
+
91  void setStateWeights(const typename SystemType::StateVec &state_weights) override;
+
92 
+
93  void setInputWeights(const typename SystemType::InputVec &state_weights) override;
+
94 
+
95  void setSetPoint(const typename SystemType::StateVec &set_point) override;
+
96 
+
97  void setState(const typename SystemType::StateVec &state) override;
+
98 
+
99  void setInputHistory(
+
100  const typename Eigen::Matrix<double, SystemType::NUM_INPUTS, SolverBase::history_depth> &bin_input_hist) override;
+
101 
+
102  void setNextInputs(const typename Eigen::Matrix<double,
+
103  SystemType::NUM_INPUTS, num_steps_solver_delay> &next_inputs) override;
+
104 
+
105  void setSolverTimeLimit(double max_seconds) override;
+
106 
+ +
108  solve(const typename Eigen::Matrix<double, SystemType::NUM_INPUTS, N, Eigen::RowMajor> &last_open_loop_input,
+
109  const typename Eigen::Matrix<double, SystemType::NUM_STATES,
+
110  N + 1, Eigen::RowMajor> &last_open_loop_state,
+
111  typename Eigen::Matrix<double, SystemType::NUM_INPUTS, N, Eigen::RowMajor> &open_loop_input,
+
112  typename Eigen::Matrix<double, SystemType::NUM_STATES,
+
113  N + 1, Eigen::RowMajor> &open_loop_state) const override;
+
114 
+
115  unsigned int getStepsToCompensateControllerDelay() override;
+
116  };
+
117 };
+
118 
+
119 #include "SCIPSolver.tpp"
+
SOLVER_RETURN
Definition: Solver.hpp:18
+
COST_TYPE
Definition: Solver.hpp:40
+
Definition: SCIPSolver.hpp:19
+
void setSolverTimeLimit(double max_seconds) override
+
void addStateConstraintOnIndex(int index, double lb, double ub) override
+
unsigned int getStepsToCompensateControllerDelay() override
+
void addInputConstraintOnIndex(int index, double lb, double ub) override
+
SCIPSolver(const typename SystemType::StateVec &state_weights, const typename SystemType::StateVec &final_weights, const typename SystemType::InputVec &input_weights, const typename SystemType::StateVec &set_point, COST_TYPE cost_type, const SystemType &system, double system_dt)
+
Definition: Solver.hpp:83
+
static constexpr int history_depth
Definition: Solver.hpp:96
+
+ + + + diff --git a/Simulation_8hpp_source.html b/Simulation_8hpp_source.html new file mode 100644 index 0000000..546e49a --- /dev/null +++ b/Simulation_8hpp_source.html @@ -0,0 +1,183 @@ + + + + + + + +MIMPC++: include/sim/Simulation.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Simulation.hpp
+
+
+
1 //
+
2 // Created by fstark on 06.08.23.
+
3 //
+
4 
+
5 #pragma once
+
6 
+
7 #include <cnpy.h>
+
8 
+
9 #include <type_traits>
+
10 #include <concepts>
+
11 #include "System.hpp"
+
12 #include "MPC.hpp"
+
13 
+
14 #include "drake/systems/framework/diagram_builder.h"
+
15 #include "drake/common/drake_assert.h"
+
16 #include "drake/geometry/scene_graph.h"
+
17 #include "drake/multibody/parsing/parser.h"
+
18 #include "drake/multibody/plant/multibody_plant.h"
+
19 #include "drake/multibody/plant/externally_applied_spatial_force.h"
+
20 #include "drake/multibody/tree/prismatic_joint.h"
+
21 #include "drake/multibody/tree/revolute_joint.h"
+
22 #include "drake/multibody/plant/propeller.h"
+
23 #include "drake/multibody/plant/externally_applied_spatial_force_multiplexer.h"
+
24 #include "drake/systems/analysis/simulator.h"
+
25 #include "drake/systems/controllers/pid_controller.h"
+
26 #include "drake/systems/primitives/constant_vector_source.h"
+
27 #include "drake/systems/primitives/demultiplexer.h"
+
28 #include "drake/systems/primitives/matrix_gain.h"
+
29 #include "drake/systems/framework/diagram_builder.h"
+
30 #include "drake/visualization/visualization_config_functions.h"
+
31 #include "drake/systems/primitives/discrete_time_delay.h"
+
32 #include "drake/systems/primitives/vector_log_sink.h"
+
33 #include "MPCLeafSystem.hpp"
+
34 #include "VizForces.hpp"
+
35 
+
36 namespace mimpc::simulation {
+
37  template<class MPCType>
+
38  class Simulation {
+
39  using StateVec = MPCType::SYSTEM_TYPE::StateVec;
+
40  private:
+
41  MPCType::SYSTEM_TYPE::StateVec init_state_;
+
42  MPCType::SYSTEM_TYPE::StateVec target_state_;
+
43  MPCType::SYSTEM_TYPE::StateVec target_threshold_;
+
44 
+
45  MPCType::SYSTEM_TYPE::StateVec state_constraints_lb_;
+
46  MPCType::SYSTEM_TYPE::StateVec state_constraints_ub_;
+
47 
+
48  MPCType &mpc_;
+
49 
+
50  // drake
+
51  drake::systems::DiagramBuilder<double> *builder_;
+
52  drake::multibody::MultibodyPlant<double> *plant_;
+
53  drake::geometry::SceneGraph<double> *scene_graph_;
+
54 
+
55  drake::multibody::ExternallyAppliedSpatialForceMultiplexer<double> *forces_mux_;
+
56  drake::systems::Demultiplexer<double> *input_demux_;
+
57  drake::systems::DiscreteTimeDelay<double> *controller_delay_;
+
58 
+
59  drake::systems::MatrixGain<double> *state_output_matrix_;
+
60  MPCLeafSystem<MPCType> *mpc_leaf_system_;
+
61 
+
62  std::unique_ptr<drake::systems::Diagram<double>> diagram_;
+
63 
+
64 
+
65  // viz
+
66  std::shared_ptr<drake::geometry::Meshcat> meshcat_;
+
67  VizForces *forces_viz_;
+
68 
+
69  // logger
+
70  drake::systems::VectorLogSink<double> *state_logger_;
+
71  drake::systems::VectorLogSink<double> *input_logger_;
+
72 
+
73  drake::systems::Simulator<double> *simulator_;
+
74 
+
75  // TODO: check the coordinates here!
+
76  Eigen::Matrix<double, 7, 8> matrix_;
+
77 
+
78 
+
79  public:
+
80  Simulation(double delay_to_simulate, const std::string &plant_urdf_file, MPCType &mpc,
+
81  const StateVec &initState, const StateVec &targetState,
+
82  const StateVec &targetThreshold, const StateVec &stateConstraintsLb,
+
83  const StateVec &stateConstraintsUb, bool withViz, double binary_force);
+
84 
+
85  bool simulateToTarget(float time_out_seconds);
+
86 
+
87  int simulate(float for_seconds);
+
88 
+
89  void saveData(const std::string &filename);
+
90  };
+
91 };
+
92 
+
93 #include "Simulation.tpp"
+
Abstract class to represent system dynamics.
+
Definition: MPCLeafSystem.hpp:9
+
Definition: Simulation.hpp:38
+
Definition: VizForces.hpp:21
+
+ + + + diff --git a/Solver_8hpp.html b/Solver_8hpp.html new file mode 100644 index 0000000..8e78aba --- /dev/null +++ b/Solver_8hpp.html @@ -0,0 +1,212 @@ + + + + + + + +MIMPC++: include/Solver.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Solver.hpp File Reference
+
+
+ +

Abstract class that represents any solver interface and provides a low-lever mpc solver interface. +More...

+
#include <eigen3/Eigen/Dense>
+#include "System.hpp"
+
+Include dependency graph for Solver.hpp:
+
+
+ + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
 
+ + + + + + + +

+Enumerations

enum  mimpc::SOLVER_RETURN { mimpc::OPTIMAL = 1 +, mimpc::NO_SOLUTION = 0 +, mimpc::TIME_LIMIT_WITH_SOLUTION = 2 +, mimpc::USER_INTERRUPT = -10 + }
 
enum  mimpc::COST_TYPE { mimpc::L1Linear = 0 +, mimpc::L2Quadratic = 1 + }
 
enum  mimpc::INTEGRATION_SCHEME { mimpc::FORWARD_EULER = 0 +, mimpc::BACKWARD_EULER = 1 + }
 
+

Detailed Description

+

Abstract class that represents any solver interface and provides a low-lever mpc solver interface.

+
Author
Franek Stark Contact: frane.nosp@m.k.st.nosp@m.ark@d.nosp@m.fki..nosp@m.de
+

Enumeration Type Documentation

+ +

◆ COST_TYPE

+ +
+
+ + + + +
enum mimpc::COST_TYPE
+
+

Types of how the system state and input error is measured

+ + + +
Enumerator
L1Linear 

Linear cost term representing the L1 Norm (absolute distance)

+
L2Quadratic 

Quadratic cost term representing the L2 Norm (euclidean distance)

+
+ +
+
+ +

◆ INTEGRATION_SCHEME

+ +
+
+ + + + +
enum mimpc::INTEGRATION_SCHEME
+
+

Ways of how the system dynamics are discretized

+ + + +
Enumerator
FORWARD_EULER 

forward (explicit) euler discretization

+
BACKWARD_EULER 

backward (implicit) euler discretization

+
+ +
+
+ +

◆ SOLVER_RETURN

+ +
+
+ + + + +
enum mimpc::SOLVER_RETURN
+
+

Solver return code definitions

+ + + + + +
Enumerator
OPTIMAL 

Optimal solution was found (within time solver limit)

+
NO_SOLUTION 

No solution was found (within time solver limit)

+
TIME_LIMIT_WITH_SOLUTION 

Suboptimal/feasible solution was found within time solver limit

+
USER_INTERRUPT 

Solver was interrupted by user (i.e. by pressing CTRL+C while solver was running)

+
+ +
+
+
+ + + + diff --git a/Solver_8hpp__dep__incl.map b/Solver_8hpp__dep__incl.map new file mode 100644 index 0000000..9904536 --- /dev/null +++ b/Solver_8hpp__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Solver_8hpp__dep__incl.md5 b/Solver_8hpp__dep__incl.md5 new file mode 100644 index 0000000..8d25cca --- /dev/null +++ b/Solver_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +0674fe81946ffc3f69c090068e888328 \ No newline at end of file diff --git a/Solver_8hpp__dep__incl.png b/Solver_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8c9a68644a6f58c504f9df8e0b65f2c616a8d5cb GIT binary patch literal 15688 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 F{{V*P^e+Ga literal 0 HcmV?d00001 diff --git a/Solver_8hpp__incl.map b/Solver_8hpp__incl.map new file mode 100644 index 0000000..6cca97e --- /dev/null +++ b/Solver_8hpp__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Solver_8hpp__incl.md5 b/Solver_8hpp__incl.md5 new file mode 100644 index 0000000..fda7377 --- /dev/null +++ b/Solver_8hpp__incl.md5 @@ -0,0 +1 @@ +a979d8f5618be2987660478c41b1587c \ No newline at end of file diff --git a/Solver_8hpp__incl.png b/Solver_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..91a4c57bf1786ed9e38407e42d09c6272591237a GIT binary patch literal 8419 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 Fe*i#?Scd=r literal 0 HcmV?d00001 diff --git a/Solver_8hpp_source.html b/Solver_8hpp_source.html new file mode 100644 index 0000000..2ab035b --- /dev/null +++ b/Solver_8hpp_source.html @@ -0,0 +1,195 @@ + + + + + + + +MIMPC++: include/Solver.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Solver.hpp
+
+
+Go to the documentation of this file.
1 
+
9 #pragma once
+
10 
+
11 #include <eigen3/Eigen/Dense>
+
12 #include "System.hpp"
+
13 
+
14 namespace mimpc {
+ +
22  OPTIMAL = 1,
+ + +
34  USER_INTERRUPT = -10
+
35  };
+
36 
+
40  enum COST_TYPE {
+
44  L1Linear = 0,
+
48  L2Quadratic = 1
+
49  };
+
50 
+ + +
62  BACKWARD_EULER = 1
+
63  };
+
64 
+
81  template<class SystemType, int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme> requires
+
82  std::derived_from<SystemType, System<SystemType::NUM_STATES, SystemType::NUM_CONT_INPUTS, SystemType::NUM_BIN_INPUTS>>
+
83  class Solver {
+
84  public:
+
85  using SYSTEM_TYPE = SystemType;
+
86  static constexpr auto PRED_STEPS = N;
+
87  static constexpr auto MIN_STEPS_ON = min_steps_on;
+
88  static constexpr auto MIN_STEPS_OFF = min_steps_off;
+
89  static constexpr auto MAX_STEPS_ON = max_steps_on;
+
90  static constexpr auto NUM_STEPS_SOLVER_DELAY = num_steps_solver_delay;
+
91  static constexpr auto INTEGRATION_SCHEME = integration_scheme;
+
92 
+
96  static constexpr int history_depth = std::max(
+
97  {0, max_steps_on - num_steps_solver_delay, min_steps_off - num_steps_solver_delay,
+
98  min_steps_on - num_steps_solver_delay}); //retunrs 0 or biggest of thoose
+
99  virtual ~Solver() = default;
+
100 
+
108  virtual void addInputConstraintOnIndex(int index, double lb, double ub) = 0;
+
109 
+
117  virtual void addStateConstraintOnIndex(int index, double lb, double ub) = 0;
+
118 
+
126  virtual void
+
127  addInputConstraintOnStep(int step, const SystemType::InputVec &lb, const SystemType::InputVec &ub) = 0;
+
128 
+
136  virtual void
+
137  addStateConstraintOnStep(int step, const SystemType::StateVec &lb, const SystemType::StateVec &ub) = 0;
+
138 
+
144  virtual void setFinalWeights(const SystemType::StateVec &final_weights) = 0;
+
145 
+
151  virtual void setStateWeights(const SystemType::StateVec &state_weights) = 0;
+
152 
+
158  virtual void setInputWeights(const SystemType::InputVec &state_weights) = 0;
+
159 
+
165  virtual void setCost(COST_TYPE cost_type) = 0;
+
166 
+
173  virtual void setSetPoint(const SystemType::StateVec &set_point) = 0;
+
174 
+
180  virtual void setState(const SystemType::StateVec &state) = 0;
+
181 
+
188  virtual void setInputHistory(
+
189  const Eigen::Matrix<double, SystemType::NUM_INPUTS, history_depth> &bin_input_hist) = 0;
+
190 
+
196  virtual void
+
197  setNextInputs(const Eigen::Matrix<double, SystemType::NUM_INPUTS, num_steps_solver_delay> &next_inputs) = 0;
+
198 
+
203  virtual void setSolverTimeLimit(double max_seconds) = 0;
+
204 
+
209  virtual unsigned int getStepsToCompensateControllerDelay() = 0;
+
210 
+
221  virtual SOLVER_RETURN
+
222  solve(const Eigen::Matrix<double, SystemType::NUM_INPUTS, N, Eigen::RowMajor> &last_open_loop_input,
+
223  const Eigen::Matrix<double, SystemType::NUM_STATES, N + 1, Eigen::RowMajor> &last_open_loop_state,
+
224  Eigen::Matrix<double, SystemType::NUM_INPUTS, N, Eigen::RowMajor> &open_loop_input,
+
225  Eigen::Matrix<double, SystemType::NUM_STATES, N + 1, Eigen::RowMajor> &open_loop_state) const = 0;
+
226  };
+
227 };
+
INTEGRATION_SCHEME
Definition: Solver.hpp:54
+
@ BACKWARD_EULER
Definition: Solver.hpp:62
+
@ FORWARD_EULER
Definition: Solver.hpp:58
+
SOLVER_RETURN
Definition: Solver.hpp:18
+
@ TIME_LIMIT_WITH_SOLUTION
Definition: Solver.hpp:30
+
@ NO_SOLUTION
Definition: Solver.hpp:26
+
@ USER_INTERRUPT
Definition: Solver.hpp:34
+
@ OPTIMAL
Definition: Solver.hpp:22
+
COST_TYPE
Definition: Solver.hpp:40
+
@ L2Quadratic
Definition: Solver.hpp:48
+
@ L1Linear
Definition: Solver.hpp:44
+
Abstract class to represent system dynamics.
+
Definition: Solver.hpp:83
+
virtual void addInputConstraintOnIndex(int index, double lb, double ub)=0
+
virtual void addInputConstraintOnStep(int step, const SystemType::InputVec &lb, const SystemType::InputVec &ub)=0
+
static constexpr int history_depth
Definition: Solver.hpp:96
+
virtual void addStateConstraintOnStep(int step, const SystemType::StateVec &lb, const SystemType::StateVec &ub)=0
+
virtual void setState(const SystemType::StateVec &state)=0
+
virtual unsigned int getStepsToCompensateControllerDelay()=0
+
virtual void setInputWeights(const SystemType::InputVec &state_weights)=0
+
virtual void setStateWeights(const SystemType::StateVec &state_weights)=0
+
virtual void setFinalWeights(const SystemType::StateVec &final_weights)=0
+
virtual void addStateConstraintOnIndex(int index, double lb, double ub)=0
+
virtual void setCost(COST_TYPE cost_type)=0
+
virtual SOLVER_RETURN solve(const Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const =0
+
virtual void setSolverTimeLimit(double max_seconds)=0
+
virtual void setNextInputs(const Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs)=0
+
virtual void setSetPoint(const SystemType::StateVec &set_point)=0
+
virtual void setInputHistory(const Eigen::Matrix< double, SystemType::NUM_INPUTS, history_depth > &bin_input_hist)=0
+
+ + + + diff --git a/System_8hpp.html b/System_8hpp.html new file mode 100644 index 0000000..4bdfaf8 --- /dev/null +++ b/System_8hpp.html @@ -0,0 +1,126 @@ + + + + + + + +MIMPC++: include/System.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
System.hpp File Reference
+
+
+ +

Abstract class to represent system dynamics. +More...

+
#include <eigen3/Eigen/Dense>
+
+Include dependency graph for System.hpp:
+
+
+ + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
 
+

Detailed Description

+

Abstract class to represent system dynamics.

+
Author
Franek Stark Contact: frane.nosp@m.k.st.nosp@m.ark@d.nosp@m.fki..nosp@m.de
+
+ + + + diff --git a/System_8hpp__dep__incl.map b/System_8hpp__dep__incl.map new file mode 100644 index 0000000..cb6bfd8 --- /dev/null +++ b/System_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/System_8hpp__dep__incl.md5 b/System_8hpp__dep__incl.md5 new file mode 100644 index 0000000..a9f5987 --- /dev/null +++ b/System_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +be154778eb33444bc532bc3a78874de2 \ No newline at end of file diff --git a/System_8hpp__dep__incl.png b/System_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c4add6ee514c00c85b3dc350ad560f4bba5f0d GIT binary patch literal 27547 zcmZ_01yt5s*YbT>+OBOoo^eWuSd z-ZRcP@Ar+(-g^wa?|-Z{*PLrzziaYUR$A;nIsrNYfw(XJM&um=fpiJ~%A(zZKN;Ot z9fbeg(UKGsLEQZNC%HZ=9DyK3h>Hj+*vJ2!bs$yPyg=;QJ?8c*4gc{dvR+nh=1Xc= zfs4iLJJUzA>`E66Gso%W;Ua}CZ}mfkB*f*SBr5WsT(GmOo^)0>RySxFvsmdm@Vf=E z=*^wPzS1Msn>(QAL>5FK3u3jA>?)%o1hJ4y9!Q;IAqzSqQ@EgclJeaO=Yzi`A=7%= zWL{le-Rv~T^SdvBo0AB0^ChX@$wC#c_M$nby1M#@4)BH|t<=JoEvZEvB$(NXo%&tDT0=RO9gl<5YAhleL5Jf&IuLh9GK`+8`VH6tUV zx3{;ZrbaTF{wdtBJpix0t!;mQ-*mQy?MwOtK`d5t=g`CP0#y#ZzW7&GD+mM+FK?Dq z?EXTl@8#v?!)KzW=jY#JVh{)wRaFMfhWMzcv6&ej?T&k9W@ev0Eo^&N)zrYnMkgll z5wh~~ODijn2?=TF={1y;?EX%a#K#kT_%L~PusVEVW@LnM_pSrHjHKkRwy!uG#uKCr z3?Y1xQBk_Ox}p@}G}P3#J99z7v@A?ag3qemZd|3LdLn6*1`>Y#{Hd6)Y_T~;=iqR* zwzk&Q)pdUEXkxN;v^gH~ghjVMkrxF8#rFXTpYv&PaBv^o?;>}6czC$0Yi&47#@pK) zURkxm*x}~d<@4vyMn-u*e*8#E(k!~IB`GO+b$RLNteBXX2#@jV)vF|aH$_FoeKDV+KX^dGZTok+(hOC3 zDv{R-83m=ar3I6S^V_#?0`soBznkF!!YO6us;$J{zh`4){Kj|sijJ-qqD4YN;`Qt0 z^P^1%2Zw}&ghRZki3x@G?_ExJk*-+S*~i-2L^L!S^7Cn5zI;ha`uqCoLPJ9%gqZgh z0)|&uRn_TN6rD^WkDzJ^{z%;S@8=ggjbdVAn;RRZQ{_43<%d5bX_}jx4GavZsHkq= z5#&LP%6}rOD&A)k@FV)ycfPygU+uoSeK& zx3|Xah7XaPmq$ZJ22YKI5Fo|!6G_d^&Q4BFE-WmJjvnvdW6Z`w6n|{KWnyAdehEtw zBJu9syYN8Io~5<4v>>@Et{qoftrFnl`}zCRtCYWi*@TD)tQ5v-BRfrX$U=poIQ01T z4GWQ+mX=mnh#AsJLq&DJBK!Myf={15IeHvoH@MwkBFrr;)*GyJbTTqCAv9JXW?#R4 zjf7xkW^QO`K)8>M!Q`|haNAuUjceYybLU{SU$frvXs7Y!dVg8+mWTT_>N^F6d-v|u znJ)+l3wuRHMU|D6MMWuw*yE2(Uj<>Hqod!wJ2+hg(ZbEeb?5X$iW@aG_0Wl&fKG9o6~(UeGlG~9o_DoB$!)bS0oDdSK7Mvi&idNg^XJdgGc%_qCm(*jA=g(&nlBBgYeKN9??SlxW?C9#XokuP_HX8~Z(`0CiSeFxZ2P`n_R#pek#DbkK zjtep}UeMFi^YYer@}-G|NWXcbZ)#eYn~RQ#Dat`jMfEm@abYA!{xkF0#mNpHgGM?Y zr_IKQurFq0WTcI?we$HQ6(eJDUS5Di1`Kej(l#thSVL|HD{mntU}+i~8^iDi2V<(V zT%H}YwzgVXSq)zFBizS}G=0B(iHMGtfBA?YXl!y)JPj($Gtt1){bh_u2_4y;CVqc- zr1Oi5liKO4i<9|!r}3#Nf`<3SUZNfCg!#^?hbpQzmp)7#FsK%X)0^w~2OyX~3X-QCMeXX?mYn8cl@$cPwrlc`u1JqV69 zem?lGzrTNl@#H&I)x6ZyQma+zhYuejno?f}1QYWTJbhYFP~dWXd8V>yY41PMp{9_+N9g-n0FYm={Szg|+$w`M+pZgH2#%RW} zklbfyXHATa?^Gp}K($h@wQW8-B=h6_JswyvG(3zt#DFIFEhYw^jEoG1pIrn+5bMUh zm)qC|5`xEHT|GTYdin;31Ko2vHKuUmB+&5QcX}1l` z#41VE)zMtacLJY~Pfd9WXVXAoiA{m^j>T}VuZ8PN$}{YY=g%`SFpNe<)Sh9BNr?BF znz~NT#J_5a{?$dhv5{+PEcNiAvzUQIy@qdOXI+F<#@qA}Fd$k16KoU&FI2WV?O& zUcovwac(S2hM$RBKt*0&S8GxC{{1JnJp5W8B1nIme`#R8uCnk~F#Kh{;q`>XbKx=^5>pSI@E)kP(cw`7KQW-+5IZK)oFNd@oZFnme~V({Fy^7Whww`v!`YM7gzP2{#eSD1LOJJF#rCoM)X=-OJyJq%9plNy{kl)U9 zeRI6MKN0u&i{;0U6#V_s2?+DxFDlF8vQx=>4;e|(2$*9IKV;_x5IhX6w%fTnKBg~c zT6J4MobI&ZVUe0nvv>Y7>iB5H#4@e)?%lWx##PwO?x*pG&tjarH5C_f@?u1V z5eVd4*S`g$GbC@~xDKZ)Yeq&q;Riy3jqOKXPEdLAKt;(DGlN%(Z~X9T(1fv+yu_2d zd3Xw+Kd*y*;-^nW`S~69E23_rE_!+;U0=$0zj^-V4cgOJi|l&A*B^g<4wT49;66EB z8$?C(9MJE|Q{s+@bgGWelGQhxdqnwSIV1CNotq}bbCGyf@z$Yt(=9@(GG>pgggr_1 z-9HZLrF3*uyw9U=bUca_O1b~}CO<#H-``8akea*p^YLGtdOq*g1uW#Vt;+RUyM7Ym zlB=KHR7d+Y9-T``{PSZweQa!RWs+Par2CwX^OI9jaO*ECiw6>!wBx^gVI0=>BF$!C zTrX2p!W->p;Nd!d+n7|Aoh>Ujm_nxDLFyMe2=$^PDXC@2f`VeBxtV5p`9rC+qm$Ek zo{}aVZ8_>SHg#lFoND5C7063*k?#XLm+svk)$JuP`;@|Kk&3SL;D;A!AtIdb7a3Zq zjnSXpxOHBFJtsz1g@BNG#&T-g?Z9f=Er*lG#H>z^_R4=Jn3M$E8OyakY;}f2;W41g z%VUIv?dRqaeE!_l+bh-|pTli5W-l%-m!IZEI)@C`g$>)pbkeub(9_eBTPDb2S*!wP zm8ln4U%#{mynXQ0@~H}LY^>%=Kfmyeyns6?sQ{0KR!UkL63!e#_0Osj1?4KAlj66~ zy;xD4+tY~FTsY><)VRTVa; zXJkC1D|ksob^HB~4gZ=z>kkV2}Cl zwom!5cMsRoi;G8xGq3FO4leBWcN%@8qOR@t$OQ!4cbCL|m1sX`Z5f(tnB|Sj3Ab61+Aq<*DPGNBGB;g}eMjXuRf0al)>HXr;e1V3`RTI)GE={KG zyoQ`0JIB1;Zt}0icHP6E`G(P)ocmg12}yD<%lG%sx4ofCEm$mHU6i)9y_F(K^(Nyy z#qjjGP2m!Cx|`yBeK{QPICg7xb7U#UWI8o0{9tJ4*2I9o;J|>P(Z%@Mpe2XtWrtIx z@WO8fG=f_(hp|PuxfZZsv^%`6;&{T()cf63-%O{_M2sq>ygE4zekh~3`aldTCRv*n*T^$qbhibV~_`^(X7B5n>2 zd>cn-sBVG-{jkt8mpXBzlccu?)qPFJ3u7)$%2=4MKd&RsJ&IJ^^SQ@Q0q zqF3YV)kunl63#b#II501Iy3W0tMpfAr|vA5(Q)S;1S|xtzW8tr4aGQ)X>DwTuRDC4 z4<^?N^32K~>&)?OuIz8$^iUsk=;>@lgtg>6Tt1GCY&>zc&}C z-PAYwHD5PbR*Q))h=maV+vF)!%&KDkx@~6{vllOx`JC7I4M)(7pDnyJ-^FX=|2RZK z-!W?=D=uD5qom<_Zv88UY2O&L$aie4Z?a6rF974}>cr8WX_^LxchQ7#{Q-t2snPh{ zo40gHM^M zea}gF&q;Zlw?=YY`XZx}G!0B#p3@p11wM%%3Ul3=o3`0B)u<`AJT~Ud*IvN<_k1ky zd^LLg`_Z)3RYv1=uueV~PiMY;_~c1a67O_}ocisX((=-K-}xq(%t|kD zH$MqUw~5Is9g_k$7GdA14ec)I=%}^Zj<0ln6}O^}pB#+&bEY~gTR}x_=FX>2NcpV` z68~-(1UK}Lioz7@l!rQV?LzYKq2L{-MBaVNL)F77t4#$iUnGm)M9Gus4N@LP`jgP!=DT0NPagcGLdnA1ACy1U)hHmFM|E665FmUeb`qxbd* z%YWb&2YZkIyBVsdxSRPvTqV?ylif8pUR9E$;?&d)x9iC+pC+IDynqeJfF&hcNp9@S zrn#Oz_h4CbqDq~6$-aB1XXchVA6J>3nQ435D}l%!<3tY^_s@s2;I~P9$1~MBFliSs zX=ti2*^e9#6lK5RCowEE<(Tk zet>gd@n2+(ejM7-R2-{B!RR|Zn>;_Cy0`m6sW6?G>rqm8S#)g&@8}3??{^#H{m;F> zKNg;Ow6y;F7A|~C%*3RuU~6x0DY8)gfavsPoWp@M>>qesYHlv-<0g$Bxij-G z?!X={|3ha-kbIr%EY2LyA7=<;R&&PnlftU1vA%5vRMab&B-Epp!@BR0@8e@medFVi z#})*H$F+B(b2r|wUbHrALaMq-)Y6)>ckRu*4>vfL->xgUs=ukN(e9?+7W z&i`jwT)FdBiEK!-=FpJVa3(xn9f}9Yq2C&B`rf^pI{hu!XO14rvf6gMB^P*NVPn&N z9`gVNlkz1!-xJ@ZA~Js1lXI@#_9P7r4OMRZn(_?m`Rmt|!T3xvf}iTk4~gvp#9#tQ41Oyd_BZAt zPJ^3{&I?T6yn=$|Z}xXunwm&iStF`-EUBcqX9k)+*$^C<4b3<5L&zWZ#J-SQK? zAPn+h+>=Pct;Swd-Zd9CZp{+ESs#`mBkRX}YB@OYvCn0^(o7PjQi`ZPEHrdseZ4z> zC`L$Cl^aBuIy?l)Y>j&$DOFNhI+MTFY@Uw@(+(sJ;&zZ^`rL0KSK5yOIvnZTlP%iB$PD(zzrvZ7 zP8+1xY`EMkYP^GrYRAA1df?EIWlszfsF9!&RhrI%a_$!tgo0qaCO>>nO8L7sJ%rRR zNwdn&4@A;FDO!j`>=pJkyPJBmj~}t{@%2qi-jauQ1V4?7iSaWvGd4avIvO1q_!bqV zQKtJA)Q%7#1qFq*ab_JI9ZsTPDT><&Pyx4p{}vz*wYIU@nX8waZ>+AK93NMD`}VDb z#LwpD1&G{#!=oJ4&+J%NH5AXd7%x;}pV80H7y0PKKxTrVMa`KPD<*%-|; zU?r%T?tg!X7Sr%rL1AQin$Wkk-tDGgzW)Y9a1hxz-L5Y|fm^?Mj)nZ8*0#Xcx3fgM zv;4;o&>JbGV$6RxA#re2=H})$G@#u>zkI@;wZ|wHYn70kOqnKnR_}Th`Bg_zk^LpL z>6^E`Bwc-=?DqBbU2W?c8al2Iy*MlZeKj|C<5x6;s)`B>1tle=SlS>KaxAyqcDcc@ zrIpp@=BAgIm$tUHQ=ROG53i`G?z*U{sGuXVi;Bds+90GSC#&K9+1XtnIsXF_UZj3N zN9yaZq8T&^2na5(uI}HzzkYzFtfC_N`t_iGIg@rrPZB>rEF(BmI5hz_NaA&}1!YQH z{A*<7=-P_g}D_k~6+6MrDuhK=X7@%KY@ZC_O1$J~y*sy(jkb%HxaQg27=! z9X>u|9)Eet(?M;qIAn4}QCC#-(ICft{FvGPQ_+Xy>})iI?EClLrea0+jSLM3p8ovx zYj8_}I#Psu`Olx^NC-1_c6M^KcZ!NDTU)%2hx(wvf}~t)w?mEw>ZKl{31Vw-Jat?V zRubrfIo>`#L$^17Xt=msxm+AyT`nA+dnEspVMXWPiiuHja>g{< z-YI^2PGnit=zK;_LE&Tiw{LpdX?-XI&9l6+GKAH>4k-nq7eb8?6`Vsoos*;8VpW#S$U!OFxprMfw zusFbC50M=}$VMcmr>Bn#k8R>1jVgKY7B8@hI!c~9kJJrMO|5Ua40pXT*;1idiHc89 zPtABCN&c0wa$@_>pFabrKt2%eFk6rXZh0hUWUx)7{`~n9(83zZkmTt~bhezTucrQc?oKu{~EG2Rq{1YZe&{&z{{zR5_nn8W`jxCzE3O zhKGjcWM}*N`6YMCYiP`EqE5p=y5tt!a`Wjn=n)gY>E}-~GW^~j|Doj&HyKXSPr4$w zdol_Or8C|QO8#wtZw|<$ZEP4GdieWGNJ?T{^+Q@qelRjJvTN@Qwd=$T<=iDWDCjkb zwHSG5U41>QNX*Ibpc9bPF{&Ba5l=`PJ#E-NT2mlrr@16r*$<7fARbHrGqIzh>v=a&dCn+uJ)| zo|dGfEDU8xT3A@{9z)@%ay+7rmAZx$8bzl%5Tv4_BA+D<$K!cem{4&`O{Uo$J*-yy z)T=FZ1O)|+j5Yyr#>dBVf#mc^LP*Hd%j-5Gxvp+zaBy!hP3-9C2of5Ax%T$<%*;&K z#=%?9&CSg>y1`-MXm78ivQkMw;qSu-#37n+eaJij*m!w(@W-c@egI)TY9hN`NBS3VmxHk-jj zufn3DM0X6P#`_@9fJQw+_ZG~!eTn5*km}UL`$k;cWUAZ%$SlBAm&n*}-w=p_(a{XE zlJatA_)`E;7MyCbvIEP%qG1!EqO3eIHT69%jt~pW955LatUwIpcngAq*Fy{pMJFdA z$_>uwG>T05*`(v+m4PHhJ%?czxC8`T7K&E^=lN98ad#U z`}(Cg#%^_T4;$$UhTiclY~;v&gX{46nBrWy={K{Sy7}_{@7Nt zpW^YWua9`dR$qV3Ys&FM*DVI&0Ki650q$;tVT+Th~84|(#8e?m#;^Jj2yl#&xmMMOyi;t!HhjIAbj zlBK=d)6sd3j)ICH#lG3H4s1mt-e5@q%(}h3 zEk%3Z)5mK(>^g*m4o(It#ZC6xYOO%jDq32o;Xp4~-!?Nt^j4$JL-h81W5Cj$JFa+= zKyvp__SNNXYileE&ObM9l~?^)zNA&AAs&UMbn;;hrKP0-0l#+Ls9-BsRaJG5pBRmR z01q#kxa{MCJrxoXqOPt`PuJCD|8rS-`pZ19J){N`*DwF+ZkLw6oYpzmX`HurnrG!8 zaXBgE2*@Q3S9QBOf{kU8LAh(+djo?(yPe~G2O~mcrVe?{5T}#5j*bRy8$%{SX0RdT z{}ofhi_EC^;?y+X#X*=CX}X!1>9ri$6s4z&JR=_~R5$89tx*+lFE&r1>Ny2TcE?%R z^-}-ty+AnD`g?n`I~iUc7hoci3;P)EZR?%WYdZUdIXygI{O{6O;#F=LE8*iR}I=;;PE!EsiB|;8hnN-03 zIB+>_A)218(P>;&NGN;!m&21MUnynyK+`Gax`(!C$P;!*!gq;9l4SMAFRtnoE9=iw z&!Hg_Lqlfcyx?I4MRp$hZ^9|ENKmy#{`}!#SKx9eUGYM_HZ*+Z^v8w#AwL{$V_8C^ zq>gDdh%Qg&&6LMykOkF(@WNbOTz;+e+C64qk7Lp%;@-SEE|7j3zOM?e6Edi7$7 zZtuNAnOjKw+CIVg`CpPr2Rn2@P4b6%MZVJqPt^yS*ibs}#Yv~jl}c;k1gT%Eh0BnP z#Ls#+{)QGCZi>~dOM5a&D`j+uTSz4MoF@=ZBIF(t z8FXr#)fZ*&-la-Lf1j^iJvdyCdL1COGwZ}+vw_52+bATII67WgO!o$DQDA0Prm>{N zq$99(I4gwLLhE5%-u6anZr+W>`q0nGvZDz#Hp=31p2IUMn~-oZQBiVAy$5m69Inpu z8r?+R4N(X-^NA4*>30R-d54A;U7u0<3Z;PFIo96Z)@Mq-nW^bb8r(iBPGVB-a&C=r zQ9GcZ@a?UXZD+?hfXuRL!yaCzs7CVzZ;d30x3ifUFFIH3xwxtBF}vCY1#LYbX$bLm zyt;HqiI4x{<>gU(@#ij%y~BMXv<;7dtWWlbFBzyej+TEB$5?;Q&ox9wbp4blZZzyc zLFIpeeOJFRVcSpSvP|#nugv-Fo>K$@TYO^FCM<6=9l%OV49BNWPof$4hsPAnZP+ZV z;(C(Aa27dcrZVRzCK_}k)62@f)?bN8-OA1}fGc;0GUhxLZg2kqBYqRVhlF4y*#FZ_ zdF;!I{PX7!Xk_UbD9@jtzD>-xIJYhh9i+EAN$%=WGBN2%68YyhsHC_8@fCI~wYI&j z)b8KEQ(%k7ybdU^D*Y8LKS&|SLyU%og^cp`)-7afPh^7o;*vC}vii!MoM?`YX~9Gm zzq%)#t}mHEQg^$V_VKCxs43&;YoT+{2Sy6mZ{aZ%;=g)Fl!xE-N0Ew(Dc`VjpvFeA zu#ke^wR~i}GOU{pVrzXf@A-CZ==7xc*>ZH+)YN`7gVRU+j%Ket0O?W^Q(r#a zixI{WQNIe2&wAXS)NgbUxU#Aw`no>Y&;D#lETE*M2ChR%`HYF_IOxQO^zlN&NM#;t(XpM`!Y2|}`Z`}V22x`KfL@nt)UZN89zd+T&%ZEI`&qestg-`bXr z$FI`uJxWhkqmGQ5Dk9BBr8k=E?k~EB?pSIx&cmMX->$5!9rp#f*4N8|z&bg+oV8#2 zl^E%7V6^ZvPQkCOC$;x`QHEkvqTy?~j#>M^PhYhfMt*0m*8=I;~ZqHq62Gf==ueOGU zZvwx5D9XyRJl*9N6|GgwNBbJoyUmC55ZQvZuzIMd(3H!b(e-HK2@$hvX2?wcaY!7`2P@Fwf#8LOSqcje*VmcClX7ydf#pCdG5@QLJJtwgp}4At z#~?PgkgIEjGU`49btJmdN?ws!Xw>7U*Bc8nlFG`6tSJaK{OIG^~P0jgR;jRxL z$d9*e91nEINAnsb#J`$OJ^J*y90zmHn-dj}b%*HHzPprZvw4TN#-KhcPvU&|zXHxP zqiMxCu&icm+yUCPg~g8PoRpQ_12}jj^3UscW3$-UT&wHgv=C)cUWJg*K+@+mZ~CC2 zfxW4Gjq2g<>tzkI@m?XlB-k@8x#&H(A`MD!f%5W%LChAx?56K!Xj_K@AcZC&3HX~^meszZu5gp>u z$Md-Ih*^vI*b}Z&xG+~Ab%naQUX5z~RYu9zUiWrKl;j0?+C0LC$@BJ-^YszI7L2w! zyR7D-Sb3{3VsvgvzrCHw%pCKU1Y?h<&t&eE^~*$oCbNkqs;37|Sdadk&|DSL8%j!o z1?mX}9o;K8w^}@gTUuIUGLXAA6v9fFh!!zQuzWSv-A-kRA4gd%wvh)Xbc0K<_{Wdi zn=gwGmrz6cD>|fkeNJJGYgBG$R#g?JJ%evCJ)xv)?SbC!0idacRt;~%bDssrl#RyK?EKUspCs+D+yg)<3$=S zvt@dGsB?`O;SrAv^z~c0&}sJ;jE(-LCzGzP8=S2TlH9%P8Wp8or0(>|v;h>{VTf6X zRaPRR=)<@;ZcO4p5Ny$X8LGv|o73k#TNj?cICGIhQiS=^)!C{8%47WsPgt0<4Ud2; z*l6yR?O#DLRGnc8r~KRNs9&EC4Gj3(JW|euHS!G$8;kVgQ#8#rrZx`d{m5FUZ((5( z;o*CW?U@7w=CAPdlR0VD@g6B?fFWwW0VRI^p{$BZc}Yo-sPL|RpNW?i73VYo#hS1) z20FF2cG)v>=Jj9IoZN)1&u$$Blzq3e-Kya*jVDJ9ZoG=k&qwwa5_T%yrDT3W;X-R* zL<9Im=QDDuu=9hb{v51dTzFHiEe0Z8jg4(3BwVczchs14N<2NEgHn>~Vb(d=G&#nJ zL>zK)L)Osu-x9jDY$Gf!-O}9LH0#3bo6m`C@km zfR4`XdCUY~oE`H=*y8w47gaShNN^4)XlcFp+QxfLO7m&e`cTgCvee|0_!4FY25MYt zZ;yH0i-?K&R#hcyWAkjx<6~w+11|mjevb&)mDan7OJclvvkN(D>2Uq?vo!TJOL`NN z;v&knC*qB%p3Vy`;r9uRt2Z6NKwMfHmK4rcH?*q%f3JDZzT06w^^XpJ=3pT zP9Y*Un^gNLiY}~W(Li^l^LXhuetwvH1^>rl_I@-}85OOB@K_vVo|%#3><~Co5}tGmQ&9IRgVk8vJ~vU$wkC55S?s4hkAoSEqdS>dDuy&C6=1 zD963rPRBDGjIuW71D#yo1m)j9m3!BcCEl2mla?2N9?r)h6m8{jVQXh!g~!!qx7a2C zF;|68#NTwf$VElP!S;icLYJ3Prfe9GjV%`TC580VB*79_HxR?}I~OPzJFzU1Q`5C|b*5{ZI}>$h(z+{n;P8n- zl&vI`>4i^EQ#CZOE2A_$((a@NGZN;;i}m$&XbYhA_ccl6FM9N_8MdBUPrHg^fD;q2 z8OC^vh>Gr;SK8^VhAJv9#>S4`y=w-Q4;S}!mW&cBOL!|6eYP8%LYX-@c9!oVW6U>( zv$1hNQEE=NrI>2qHQb(&_j3FS7VhZ~zJQPOM@BKG^9{V0R)|fGWJw*d7R%ftqu&V4lHD{_)hU0sc)5+2C7N!~p!KNO(C@Xt~+s&N24Jn+HZ+i+3 z&DUQfdU)ifJv#~NIFAhuCP(}p&e{RM2>lPFf2Gf9jm^A!MMFaaf|7{|-KG!$?d{uM z0|T=8X}{5kY*+d~uG(>VsB84^z|s5jd}URyvrpoK2^1Vf)}7r2yg=XPw7V9V z$1fna2NSz|G~*u}kc~8nENz}BK}SJ(&q@$pyA5Y_dq+p+%AQX{V`I`XGL>aztqbO} z@)Q3Nv*N2x-F}ItUVt6)?%l88<^~;lAn9jMPdtZNVqjn($hFWQ0^kNP!^AmzaZ`yH z&gM%;k2{L8vcLcQfz2Z&9i54pSrr;P}<8w*yxaYr2@>lYFZ|_xg zHSYB_k4@|Y1U|Q7NkKvQYSwg5e?Mh-Hwb|U#DC}`>A5_Jh@eyP9-sV&?SXJOF=4+w zQw>@x!u`t^WS|kiS-_z-IyN>}W0MCAjGa9y!3_D`(TXSBib%e#O!eMbPG0UF9)ce~ zCja=s_Em%cjM`dSH#6`+4eP;h{4Hn7%-KVmKIPtD8PbA1%-tgb@tFu z6JJ+%>5og}dU-ndEUZkgA3ip8a|xKhL*OMny{>Ey3%TiYMX9OeWMrSTwQ)#DU@k|fzHGSOQGEaYNQKsE&hlian74j1;!s;_?$INK^Rvm) zEG}DY9GrJ@p}IDxiO}u=rugjAQpR{@J5sPk* ztdf$R+B#^l(5@pu5grs6=vWX<91|Zu6T_qp4M_>1p@Yz7;btqFHPC-f9d+N#0hqw7 zWb5f6@ipV2tK7>GgJI0m(=R0{^iuh1PxhzHlu)a{dT*rJnpVrg##V2=j(x7IsR@$c z(wg=mL3)1vz53*rw6vdhg>-b5)6<_HGI1@)xVX5;$vynH(?FjM*5DZ%8A;}b28Xoi z90lsHB0syk1!;hXfp=d7t8HwIos<+lDe>-IDIgFTnVn`Y)RK}Ch?hfrV-u4>l5r5~ z`S|#-v9Y1o0$LSN5TMW=Ud%bUG_D<+Ojiur4G#|9#l+MtPGD-P`!A9VSphf-+-V@l z8k(T)Ae^txajyc;{u zcMPEI;eS)TmeWV6Nj7gt^ge2~moCuRbtVqS2_}B(jC6(Vd01Eth~obSZ*4uu@g(?% zRd#px6?c22pC1|`8JJ2{Rg3_szJUQW=#-W+Gchs!r$NW{3LPPR&I^2bpi)VS%-#2N-7nr;dP>mfBYy0(hB|D{|35&xlF z{gj8Ij}Zc|Uqco5zFv)Hxao_|%gprYTml?jtNDnNi|ZBwJPCuSvjwV^+uO6X8X6k) z!DYflWxzRDn3?kn3Xl+>&Vw_d^>0d`Yv)>M-v1!2@BbTVL9I`fefi?Wi#5zOhObGh zQN_jPYHBk-jK&|+tNBqd+==wON%*_A>L^H(_2jF_{_*iYNDX`V|MxBXRf*A# z{^K2` zB8?Z}-SZ7D)6lI}BPS_o1SkTUtegP8K)_Z2`(-ePA_HnYG|7R@!{ulrGCW*fObpdq zNc_#4WRA7r56a4_4SQz zHySD`8%s;tW@bg%*%Qz3d58f-?}MKJ+VY(2?HLQpJB^$QDxE$;yaxjezpHO+Umrb8I0Hj}Pmh$SsP16uYe19ynlntrjz=5r?g-#_ zfRn-Ba(Ke$wWapuO3Vt33MI-a|m$}#!L$%suX(#(a4wC)m*Jz~WdF6iF2 z3oXOm7;kkxw_VJ~U4SsyvS9w|RR%lzQc1A4-k@*CJ#%hki-#2nbNPmIU%xsWTyanS zGP)D+bCnei^q{<3S=yI*gUKwhISedKU1tX&tNk3XHAklTxhe(6w}}}e9BADrRt`H1 z53@WtpcyaNd`0S6xxSwBS+A^ioB~;JAi4PYdJ^x&M2GHWl?AUD$1b~z%joy-|HkY; z+ujk%70Ro_L+~HD9UZR}{c=XQH(bBuA@0sDuL?W(oZ?FF0Vu(4NcY;F@Q@gXlRhQAiE zei>0ySV(}L5iFFGAxnVxxKHrexY&H5h1hCU2x}!iA;D?3?@xMCw9?+8!F6w3BU7ca z>8Fp$;Kb~)PXb{DF(0ma_DMOtp9cgE=el_yRe|HxEzhZ!2;2i`h8Y#9# zX(@Sb?xKW5s=xogA8hPf`FXQ5GtQ^pGu2k8f>k>txNQfni7c4j+S_Lv%Qk7*+0;}9 zI7({W%<9U@=fO{zlK7rt{nH|T4FDZ0`e1c6oP~~zG+yLXYW)YvTS&EJ@tvU|nfJct zGi(p{&IN?G&}{^$fq{fs=~-FKrtvL*y1%QaSmtBg@jOLhnLccE$-7uhvfCW*|I;7% z01?BiW38%6sdO?H66g%=g(az})W}H4w_JZl4AK?^ziHE~tFnZH0r_5|TR1dO^`1fl znokAj=$iH4H+D$&mNCSNd{G3|JYvOfW~#+N8@F0nV=0l^PE8?$hPT+nK7B>&VCclI z(CxL+oZmgRm4H4k-&PRLsVLan&TgSfOG&*1Ee%3GwClHVTkLnkmcc$aOi4+ekB+_t z$}mVm>k}HqJ;#*HuTILo72*R=+ct*WB&_ z2tQlI?A}5@N(nkE7)M5RT3YIWC-j?my;30j@jqSw5%M`;3W*v!b{Wu%^=Re!6*&Bh zi|;*nAW25{SbDk}x2IREvfR4Pt^er(Q$)nbE3QNy2j;tiSk#eYS5zN9+%+*lvAv_M zpADY5pL5%&3k|LXbkw=JdW=|Yc`@OKJ2MWWgM&Y;sc^WOEV$|DKD>C51N2Pm>6;ty z0LAcK$!chz1dWxUM!O>#<_GWOf7E9A*T}VvcLC2f>jFNsxS-y_rA`uC>!v+5ELK{n zH|J=cYA{`YjhSJHb|sf=!E-leyXb|wQ-YaJa&sAe&`Dwk9HzcPMD8W4ZN-*#rSW9M z52J!zdm;qFw>9)lDmdibPR*f}NE@glOaBxGS%KI zVfG93?EKSKFu#NXQZk)CCV2I(Zk%w(p2u}#gz0YxIxg1l-@iW!JYTfn#KK>DNlpFc z`64ebo&39sV3MLb>-F{@MrI>p?Ao}*$QEoA&#$0s=DYXCoVfVsxZGGm;;I#^Gg0?L0H;s0SWQ#4f$#x z-RQtKGHi=ONmufRX4))B(@nr`#*1!jH%7?I6SBCCj1nRu3P7j<7_U-usO8|mOYu+$ zE1JM`=)qlax%W@celgTYef80sn3C@5xl~c=M0tyqB|{0l-%hNq(Wce z$ESFtpvD>R`USI%mpJttd!)~TN?uX@ac@jhCX?)}; zC;7vqh=>3i(yOj+DqaU>iwj#{P1nJCxB2n@{wRT_?yfh1gq>r3--Wdeb3sd8S^kw} zI`3*XSt|MdeUP#k@Y9dV;y2r~}@Gt5q5->{fSn-=DHlNJ}J)`uThoT6e1#>3_KX=z>Nc!a5_iM==|uD(U=Kx@gFXz-&(i>1n@rfO8owgNSWSSg>kyjX|)Z~?P?pv~(XKNz@1|$b$NCB41gPKn=|oJN(Wj>vMo$QG`Rsp# z(41O!P+eSX4PJOsX{Lzu8*r`nC*|SMF>5=r*6A$>4QFN^PfQr+-$p_p(7ji-T%gU} zbgAP5w6I{pzHYYeEH0$Kr#J4|?OUnql8i!F{Dcxi4<5MXq@}S!x8rcy0Rz=QpYH71nj{n1O)mU1pHCH}n#?R~EG z`P!3;G%sc|;yQ0`S^3OBVh-uOmAABUk>Is)yWt%fdKYJgR|CE^i8s6Qicyy4oX}6h z2YnP+x_1%|TU#~z5(`krC7(oONcN_sl`#@gokMK|-?~h^au3}BO|fTr`9y)L28-SX zy(Y2c4WHPIjtA*6q1q4wbuMHPjqYo&dM&^{zh0S4ov83}PWQ>Q%d+Pqv+)Z-HyNWC>lFWCA5e(2!fJH~m3i|rACfvGY0Buq?X74Lu2fvp05*~b1cCN37K z@%*;C4JTF`g;&*3NO0fKpd9>sR%fk)w~YS#_y4Kuy5p&i{{GkODvHR=N@Qo1Y#GT2 z5fYMJB(nD?GvkuIDiSKm%D&l~j4LA|dt7^O&&Tup_dLJnAFuRszu)gY-*Z0aocB6! z6Rub1XIFsMs6Kd7)V5GmNXtwk!q5t|H;%LM5CkCR!i$G{$P#jo*yGdKZ^ei(&)Fs0 z&fcePDe387LPMJZ&uOULyPLpL*h-v^k_} z<^CK;&1jjMBE@xd{XwnZeTL2rCXXJlR6J9J;Sd+w$Ifnhg*>Q|RH)0*_5H|@@=(PM z6*aZF(y=Tv#`A;){j$PxPEPSjNz`_{W&W%Zm7xm@Lg2D1Dvk$7^r>U;{4K~V$S=O~ zt^lS*nG>fG%)w*Ri8Em2VdF99k1RoCd54X#1_GRidcIL61o zU>4R3LqnCRv*qRY;uEexKM5#rjF0VG8eH31_>KMc%{kFP=p-tZ3IlZw=JxHya`frr zUp%^YG&NNfd48~@UJV~V0M-n4f7?J<@I*IBgud{lS=rmSef{4Y6LmOzwe%9iTsoGT zB8q{~KW)1ioXmW4bG5MOz}sklTZxWhw}K(~BG=Tf3Vp57&VE~1_%ltWTJ7#r@{hUc zk2{k-u1uIt%(_-qRKPxmC8Tv@UG3=VQSb#vm`=te7jtD< z{sFYj$dDq{5l7{^RH3Jh1zBBUh&ynhS3r29G-NC{df^eil%aS#)ygJ>WiASC$0$!j1E8bre19#^`4($OI+ zvV_l9d&TNkt8t?HSd2LK}bl(zZuL11Y3C>cLW$*CvPC3 zWj}(px3HLhIr-19jn~{V%fjNua*h9P?Wh1CcwH+c`T74wG3OpqF%Ux1j3A662@k4Y z7}7P=9c39oLD&A=wZp2|o1TYz*=FkM^RR+Ev-JfxfMt?ulXz(w4d(hV{MV=10zO!d z%CfRWpqug|iC!gs=*l$KABsxQ6LjQwK5Qb!$jGjw^cungIAi_uJ{TApR{HwpqR|oM z<FG1-a-`J$|XE=0d z$bs@&|C>;$$G78+>4bILstM(;_w`Ih@oAjjjQKTrnKp%ukxmAfP(DX@cLeTOS9;GDxn8l1fXv#)`T~ zlhC;k#S-${qiY`Ilh+?pF^Nx!M**a8WmVuv*080sGvW?|W(2_e{eyZK(K-D=sx6Lrbq4C5ZkofPJ;Cev7Am0a!)YbQ8 zK&lQwF7QSvE?xSK#Y%YX+Jmxs|1BBAO;Xk`%Y{Wnz+C|H(<1}E2cR0jp8#ad($W&R zn}Rj7LPJ{t@(ZG)E!EUZ0E|HBB}N!!TK!HLglf2q}De!TFna~@hPmW z4~vB>WyoBjqRPx3aJ-EVlnUW(aD+reM1b7dz{rRUff$nf;^ND~mTDlDhEOj+El;Tr zGqa>i<`A0%IZa1h|A80k_!6SW#ifjgaC5huz8(1i;rZ-r8dj8$McY%3{vJ$i16b|^ z1iC@rt#BoRQR1fH+SnF80|Nsf?Keb3;EN69>SKF*9f=(;U5bPBqs^D#vp63N!B>di z%2+jkXHj>r8W{n)aq=DGi4NvoVMdOnUW@R{|9F~1 zdsW6qFK2K#N9oyatH_nqjiaoy2c^ZukO>7{2XH-M+He3l&sH~>7R2)#sa%PUWR`hh zZl0N!2LfROO-+`Y!?3{vl{NtWl$0?*2`VWlbUzgVI8sJNrpKTvP>@0n;@_t2Z(U%L ztij$@QTbE$^5dW|=sxS}>r+xvz>j{xUv{-qbPTfIn54bjdNY-QFT!Ts1BcKUc#J$G z3NVapuWM@r!vCA5TKZc_<2#pJ`y}<&OK{i_*XR2lPBKGS*!9O%gB8v^5qGeCec-jx z(9lpqDJm&xygwe>iUJA-sED-|=6C$At~*L-rf(o6uLoxu4++=Sk=h$>e*WWCy~d6X zUJ;Q#@Kea810_8>Go$h%A>;nXJ_;z_tDJNsRAY=b3F^MOWPq2i{Q+8 z_=pF%wLCl~*jusKA~2NzCz+7}0PhtZp0DU0zbgixU%9a(Q{F!)l)ZPXbrG%E1Aw#y0Se%F4>7lc&L6b3GryX9ENWfSh1}0NV{% z9eJr$H>HTtp>{EMugb_&gO%t?04VIO0FeFu{iKJ0i<|pPZtmv#`og5Y>aC{YViAAY znrVmchUFKTnbFM9;~xQ82e>E^ek~9Tkc!2jp1NCq0qnZd@C(W;ProP&h@OXnz*#IV zEs>FuHoVIVqqz>wg@(pP62ey?yKl|LpsloG2aPWUXgWD(KMdoJ9A_9DT4zwla;aDzh;LolWtJatcfs2QIhoW(E&DpuyqTt=;kpV($?eTa% zA-3;cvd9a~F-s>Wr&Thcq;PU;0Qz%tAHW6xE8|{w_ht$(wfv-<;hOjF`;%vAecqk@ z1g;FItI+#V>EYp|P=Vk#2&)64e&y%Ei~d}F@H+xWcd0TAY?KoW5U%zB3a*|W&CdoI z(@POt9^pU~fMXNLFffxa2T8ds(gv9T(GFRD)hb2*8in(A`SQ;(`Zz_QA;2TDz|4ikF z(YU6zy*mE=>~Sxk_Jhsv!_5!#Lsiwxj6v?MY8da|e56IID+45qoCkqBq-137lB3Wg zuWqu&wAP($>^8qcu|g=@pFiAQAPJ1LgWx$Rq)=G*kArBgQ-=lGu>`>6A|x!#Ea~>d z%1RWF`jQeKX_M>p+E1bEfX(mt_}G-@YR&awFn~gI;^N{Wxg6xw35tj;9;D4<7|o1~ z(ts+0ITL8-&e;t%Hnz&jO7>u2s=x&U{c|@bGBh;w)2C^eIlzPD?d1jL-qjbT8VPg7 zsu$HOoyJ%A%huN&=p#7FjUKJ`cyaE_=56ur8}e%?Dk?WA&*5;ww4@-R1fB=F-r(S1 zad9z|H%$6qo`EU$1PEjNUt?(S|FLHr5rlWTv5hYxP;=w8SWR2+gRA41p$MM*c+3h;7s zFMtXFVkLodw6(E0*r`5Yq^5S+Tem1U@|3u9C<{+?C!97qA%TXDj%#}uJYCSL@Gw}o zI^=OuQflk#b5(r=*6SWv1`omZ73lhX+ob~B%)rI3?Zl00ElkqMqP{^J0>#6;M9s*U z788R#Ma@@DZl)|jQG~|f=DvkWUz=1?h2l}zS2XA9x?y3wNg)UA3#`^@A|%lMK!&~| zI_Kd8jOncXEpU6*KFNK!Hb#Vh-Ke6kw^uG3OGg?sm;C|!a!?~(oSgc4dWNdpi_mB^ zSe@*ukAOsjo7&$8iRKL%eJB=d zc2Sju{BRSi0Z#hgzvJc%gUJ15qf!j4&4i=p6cE~|cVRhdX)26O+A82dZBbM+g)sx2 z?Y)@eom~okSrnMc7CKXA#*gyFH3_A{etu&2J~=MV%Uh;kyUG`f3Mv?V@!|57cajv< zmL_&fy$;iDAK?vmC9+OSyh5T1-qlNl(P-E{o3C=UD>K623y@1Poq(5-V?(t-^dCNp zQbYK>fdQ71vaw5+#LrYk)w69}L^#R#Vj2n|V7IikU}gqU+&dbYfi`IdBq%H9+KRYX z5*=+gt2hNhtfJOqTxi}@{H#yP^F@m^L-*@{Ct0)vg!_B5byi*0_yjbk*U@5`!9Kc3 zGK}#|`icupO`X`=sNQ`V0_!x|xyx6@#J)|PBSg6SyC(bNbo0zUg zze8Gx)=K9d8eo@}vX_S(&6Y>LwY8ZZ)00mxFH56B@dC)RJ{B$aeU>*e@=gmR^ZEi} zHS$YwI(h@N^y0ZpjmR5PoGmim7$&;C9ZWz#LwqJI>FULn8fM=rduOTfB`MdF<2Z%c zj1O<#JQfqb^I~|W>{$$BPdUQEh=XT`^QYUA|fkml+2JR=_2yWM?#?kkT4 zd*(SaUY`-><`HX-^!}E)8BL*%Ooe2QS(4U+5D*At2&pl$B*8Ou**5O%Ohd6+SS-Q| z%fQ~hb%9y8p}~A*XwvlQF5T%9-eWEg*gJImcCz<=I$Qm3rDy5goA62N1vU!{Qr5n| zohN&<*|xSu3Rao2^z@Gi2q>2pv)tSsQlywQaRB#(Ni-x_^e4q@#Z z9fgF*qUGfi-i5m9^%rBuq6J)B=cSFwX%ky!&qZGLAMULY=*zBcJ37##r}GBf^UJ4c zO5NM|NAXE}xnFVBHkVClTLF6-xWTppDZOQmqX=PRGVuY=tVXV=oJ z;xq_x`?ZlUOEclM_a}xWcE%po+@v>1uTbMYms#FcX_ME_&ba&K>zMb^R<+u_X5W(| zhYUx&C*)494zp=O5lxsg_N*>yyBD!css*Ud(4DasEK2o@P zqXS||D?FS#=6bBHe(iqA;iO1AkG!6Xc`r^vX0)&%Zc`srw6}NZb#&A#*jaXTeV^Lc zWA+JEsCzL&JJOg=rS0jNP`bm#pWr(FN+wW_L!1#I9=Jy1OpC8Q=XQky(Yi?e&w!NobWQMPzlo6V zs~@_VxSo$HMn-S)@~DqBRKp})a1+$3x^-Wjr>cw=9_ zp?uaCP2p?V>fZtn*8J<pQ{hgsIPbujt-hoND}KE*?*|zyFX;d8IS1?eQCxE=FYMU2b{w z5pYXu+V>hC!Zvnyrt{mQN7j*%N)LGxZzAMylN}!2)H3gby>dsN+qbtfD0K-wBobRR z&c2*1&NC!2EO&^n_N_z9WRd9k;mgJ^kMcb#o+D3aZ*M_8&VM2VFGb)gsY;I$>T?d~ z(pdF+3&jq|X8DYLF2_G2EbJQ^0->Z1NISp+_hMww^oc;wTsT6@P5gCka%9AEtcngw z0rhoh$W&_nuzU_NR95DD{c^MS)0y${j>%@dm{zusUnoCTbNeu9xuPD0Aj9@1(cM5XOJfLbsWLCZ`vabKhCENZ|M0 z_;fJU{*$?Axg2Qd1z3repe36}lZP*&O%wQ|B^~s0$5L-Xk4J`_G<@1qBO# zH{wZ@a2*Rg=k6sPzU_y0ThDA8+8gZuMw7ss6rIAbFfVq-a);ohiuEGN#%g|B zCm9sGk#b>++E@08<#?MQ<~12EX(w&E&!k~Ld8ZpX_>UjIL)6bAV)FJq&G$K{@&%gy zRt|G$^l$BG*gJ^3ocM_KDEqT!rl)T;Gh=6d{oOfOv4CnjKR;G?rUcnUi)8CEv4|U8 z<7kqQsWx31ExyE~&TAxYhU@?Sa~HqK`Vyq#Dm{M=+JyLuiiLMl{7g)`ZEf-sDy8ED z(+F~o_wM}5Pk@0An|3+>0#q0h?6{Y;ilyW{j&mio~n z@ySVFiI)@n=;n>>5)#s4Z11ZAPbAYUgxWiRJji5wTN^mMau`d|Y}H;{zbP0}LZNRJ zmA+STvVM|Z<&O1QHhl4XQ3{H}{#FUY&5mGaGQ6m~bc4;88J|w3S}R9KvpYIAtM@Ex z-?9tG#y)xOy6bif@xTxIBN)&!2WrBcEu&b+^Sq@bHBV?46q$n)d^`_66A@hpw(O>@ zxYEanN0t5kf4y%SlC<5BHioc*4Q#eA#`U{f8xG?&;m^p>amA{q!nVD4q0T2g4Kht?o*JTHx z6vj0UK?v#1a^C&2`1oH_Q^9L%*vKDv9Jlo^0jLqlWzrYl0To&be zv~Q-PbIEmQXmr#uBE0Eh8Wr+JE;3A7orQdACcd$GcC>0QT#c!~G_bs~ayp!DGW3_K zc#w7vtXkC7ecaY2jtUD!v03*qnAwW5hc!ltNK2wu_`Is0Nn%8&0<`qjRwrQZ%F6Cm zT{G%wDj@fQ{ZtWDu@H659%mPqvGNVc8#hk2mu7b>*EL`l{6Iw}#HtXY^&y;C;zAYJrYtbPUPe6-QhY5tvC-pg^qQ5@nE}uWwjMeR6(%JovxTZJQMMTM%x)0DB+c88We{Z= z7!cJ+-V}=wvzczwU%f_y$T#Hk?aKjzU46K|xWCmrG~^q7cd#yyqdg(z`Xh6QPE2)p zu*ocwSK)*C*A#K>$Bzi@tT{eoX-Bw6z9t_cPll%`!_FSqYTo9S4FgwMN9Q-V4>P}5 z*Nhwfa}X=+8rP1vEEe7VZF(&^RDEi)DRQe$0JMc5!<;o-W*EBmZ($)B6gdY+_$;G<`@ycU-9g#al|ORa;Nfh0+?cT z&nu${kv%UvM1&wj_=?O3LWQF8Mi5Pw`usTqef>0X=PxTqAV3u)owT3&XZg;5w-0+o z5hBE3ml&`}k95~}^X(H-fA*oxd>$%AvcAQJAe)WdX`a_0s(X&gBU$8`mX}x6j~`pX z#tW_`ZXMtg0BO7woVU?F{YYOQa(_TXfBx$8laAyYJb>ypH=pqpBlIOi{P5^2U~Ry~ z&+l_`jDa2hlZI50XK%q5di%CNr0qkRj6cDd)r<=W(#y_VF9FX~>9Pb+_eV`mW3RQw zQ}y~b)IC590h77^@s90CSpfijO62qrE(hDTUMZcHX0+SKN1g%QAeN*fB@UDW5wh~V zdzZHDo;@QudsYY@2S6zST1cFs@(FD;OGRtss)7z!|4YACUzcIxuB`bz>zT!&t~k{Mz4y z_P-Or{#3eNKYmbBS$O~f_Ygu5W|9~er-R0TYhniS()xRP=s<{2TDk*?N>@*wdVnk7 zI3JyqM0YGo29GW(+SS<^H*y}KEraUh3FteR5@c;{za=CjWM^M{oDCuIfZ0PL6&%RH z%gYOd#6B$~nb=OXM1#DPml_9Z<~kQhM**cL05gEYfsPXxC{!3%Sfi-`E${~rXanyZ zEE7^rbCBQpc5oL&yr)r5a2tTZFc@#xgF{e>kB@X%<3(?Dt=YodoLcIwwP0qSmiBhs z++0+Y3v<2CgGY~&f$eiB*UK{uMWdV16VP?R9RQ!k_y1S#pQiIw7fc7z?(3)EYemH$ zELMA$y+9_J$pc5p$cVA(VgeXrW~Riv^(~wj(z=BB`Cn`?{C`o;-5VS!olV#40jp;B zVvAG3IOC{)0u~rS4sjZsJUsF!z(2>AcAZ~(drOU`XJrxF&91poodq>4`Pk>=WSGjd z-QCM8D#S-QS%(3~`!@^+2haxnC@%hY9hv|Gp<(0x{{)Hf@lra^qfm(gCa*wR4}BE? z_v-pLQd3On3XEVx>g*&NqozJ$@&pkzkz7tj2EN_NMwbkQ99&~zNeOF4gV_?iapUiQ z1}^as6d`_jc`pDEwW2NNLUK8vOfD?cf+#cfY+q~6|ASEinn(+d8&LH>(AN(oZ)<7E z2ipwjhJ=IwyWC%{T(Rs-p2p!0Hs`eqDrqIQWpF1@aIkbSeD}uDGxaF=RyS`_ zZ=e3K>@|=;p7>2=&H1)KOkeZlI88d{6k*(7pXv0?@`2nWz(ea20Cd|8^7qFJRe-~K zGFIN4;+U-eAIMm8JPjaYh+H~E?a|WHZ+o&BEV71u`T7;0q(NBD!T{g%@&WMK)m8NP z)2O99y^N0+0CzCI9bY`res<`_m8%?D-7^6c)-#dhDHo&$X?+O>qX8=cT0n6j01ucg zz?dL~OKLwcDG7)Ih|W6(6bs0dW`=pEeE@+72nb-Px3{;$$q-zm5Kp@}IjOCs1@11u zUF9L(1dMTzr~=|^81>|kdZhdG=~LjQpcJmT0ULLeGOH?LdG8(^_=ANrDWIT0Fc|Oy zp!h!UPKg?nrw*LWg&;B0h7jO6pazX6{14_AxPm7KXeMxg=TIm&2$6Gk-hyPP%Z!Zh zFZRp=2ql8>9&eFh2=)Rjab{))q~t|I&uM6APR9=3+euht2RuHfh^&r| z@4=ENeMHcO7m&SY4Cin3^t|lLxeq)ra9;i0-E&Ga8G@f5e5tPXh3luOLp!6PeZ#_V zs*O}%OXaDBL_{RrRzCy>gVZ0~EYwRyfZ_qh4#4~vhHU|&u%K + + + diff --git a/System_8hpp__incl.md5 b/System_8hpp__incl.md5 new file mode 100644 index 0000000..107d68a --- /dev/null +++ b/System_8hpp__incl.md5 @@ -0,0 +1 @@ +b86df62bac32e49e6daf3faa95f47748 \ No newline at end of file diff --git a/System_8hpp__incl.png b/System_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..7dac7632f4a717326764f94050fb6a18e7667619 GIT binary patch literal 3808 zcmcJS_g7O}yM;H>GzS5xQUvrMV(3UG5K0apMM9BYq$?0aFo0AQ=>k^}AruJ-y&CBv zAYw$M*C188(xoHqTi$WT`0hV&cSf>*$j-`I?|j#s&x%3c(moI4hCvW?{-zGf7~FHf z+xzSp@OfYqt0&<@T{l; z9?!u1$yg_VMpA(0Lee;L_ZByG?zyg3uiY*4-PFqFDgU0-Oy3a$KO>)dUV#tXRU}%0 zAD2Ek?S}_2gfS;hC*n4>^z=G@4iv;+rByeV#C3Ld>XR3&`Sx~qPc~Yac;vlg>fkh4 zeZ#}~EK(U`KQ^XYBYU6X`4>i`I@>nre_cEg;A`a%56nzT^4VH2=o(8*Nbs6`|H#u* zKP-viTt=7I-Mf;(6Xbx>vfF1ryS&Ek*c;o}l=@x@OWxn#52t4mw|twMoBOP7wyV3l z|L1mHox=V5_c11`-zuZXjte=i7<%UE4pY@7Y1q@=X6vLY=l9UL4CK`b$I%N5NFKJ{Rv z3^~kbgMURtM1)ULVPPSdO1W(V2PD7}Lm(0rc^RLmUF70Ye6;E8;UR+4Pl%32S7oQC z!^OlfUS6*=Gi@3JcbY;Dd3ky9wRJY-6%`d0q8zXY?F8P-$?Xut&(E)O)7I7&gIP@x zF~@%n2?@y#-n{wfQGIy0rh$P07Q54tDsfN7%F1dqmR$q}gDEL18)hmznE7;0LZV`3 zW+r0k?Y9+KkKwA?+O30Ndip4^j;YYYvUl&SuDqb3qjPn2C7=uIZ7E}888}=~zqzN} z7==<>UA=R#wbg!9F9OBLXUUM&sVauvE3n!EK@4@mHkSan(QthLyzjz1ooFoDvFDXZES2dH#gbL zo9b=EliLMZVoc#XWA~de9v(qk3-OL^V%9YbjEtKBh`Y(H(?DJY1%>UM9ostZ>E0Yo zEEe0|-tNCXNec!4B6G@cizzENkVqHOlLiMd?(Vt<24zJ>IRifr_tw`}R~voib#LB0 zm)dcBu$V2oE&{39+D@!ZG?bK-$lssL%*qnuh#P9F)}ZIp*3t?L44m<<+t~0XSs;Ma zGBTg$eJU#}LHWQ3)OhF5KVlc-ml|9iYLUOW+u`vr9XABBRLC?sGM+*la zR23C11(@Fl{5k_|EDe<;BrpOI*C-v@$__buf(kVPEU@9O3Y_}1wc>?>g$&; z5TqlRr0l;ox44+C8j{{}2ZcfjUcH)^pMSF1A#ss`?sqs5E&S-wBTflBULGD_fB&g! zkJN^ShFCsXYzh-^9C^lDf$aQ@>{w7xAiE-RH(4V`coZ$n_ChCDwVXZB(pOPQ>8rDJ z4*JK+%6l{qFJpm%2ALTplx*J|3gpRYdi?I9ZnQ>@yN3tH)6;a*yWR$gM5YMvB_>8k z7Zw-K{0d;8YaJRI>gXtGYHBJfx-KmIrE}#}8*E*0T}$l<`~9S-CYu%)A_MrzZhK4Ds?b#!#} z_I{I_O9N9dKwuS85o?8 z*AfvIe_dPN-5??(Q&m;PW`*QOhT2HwO0ZF2FE{t3ONxs@rMY={uz%Z}vT<@cku2mg zj#I_lTwVQEN2~8oHGTM?MtybwCYN!Em9^5PgX8?{l49__Bu>A)yxa_R@{J-0WRtNZ zb*PdWvU;}U`|Q4@biNeWF%rMNGzu0GdlmbKH% zd)tfNXBzx~LeN1dtx){YcNsQVwO`qC^NEWa>Ly*QDT0wH%mW**MZEI2fg_$Se^x36 zWl`%@-|sCpMQSzWtGx&3qlO5CU_9qVhQQ-M?iiG0IbXPg2H*O~bbJe*3X;YJQ^fh5 zI;41o=1A4mdMGV}Sc|d7cq&G=J_G-~GG5OCy}>TKpP_Q|6pNfK^I*}`)Wl#g zpOYLRZv|Xl9#?#1#9rfWyYuGP6cP4}EgOI1`Z&eTJEY%EPV%^n9$$A>J`hetsD)o6 zlarGIj?XpK)!FzGWouw6(tBL(`Lg`f(09zn`?Sn9p|k(?!Mp7d3dP(!@%P}l^>jYs zW%EDgLLwQRh_@_mIXOAq1eu76O-NWNv z%IFH+-^kIRi)uZ`$f!l+M9_r%z}1R##O-Ws2*csJIyyRfddVI0abJSh#ueq|MPKRX|Hc%hrKMffdxZ!)Ir<#WLn*f% zaGnBN8raj5Cr_R|d$zwHa4=@S#tDlsudqAM#AJ?A-~~fPN2X&7wGAc!9zId)?d!|I zEC9qgKHRf!@WVJe=K_Eu5Hz;RPdr{mDHtrwPEOiEkJSVo%jFpt#m5_Xc$CD`zU7j&_mIvD}`MX4gNU>vWHElCx->MvYyTmi9`q@4<2^OPpKIL;AC&<>oY>| zAyrkyQ#%&B+tBwyei#*%NNYdz^E(5jXJk}&jZaKqTwG{ndvi;M@Zkshh9!muBW_)zpB%!zh!ztQqk>FKOnO}%9SQnEtgr}R z$sm!yLy-6Ka2bdO4-b#RcwKuD-DR6ZU0Zema}en@xQX#`VCIax3g2gED}(md3JkN| zM~2ezJNF%IY;F7QZuj=~f_UR}pIuo2T_J@)Fkn6W{c9HvyZ?ek5YWQ)_4Q;j8SoM4 zd|t+DGBT#E6QI5!6M+0oicGoVUGLp1!YqJcdVA40eKR||CWqEYFtvaDQ(;zN3AQ#i zKrt3pR%K=7t1Rt+oh?L%x3{Z&GC+ZE;5w_SWM1eDPE2GaCle2vzUt)l|M>Can&IpB zp~vqE3a%lMQ+<7Xt*uUeel-9xx7sbt138M7Z`>H@>wA%sa@)+z4>T1UEDy5~85ub~ zJ`OShhvO6 + + + + + + +MIMPC++: include/System.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
System.hpp
+
+
+Go to the documentation of this file.
1 
+
8 #pragma once
+
9 
+
10 #include <eigen3/Eigen/Dense>
+
11 
+
12 namespace mimpc {
+
13 
+
31  template<int num_states, int num_cont_inputs, int num_bin_inputs>
+
32  class System {
+
33  public:
+
34  static constexpr auto NUM_STATES = num_states;
+
35  static constexpr auto NUM_CONT_INPUTS = num_cont_inputs;
+
36  static constexpr auto NUM_BIN_INPUTS = num_bin_inputs;
+
37  static constexpr auto NUM_INPUTS = num_bin_inputs + num_cont_inputs;
+
38 
+
39  using AMatrix = typename Eigen::Matrix<double, num_states, num_states>;
+
40  using BMatrix = typename Eigen::Matrix<double, num_states, num_cont_inputs + num_bin_inputs>;
+
41  using StateVec = typename Eigen::Vector<double, num_states>;
+
42  using InputVec = typename Eigen::Vector<double, num_cont_inputs + num_bin_inputs>;
+
43 
+
49  virtual AMatrix getA(const StateVec &state) const = 0;
+
50 
+
56  virtual BMatrix getB(const StateVec &state) const = 0;
+
57 
+
64  virtual void
+
65  updateA(const StateVec &state, std::function<void(unsigned int, unsigned int, double)> &changeAval) const = 0;
+
66 
+
73  virtual void
+
74  updateB(const StateVec &state, std::function<void(unsigned int, unsigned int, double)> &changeBval) const = 0;
+
75  };
+
76 }
+
Definition: System.hpp:32
+
virtual void updateB(const StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeBval) const =0
+
virtual AMatrix getA(const StateVec &state) const =0
+
virtual void updateA(const StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeAval) const =0
+
virtual BMatrix getB(const StateVec &state) const =0
+
+ + + + diff --git a/VizForces_8hpp_source.html b/VizForces_8hpp_source.html new file mode 100644 index 0000000..6922f79 --- /dev/null +++ b/VizForces_8hpp_source.html @@ -0,0 +1,135 @@ + + + + + + + +MIMPC++: include/sim/VizForces.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
VizForces.hpp
+
+
+
1 #pragma once
+
2 
+
3 #include <math.h>
+
4 #include <fmt/format.h>
+
5 
+
6 #include "drake/systems/framework/leaf_system.h"
+
7 
+
8 #include "drake/multibody/plant/externally_applied_spatial_force.h"
+
9 #include "drake/multibody/plant/multibody_plant.h"
+
10 #include "drake/multibody/math/spatial_force.h"
+
11 
+
12 #include "drake/geometry/meshcat.h"
+
13 #include "drake/geometry/shape_specification.h"
+
14 
+
15 #include "drake/common/value.h"
+
16 
+
17 
+
18 
+
19 
+
20 namespace mimpc::simulation {
+
21  class VizForces : public drake::systems::LeafSystem<double> {
+
22 
+
23  private:
+
24  drake::multibody::MultibodyPlant<double> &plant_;
+
25  std::unique_ptr<drake::systems::Context<double>> plant_context_;
+
26  drake::geometry::Meshcat &meshcat_;
+
27 
+
28  const int num_forces_;
+
29  const std::string body_link_name_;
+
30 
+
31  const double arrow_len_multiplier_;
+
32  const double arrow_width_;
+
33 
+
34  drake::systems::InputPort<double> *body_state_input_port_;
+
35  drake::TypeSafeIndex<drake::systems::InputPortTag> forces_input_port_;
+
36 
+
37 
+
38  public:
+
39 
+
40  VizForces(drake::multibody::MultibodyPlant<double> &plant, drake::geometry::Meshcat &meshcat,
+
41  const int num_forces,
+
42  const std::string &bodyLinkName, const double arrowLenMultiplier);
+
43 
+
44  void updateArrows(const drake::systems::Context<double> &context) const;
+
45 
+
46  };
+
47 }
+
48 
+
Definition: VizForces.hpp:21
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..0ee1826 --- /dev/null +++ b/annotated.html @@ -0,0 +1,97 @@ + + + + + + + +MIMPC++: Class List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + +
 Nmimpc
 Nsimulation
 CMPCLeafSystem
 CSimulation
 CVizForces
 Nsystems
 CREACSA
 CMPC
 CSolver
 CSCIPSolver
 CSystem
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +MIMPC++: Class Index + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
M | R | S | V
+
+
+
M
+
MPC (mimpc)
MPCLeafSystem (mimpc::simulation)
+
+
R
+
REACSA (mimpc::systems)
+
+
S
+
SCIPSolver (mimpc)
Simulation (mimpc::simulation)
Solver (mimpc)
System (mimpc)
+
+
V
+
VizForces (mimpc::simulation)
+
+
+ + + + diff --git a/classmimpc_1_1MPC-members.html b/classmimpc_1_1MPC-members.html new file mode 100644 index 0000000..2f3a8b1 --- /dev/null +++ b/classmimpc_1_1MPC-members.html @@ -0,0 +1,94 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::MPC< SystemType, SolverType > Member List
+
+
+ +

This is the complete list of members for mimpc::MPC< SystemType, SolverType >, including all inherited members.

+ + + + + + +
control(const SystemType::StateVec &state, SystemType::InputVec &input, std::string &stats)mimpc::MPC< SystemType, SolverType >
MPC(SolverType &solver)mimpc::MPC< SystemType, SolverType >explicit
SOLVER_TYPE typedef (defined in mimpc::MPC< SystemType, SolverType >)mimpc::MPC< SystemType, SolverType >
SYSTEM_TYPE typedef (defined in mimpc::MPC< SystemType, SolverType >)mimpc::MPC< SystemType, SolverType >
~MPC()=default (defined in mimpc::MPC< SystemType, SolverType >)mimpc::MPC< SystemType, SolverType >virtual
+ + + + diff --git a/classmimpc_1_1MPC.html b/classmimpc_1_1MPC.html new file mode 100644 index 0000000..c17de7e --- /dev/null +++ b/classmimpc_1_1MPC.html @@ -0,0 +1,207 @@ + + + + + + + +MIMPC++: mimpc::MPC< SystemType, SolverType > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::MPC< SystemType, SolverType > Class Template Reference
+
+
+ +

#include <MPC.hpp>

+ + + + + + +

+Public Types

+using SYSTEM_TYPE = SystemType
 
+using SOLVER_TYPE = SolverType
 
+ + + + + +

+Public Member Functions

 MPC (SolverType &solver)
 
SOLVER_RETURN control (const SystemType::StateVec &state, SystemType::InputVec &input, std::string &stats)
 
+

Detailed Description

+

template<class SystemType, class SolverType>
+class mimpc::MPC< SystemType, SolverType >

+ +

This class provides a highlevel mpc interface.

+
Template Parameters
+ + + +
SystemTypethe system type which shall be controlled by the mpc must be of type System
SolverTypethe underlying solver which solves the optimization problem, must be of type Solver
+
+
+

Constructor & Destructor Documentation

+ +

◆ MPC()

+ +
+
+
+template<class SystemType , class SolverType >
+ + + + + +
+ + + + + + + + +
mimpc::MPC< SystemType, SolverType >::MPC (SolverType & solver)
+
+explicit
+
+

Instantiates the MPC.

+
Parameters
+ + +
solvera reference to the instance of the underlying optimization problem. The optimization problem needs to be configured via the low level interface.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ control()

+ +
+
+
+template<class SystemType , class SolverType >
+ + + + + + + + + + + + + + + + + + + + + + + + +
SOLVER_RETURN mimpc::MPC< SystemType, SolverType >::control (const SystemType::StateVec & state,
SystemType::InputVec & input,
std::string & stats 
)
+
+

Starts the solving process based on the current state and returns the optimal input.

+
Parameters
+ + + + + +
statethe current system state
inputthe optimal input
statsstatistics about the solving process
returnsthe solver status even though no solutions are already handled by this class by using the old predictions
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1SCIPSolver-members.html b/classmimpc_1_1SCIPSolver-members.html new file mode 100644 index 0000000..d93db7d --- /dev/null +++ b/classmimpc_1_1SCIPSolver-members.html @@ -0,0 +1,125 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme > Member List
+
+
+ +

This is the complete list of members for mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addInputConstraintOnIndex(int index, double lb, double ub) overridemimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
addInputConstraintOnStep(int step, const typename SystemType::InputVec &lb, const typename SystemType::InputVec &ub) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::addInputConstraintOnStep(int step, const SystemType::InputVec &lb, const SystemType::InputVec &ub)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
addStateConstraintOnIndex(int index, double lb, double ub) overridemimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
addStateConstraintOnStep(int step, const typename SystemType::StateVec &lb, const typename SystemType::StateVec &ub) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::addStateConstraintOnStep(int step, const SystemType::StateVec &lb, const SystemType::StateVec &ub)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
getStepsToCompensateControllerDelay() overridemimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
history_depthmimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
INTEGRATION_SCHEME (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
MAX_STEPS_ON (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
MIN_STEPS_OFF (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
MIN_STEPS_ON (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
NUM_STEPS_SOLVER_DELAY (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
PRED_STEPS (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
SCIPSolver(const typename SystemType::StateVec &state_weights, const typename SystemType::StateVec &final_weights, const typename SystemType::InputVec &input_weights, const typename SystemType::StateVec &set_point, COST_TYPE cost_type, const SystemType &system, double system_dt)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
setFinalWeights(const typename SystemType::StateVec &final_weights) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setFinalWeights(const SystemType::StateVec &final_weights)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setInputHistory(const typename Eigen::Matrix< double, SystemType::NUM_INPUTS, SolverBase::history_depth > &bin_input_hist) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setInputHistory(const Eigen::Matrix< double, SystemType::NUM_INPUTS, history_depth > &bin_input_hist)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setInputWeights(const typename SystemType::InputVec &state_weights) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setInputWeights(const SystemType::InputVec &state_weights)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setNextInputs(const typename Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setNextInputs(const Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setSetPoint(const typename SystemType::StateVec &set_point) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setSetPoint(const SystemType::StateVec &set_point)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setSolverTimeLimit(double max_seconds) overridemimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
setState(const typename SystemType::StateVec &state) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setState(const SystemType::StateVec &state)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setStateWeights(const typename SystemType::StateVec &state_weights) override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::setStateWeights(const SystemType::StateVec &state_weights)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
solve(const typename Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const typename Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, typename Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, typename Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const override (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
mimpc::Solver::solve(const Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const =0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
SolverBase typedef (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
SYSTEM_TYPE typedef (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
~SCIPSolver() (defined in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
~Solver()=default (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
+ + + + diff --git a/classmimpc_1_1SCIPSolver.html b/classmimpc_1_1SCIPSolver.html new file mode 100644 index 0000000..8801784 --- /dev/null +++ b/classmimpc_1_1SCIPSolver.html @@ -0,0 +1,467 @@ + + + + + + + +MIMPC++: mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme > Class Template Reference
+
+
+ +

#include <SCIPSolver.hpp>

+
+Inheritance diagram for mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + +

+Public Types

+using SolverBase = Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
 
- Public Types inherited from mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
+using SYSTEM_TYPE = SystemType
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SCIPSolver (const typename SystemType::StateVec &state_weights, const typename SystemType::StateVec &final_weights, const typename SystemType::InputVec &input_weights, const typename SystemType::StateVec &set_point, COST_TYPE cost_type, const SystemType &system, double system_dt)
 
void addInputConstraintOnIndex (int index, double lb, double ub) override
 
void addStateConstraintOnIndex (int index, double lb, double ub) override
 
+void addInputConstraintOnStep (int step, const typename SystemType::InputVec &lb, const typename SystemType::InputVec &ub) override
 
+void addStateConstraintOnStep (int step, const typename SystemType::StateVec &lb, const typename SystemType::StateVec &ub) override
 
+void setFinalWeights (const typename SystemType::StateVec &final_weights) override
 
+void setStateWeights (const typename SystemType::StateVec &state_weights) override
 
+void setInputWeights (const typename SystemType::InputVec &state_weights) override
 
+void setSetPoint (const typename SystemType::StateVec &set_point) override
 
+void setState (const typename SystemType::StateVec &state) override
 
+void setInputHistory (const typename Eigen::Matrix< double, SystemType::NUM_INPUTS, SolverBase::history_depth > &bin_input_hist) override
 
+void setNextInputs (const typename Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs) override
 
void setSolverTimeLimit (double max_seconds) override
 
+SOLVER_RETURN solve (const typename Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const typename Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, typename Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, typename Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const override
 
unsigned int getStepsToCompensateControllerDelay () override
 
- Public Member Functions inherited from mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
virtual void addInputConstraintOnStep (int step, const SystemType::InputVec &lb, const SystemType::InputVec &ub)=0
 
virtual void addStateConstraintOnStep (int step, const SystemType::StateVec &lb, const SystemType::StateVec &ub)=0
 
virtual void setFinalWeights (const SystemType::StateVec &final_weights)=0
 
virtual void setStateWeights (const SystemType::StateVec &state_weights)=0
 
virtual void setInputWeights (const SystemType::InputVec &state_weights)=0
 
virtual void setSetPoint (const SystemType::StateVec &set_point)=0
 
virtual void setState (const SystemType::StateVec &state)=0
 
virtual void setInputHistory (const Eigen::Matrix< double, SystemType::NUM_INPUTS, history_depth > &bin_input_hist)=0
 
virtual void setNextInputs (const Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs)=0
 
virtual SOLVER_RETURN solve (const Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const =0
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Attributes inherited from mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
+static constexpr auto PRED_STEPS = N
 
+static constexpr auto MIN_STEPS_ON = min_steps_on
 
+static constexpr auto MIN_STEPS_OFF = min_steps_off
 
+static constexpr auto MAX_STEPS_ON = max_steps_on
 
+static constexpr auto NUM_STEPS_SOLVER_DELAY = num_steps_solver_delay
 
+static constexpr auto INTEGRATION_SCHEME = integration_scheme
 
static constexpr int history_depth
 
+

Detailed Description

+

template<class SystemType, int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+class mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >

+ +

Provides a solver based on the open source SCIP Solver (https://scipopt.org/)

+

Constructor & Destructor Documentation

+ +

◆ SCIPSolver()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::SCIPSolver (const typename SystemType::StateVec & state_weights,
const typename SystemType::StateVec & final_weights,
const typename SystemType::InputVec & input_weights,
const typename SystemType::StateVec & set_point,
COST_TYPE cost_type,
const SystemType & system,
double system_dt 
)
+
+

Initializes a new SCIP Solver

Parameters
+ + + + + + + + +
state_weightsvector that contains the weights for each state error
final_weightsvector that contains the final weights for each state error
input_weightsvector that contains the input weights
set_pointthe target state
cost_typethe type of the cost function
systemthe concrete system
system_dtthe timestep with which the system dynamics are discretized
+
+
+ +
+
+

Member Function Documentation

+ +

◆ addInputConstraintOnIndex()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::addInputConstraintOnIndex (int index,
double lb,
double ub 
)
+
+overridevirtual
+
+

Adds or replaces the bounding box constraint to the input variable with given index to all discrete time steps.

+
Parameters
+ + + + +
indexindex of the respective input variable in the input vector
lblower bound
ubupper bound
+
+
+ +

Implements mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ addStateConstraintOnIndex()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::addStateConstraintOnIndex (int index,
double lb,
double ub 
)
+
+overridevirtual
+
+

Adds or replaces the bounding box constraint to the state variable with given index to all discrete time steps.

+
Parameters
+ + + + +
indexindex of the respective state variable in the state vector
lblower bound
ubupper bound
+
+
+ +

Implements mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ getStepsToCompensateControllerDelay()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + +
unsigned int mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::getStepsToCompensateControllerDelay ()
+
+overridevirtual
+
+

Returns the index at which the next input calculated by solve() has to be taken, in order to correct respect the solver delay compensation. Most of the times this value should refer to #num_steps_solver_delay

Returns
num_steps_solver_delay
+ +

Implements mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ setSolverTimeLimit()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
void mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setSolverTimeLimit (double max_seconds)
+
+overridevirtual
+
+

Sets the maximum time that the solver will try to find the optimal solution when solve is called. If the maximum time is reached, the best solution found so far will be returned.

Parameters
+ + +
max_seconds
+
+
+ +

Implements mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1SCIPSolver__coll__graph.map b/classmimpc_1_1SCIPSolver__coll__graph.map new file mode 100644 index 0000000..9af26ac --- /dev/null +++ b/classmimpc_1_1SCIPSolver__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1SCIPSolver__coll__graph.md5 b/classmimpc_1_1SCIPSolver__coll__graph.md5 new file mode 100644 index 0000000..113a869 --- /dev/null +++ b/classmimpc_1_1SCIPSolver__coll__graph.md5 @@ -0,0 +1 @@ +851f8cedd2b2859c1fa06a9a3f92f4bf \ No newline at end of file diff --git a/classmimpc_1_1SCIPSolver__coll__graph.png b/classmimpc_1_1SCIPSolver__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..88bcb4d0f0e14ab7a2378f133a9daf7ac264f7f0 GIT binary patch literal 15810 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 W@RyipIN_me3Rx+oi>VTqZ~i}1Ou!rf literal 0 HcmV?d00001 diff --git a/classmimpc_1_1SCIPSolver__inherit__graph.map b/classmimpc_1_1SCIPSolver__inherit__graph.map new file mode 100644 index 0000000..9af26ac --- /dev/null +++ b/classmimpc_1_1SCIPSolver__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1SCIPSolver__inherit__graph.md5 b/classmimpc_1_1SCIPSolver__inherit__graph.md5 new file mode 100644 index 0000000..113a869 --- /dev/null +++ b/classmimpc_1_1SCIPSolver__inherit__graph.md5 @@ -0,0 +1 @@ +851f8cedd2b2859c1fa06a9a3f92f4bf \ No newline at end of file diff --git a/classmimpc_1_1SCIPSolver__inherit__graph.png b/classmimpc_1_1SCIPSolver__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..88bcb4d0f0e14ab7a2378f133a9daf7ac264f7f0 GIT binary patch literal 15810 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 W@RyipIN_me3Rx+oi>VTqZ~i}1Ou!rf literal 0 HcmV?d00001 diff --git a/classmimpc_1_1Solver-members.html b/classmimpc_1_1Solver-members.html new file mode 100644 index 0000000..914ec41 --- /dev/null +++ b/classmimpc_1_1Solver-members.html @@ -0,0 +1,113 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme > Member List
+
+
+ +

This is the complete list of members for mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
addInputConstraintOnIndex(int index, double lb, double ub)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
addInputConstraintOnStep(int step, const SystemType::InputVec &lb, const SystemType::InputVec &ub)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
addStateConstraintOnIndex(int index, double lb, double ub)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
addStateConstraintOnStep(int step, const SystemType::StateVec &lb, const SystemType::StateVec &ub)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
getStepsToCompensateControllerDelay()=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
history_depthmimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
INTEGRATION_SCHEME (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
MAX_STEPS_ON (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
MIN_STEPS_OFF (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
MIN_STEPS_ON (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
NUM_STEPS_SOLVER_DELAY (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
PRED_STEPS (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >static
setCost(COST_TYPE cost_type)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setFinalWeights(const SystemType::StateVec &final_weights)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setInputHistory(const Eigen::Matrix< double, SystemType::NUM_INPUTS, history_depth > &bin_input_hist)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setInputWeights(const SystemType::InputVec &state_weights)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setNextInputs(const Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setSetPoint(const SystemType::StateVec &set_point)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setSolverTimeLimit(double max_seconds)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setState(const SystemType::StateVec &state)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
setStateWeights(const SystemType::StateVec &state_weights)=0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
solve(const Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const =0mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >pure virtual
SYSTEM_TYPE typedef (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >
~Solver()=default (defined in mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >)mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >virtual
+ + + + diff --git a/classmimpc_1_1Solver.html b/classmimpc_1_1Solver.html new file mode 100644 index 0000000..419d131 --- /dev/null +++ b/classmimpc_1_1Solver.html @@ -0,0 +1,839 @@ + + + + + + + +MIMPC++: mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme > Class Template Referenceabstract
+
+
+ +

#include <Solver.hpp>

+
+Inheritance diagram for mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >:
+
+
Inheritance graph
+ + + + +
[legend]
+ + + + +

+Public Types

+using SYSTEM_TYPE = SystemType
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void addInputConstraintOnIndex (int index, double lb, double ub)=0
 
virtual void addStateConstraintOnIndex (int index, double lb, double ub)=0
 
virtual void addInputConstraintOnStep (int step, const SystemType::InputVec &lb, const SystemType::InputVec &ub)=0
 
virtual void addStateConstraintOnStep (int step, const SystemType::StateVec &lb, const SystemType::StateVec &ub)=0
 
virtual void setFinalWeights (const SystemType::StateVec &final_weights)=0
 
virtual void setStateWeights (const SystemType::StateVec &state_weights)=0
 
virtual void setInputWeights (const SystemType::InputVec &state_weights)=0
 
virtual void setCost (COST_TYPE cost_type)=0
 
virtual void setSetPoint (const SystemType::StateVec &set_point)=0
 
virtual void setState (const SystemType::StateVec &state)=0
 
virtual void setInputHistory (const Eigen::Matrix< double, SystemType::NUM_INPUTS, history_depth > &bin_input_hist)=0
 
virtual void setNextInputs (const Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > &next_inputs)=0
 
virtual void setSolverTimeLimit (double max_seconds)=0
 
virtual unsigned int getStepsToCompensateControllerDelay ()=0
 
virtual SOLVER_RETURN solve (const Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &last_open_loop_input, const Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &last_open_loop_state, Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > &open_loop_input, Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > &open_loop_state) const =0
 
+ + + + + + + + + + + + + + + +

+Static Public Attributes

+static constexpr auto PRED_STEPS = N
 
+static constexpr auto MIN_STEPS_ON = min_steps_on
 
+static constexpr auto MIN_STEPS_OFF = min_steps_off
 
+static constexpr auto MAX_STEPS_ON = max_steps_on
 
+static constexpr auto NUM_STEPS_SOLVER_DELAY = num_steps_solver_delay
 
+static constexpr auto INTEGRATION_SCHEME = integration_scheme
 
static constexpr int history_depth
 
+

Detailed Description

+

template<class SystemType, int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+class mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >

+ +

This defines abstract base class defines a wrapper around any mixed integer solver and defines a low level solver interface to be used within an mpc. For a highlevel interface refer to MPC, which takes any Solver implementation as a template argument.

+

The solver discretizes the time into time steps of same length.

+
Template Parameters
+ + + + + + + + +
SystemTyperefers to the system dynamics and must be a class implementing System
Nprediction horizon
min_steps_onnumber of discrete time steps that the binary inputs have to stay on
min_steps_offnumber of discrete time steps that the binary inputs have to stay off
max_steps_onmaximum number of discrete time steps that the binary inputs can stay on
num_steps_solver_delaynumber of discrete time steps that are solver delay, referring to the time delay from the time point system is at a current state (which will be set by setState()) and the time point at which the optimal input returned by solve() is applied to the system. This delay is compensated by predicting the systems state based on the inputs that will be applied during this delay time. This inputs are set via setNextInputs() and can be for example taken from the previous open loop prediction. Obviously, the optimal input predicted by the solver and returned by solve() is the one at num_steps_solver_delay in the next open loop prediction, as the first refer to the predicted states during the delay. The correct index for the next input can be aquired using getStepsToCompensateControllerDelay().
integration_schemediscretization method
+
+
+

Member Function Documentation

+ +

◆ addInputConstraintOnIndex()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::addInputConstraintOnIndex (int index,
double lb,
double ub 
)
+
+pure virtual
+
+

Adds or replaces the bounding box constraint to the input variable with given index to all discrete time steps.

+
Parameters
+ + + + +
indexindex of the respective input variable in the input vector
lblower bound
ubupper bound
+
+
+ +

Implemented in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ addInputConstraintOnStep()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::addInputConstraintOnStep (int step,
const SystemType::InputVec & lb,
const SystemType::InputVec & ub 
)
+
+pure virtual
+
+

Adds or replaces the bounding box constraint to the input vector at given time step

+
Parameters
+ + + + +
steptime step 0<=step<=N
lblower bound
ubupper bound
+
+
+ +
+
+ +

◆ addStateConstraintOnIndex()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::addStateConstraintOnIndex (int index,
double lb,
double ub 
)
+
+pure virtual
+
+

Adds or replaces the bounding box constraint to the state variable with given index to all discrete time steps.

+
Parameters
+ + + + +
indexindex of the respective state variable in the state vector
lblower bound
ubupper bound
+
+
+ +

Implemented in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ addStateConstraintOnStep()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::addStateConstraintOnStep (int step,
const SystemType::StateVec & lb,
const SystemType::StateVec & ub 
)
+
+pure virtual
+
+

Adds or replaces the bounding box constraint to the state vector at given time step

+
Parameters
+ + + + +
steptime step 0<=step<=N
lblower bound
ubupper bound
+
+
+ +
+
+ +

◆ getStepsToCompensateControllerDelay()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + +
virtual unsigned int mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::getStepsToCompensateControllerDelay ()
+
+pure virtual
+
+

Returns the index at which the next input calculated by solve() has to be taken, in order to correct respect the solver delay compensation. Most of the times this value should refer to #num_steps_solver_delay

Returns
num_steps_solver_delay
+ +

Implemented in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ setCost()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setCost (COST_TYPE cost_type)
+
+pure virtual
+
+

Sets the error function type

+
Parameters
+ + +
cost_typeerror function type
+
+
+ +
+
+ +

◆ setFinalWeights()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setFinalWeights (const SystemType::StateVec & final_weights)
+
+pure virtual
+
+

Sets the state error weights of the final predicted state

+
Parameters
+ + +
final_weightsweight vector where each vector element refers to the respective state vector element
+
+
+ +
+
+ +

◆ setInputHistory()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setInputHistory (const Eigen::Matrix< double, SystemType::NUM_INPUTS, history_depth > & bin_input_hist)
+
+pure virtual
+
+

Sets the input history of past inputs. This is necessary in order to respect the timing constraints.

+
Parameters
+ + +
bin_input_histinput history matrix, where the first index refers to the input vector element and the second index to the history time step. Thereby index 0 refers to the most past element, and index history_depth refers to the current time step.
+
+
+ +
+
+ +

◆ setInputWeights()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setInputWeights (const SystemType::InputVec & state_weights)
+
+pure virtual
+
+

Sets the input weights of all intermediate predicted inputs

+
Parameters
+ + +
state_weightsweight vector where each vector element refers to the respective input vector element
+
+
+ +
+
+ +

◆ setNextInputs()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setNextInputs (const Eigen::Matrix< double, SystemType::NUM_INPUTS, num_steps_solver_delay > & next_inputs)
+
+pure virtual
+
+

Sets the inputs that the will be applied to the system during the solver delay, in order to predicts the systems behaviour while the solver optimizes the next input

+
Parameters
+ + +
next_inputsinput sequence
+
+
+ +
+
+ +

◆ setSetPoint()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setSetPoint (const SystemType::StateVec & set_point)
+
+pure virtual
+
+

Sets the state set point. The state error is then calculated by applying the error function (as defined by setCost) to the difference between the current or predicted state and the set point. Each state error vector element is weighted by the state and final weights as specified by setStateWeights and setFinalWeights

+
Parameters
+ + +
set_pointthe state set point
+
+
+ +
+
+ +

◆ setSolverTimeLimit()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setSolverTimeLimit (double max_seconds)
+
+pure virtual
+
+

Sets the maximum time that the solver will try to find the optimal solution when solve is called. If the maximum time is reached, the best solution found so far will be returned.

Parameters
+ + +
max_seconds
+
+
+ +

Implemented in mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >.

+ +
+
+ +

◆ setState()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setState (const SystemType::StateVec & state)
+
+pure virtual
+
+

Sets the current system state which is then used to do the optimization and prediction process.

+
Parameters
+ + +
statesystem state
+
+
+ +
+
+ +

◆ setStateWeights()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + +
virtual void mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::setStateWeights (const SystemType::StateVec & state_weights)
+
+pure virtual
+
+

Sets the state error weights of all intermediate predicted states

+
Parameters
+ + +
state_weightsweight vector where each vector element refers to the respective state vector element
+
+
+ +
+
+ +

◆ solve()

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual SOLVER_RETURN mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::solve (const Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > & last_open_loop_input,
const Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > & last_open_loop_state,
Eigen::Matrix< double, SystemType::NUM_INPUTS, N, Eigen::RowMajor > & open_loop_input,
Eigen::Matrix< double, SystemType::NUM_STATES, N+1, Eigen::RowMajor > & open_loop_state 
) const
+
+pure virtual
+
+

Starts the solving process in order to find the optimal input and state sequence. Given the cost function and constraints. If a time limit as been set with setSolverTimeLimit, the method will return after that time with no or the best solution found so far.

+
Parameters
+ + + + + +
last_open_loop_inputan optimal open loop input sequence (i.e. from last iteration) that is used to warm start the solver
last_open_loop_statean optimal open loop state sequence (i.e. from last iteration) that is used to warm start the solver
open_loop_inputthe optimal/suboptimal input sequence found by the solver, depending on the delay compensation the next input is at discrete time step getStepsToCompensateControllerDelay()
open_loop_statethe optimal/suboptimal state sequence found by the solver
+
+
+
Returns
The return state indicates if the solution is optimal, suboptimal or no solution was found
+ +
+
+

Member Data Documentation

+ +

◆ history_depth

+ +
+
+
+template<class SystemType , int N, int min_steps_on, int min_steps_off, int max_steps_on, int num_steps_solver_delay, INTEGRATION_SCHEME integration_scheme>
+ + + + + +
+ + + + +
constexpr int mimpc::Solver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >::history_depth
+
+staticconstexpr
+
+Initial value:
= std::max(
+
{0, max_steps_on - num_steps_solver_delay, min_steps_off - num_steps_solver_delay,
+
min_steps_on - num_steps_solver_delay})
+

Gives, based on the timing constraints the number of past discrete time steps that the optimization problem needs to know

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1Solver__inherit__graph.map b/classmimpc_1_1Solver__inherit__graph.map new file mode 100644 index 0000000..0d5fcc6 --- /dev/null +++ b/classmimpc_1_1Solver__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1Solver__inherit__graph.md5 b/classmimpc_1_1Solver__inherit__graph.md5 new file mode 100644 index 0000000..3b35770 --- /dev/null +++ b/classmimpc_1_1Solver__inherit__graph.md5 @@ -0,0 +1 @@ +d4753f727d41fb4bc04c5564af9ee013 \ No newline at end of file diff --git a/classmimpc_1_1Solver__inherit__graph.png b/classmimpc_1_1Solver__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..19193474602c0cef86575a3429c5ea66d9024ade GIT binary patch literal 15828 zcmaib2RN7Q-?#3zN;@S{DVwrFL{VhR-Xmls*_%pQqG4sH{Or9#R>~%u?6OzcGQ#`0 z?)!bl|9$??@g8@_U5V>=Ug!9JKkIxdFDt%>oQj-`jBJm@^{WbGWPh>Z&z3v3;s5n# zLjS^V+ipsUUnSch{(D;(>qka*l1$?26(z^8pFJL0b-y>3HoD@KUegtyzBcQ^VV<#^ zKBLe~Zp0aVBP82Qt?{KASFwt_4~I(XLh17)`CfPF=ViN{%pd)p*3e($8>3V_Shr$T zHuI$6Fkn_pq6qkuV zZMkxSLvKIvhp4K9n~(hSuY&*irDoGfGW=si;M_?4-10~yul>;nC*yuhP1UFAe^#P7 zXsov7isPMV5-HuXuc(|tbl*d>$*vDCva+(sUwCt|J~%1pu=uN|>)WXv59GH7ORJ0x z^zZgQx#Pjf9WoI|(}>?6Gz>o7^sir%>1~J--MM$K<>dK?VrRDDDLWRVUGvCA*8U#h zL+2y3v@c>~jSU{(Abt6AH7q=w{pK$G9GG8GnttJy*Q3T3oQurfECcuxaz= z&D$ubE5}jiFB5dT}y9mW#LV5aAS)R`yd@hSg^M7B@wee)^OV_n^JS=W8} z?78AU8Px_Je`dCKc6Od&VA%XJGV%q6Hat9h^w_ZO(l#Kcf#Yn$-hEIGa7!CNtD>D|Y9@0{V{@{1CEd=n#| zD&F|ony4yq{rY$8lgYl~;@+Aad-fQWJv+>Jh+Ioc>!^S|D?dL!S#DmQ)mYP6UuynR zT8}^Xv$J`utgOtsZr;8vJ=I&No^$)y%*@Q6wcmZr^?kWko`Zvi-90_#xj|;S3?=?d zij_4r1G7UlXU?2?85sB|G*pu`BolhU2ZOo0JZm(TenPtcuT;P5b~-MCUlM#i^XD>~0@du|R^zQPx=bw2&< z`k#J8H{j)-8l(ACmP@~;`H#&%*3sAgDo7^)6nwg}-ccyvJC+0l`aR?zY7 zkKRM$$KO7G{yb?qm+$l6%U|Jpg0wL)F=3#mcR5idS&4=v{JBP?(fnxR`_evguLoGQ ztnBQuj!fg^P6IQu>L6Wr2?d1%IG;wHS*Fqvg29ThvJzG?v9ayB-RFvy{tA{B3u4#K zz5C;@?G)5+@sDN`(o#~Q;^N{L1^&7ol*U}cw0Zj1$EggL-*?uRM`+#u%!pgt*aY)g zot_??l{XD19mH13UY&drMWU^TpZ*|2tYZbX3v$3%eTKc}(eSO(D!u2t^ zkIZh=$bBJkP3L+QK3MjZ;|Tuh`KYL+Rhz8&VO;C67P~Q4#&)VVJkz*-wshCIhC&wy z`=6c40~wMGJ;Ng-2T|>klas~l@Wp_4?@lWyDv~Vj^cL*A+@7M%!ZuLH+jmu0H}do2 zy_p6T6fv^lk~M*Bo6hs{ic3j(qd>h=Vpd+qd5|#juU97y?QmUaMQZVS^;mQ4tC}I{ z@QVR7mz<|(DrggT+dqs=ExmV^nOTzR)iaO&$R&n#VzP`7HYlE9?Ff4;VOEW03FWFUMqg`J!- zGBPM7`q%}i7V=tJM1AQfaudKXwnZexTd&NUs-$RDpa^~2`>p-J({rq^SU9z4C863zz~PtS^6U`N;*yeB zx9vW9Sx@hzv$HeLGi@w$<9l%_D{>$47*+=>c4lUBN=izfTcNuiOuO>ijUU2(Fwbe9 zmlEy^5&fg0qEZ_v9Eru}wP$=VtyE>miE_izEyh0lKN_-5fDN&EAC@cH-{8Ko@5`~k zZCvJUtN})`TM48PS15Ko?a4V?0zJetMs7%$I8*(6-GG{LJkiVtyQH+Vbm`}ZK1OEd z(x#@@rp+;U&60A8WF2n9)q=u8D|`F$PoJV_PA89|%6;nXEvg>L&dTC*nlC-J+w%lEuR43oH>)1uxIREIhlx=%yu;Xl|r>Emw-UckKP8E~NTAAM`C(GQpal^AE zdFS@++kH<6h~2)ORPEwA{rwZMznAAmc-4BaM0-?nuXaU%?ZjZ zDZ0h7SFc|6qfKKBkaS;LQ1zu1_RY)VPf1A$xYMrHwf${kVxo1|8o&TBf#IhITYZiO zOcxNH=JTUH1Nd^5Y4f9{B}Wkvk#VDvriS^21?4+q5!|K+#Kgp8#%o1Z7k{d!>21P} z5YyEBnErWx$V=zEGlOGeRhTYPz|Kp8g1J@$+wc-Z&9WLOPj_E)4&aqsmJ-Qk`rO>? zH$8pV)y?e~?;UC#9i2amU6xIAFK8~^oExso&Cl=0Swq_)u}1CRzh64^f=p-5WZ&

ec<^WVYboV6sDp4y8HG-9lTvYioPv{P~wjNlD}u;Q|iq1{J*PrFgqj2Pd8V7-10idHF5EQ@$qM#o}1BJ zaPl{$xh`8DICxOK(3$7Lg$uPIJW>OTtyvo^?zWyWi=_FB7MAdl(#i z3`Mj2>sQ$o)?It{43$ypDmlrZ++VzSF*-V$EX}l;o|To=q&49%o!Im5SQav3`GHNm z9QxcSgQd%H1UFUI*H_fn??s_Tr@>qKS3h8w$X;4q<+}N0$L>9Q(zCJ#OTBg_=@!$V z^`VP+1_cF42KHB*9QYUz5MX;jf<1`Kq~YY(h)XOMsq88;C_2-qed%tii&TXvNu85^ zvq29rPdmuTOWWFx;f*!@S2 zlmnddxvkh12HjZMn(Z*9bNlw~9XocM zVrKeW=k~Ox>W<(j#i!N9M!HM7y9@pJ@q?(metw@5loOfREYUYHQP=Z0$Zi@Kq-SKj zvl;nHwq^TvzleyhA)j*P6w;!9t>x+NkaLYdt(ImON1-rms2DBkrc?M2%sK#WAMIYhoy*KOgjR3PgQ zY`&$XrRza@Ld$~(0k%aiUnT<}Ya$8DbgI%;yv+Y5rR>mcav*Wql@oX#9h_A&=Q+;Q z*mn7NlqjJ3EXHT8F zFZ!4w-D6|jtSg3nQ6VZSDoHKg=g%@Qh!3c>Hnz8qWY!DOF)}{+^T*Xk zS5?Pt(htYtz<~oIw{FqnQvpAp*54OXvfLc_^dLhM(6vU+?W$1AB8e+kHlf$Y0RIB# zb6_WpsXDp^a$tjC)0{tlzNED^04H{Ku3p$LJiHD&0z06jyPH~6RFwL}iDMUTA0?YA zn4>^*53FWd{UA+mfGPy8bH83_^*L$>hw)eHuVMU~1^ET6hpG<`e+`#H{Q*lF{=8S1 z*xTJ79a2R;YJ9j;XP#PEj_z@vA;(sj{l-M{O_{t6Cb_!Gi}u38rUePF=dB zeRerGGm{J3KwN4<;)9o$SGrNn5$DB82}8p(>+9=H8EvgM+KZajJf^>2Aw$W2>f=+^ z*tp-(I$Tp+d^>2Et(_gt)|ZNk*y z&Yj93>qmQOWo>P_$sRp=gqhq=MMYjRQ1PN8-Qcn9qinE+(ed%qK{Z$gg$s|%Dl4zA6sM%Hqd$*MOe6}%u#YKOR5N-U z`Sj(>!>}-FPA;y-rlxmNLG0OPa$t_rb90*`v@|Zd|KY>ehOqA9^e(Rx3g#zw2v!Ab zk}C@9`e3OWRls3To@Um{OyJ8DokE=NBHKCvI=an{)|c`Mu$7t03ewZlt8IFFd*>%R z{4iew{rwMoeDAw#Rm7xw1Kp1STNv|G5d;9hzkX}_y z&3oheh=R4nF6Ef~_AIvrtKFMg%XJbG2E>}xyhehsMg-j>^H^J;>~mjb^J9=31{Qiw z#q$i4p>JVPhf>1tJkN--tgwD!*REYaxStbR+_++1uyXUXG28-JD?gIzz{4=rFb^zsI_u@z=0VZEY%&rLA}h zJ{5G~GJBBfG4bUq*Fo%p1)VsF7k?qV{(Wg?fK|5$NArZ(3z|Cgaiwj_Avu_6ax@to z#~)i!Y*FubQ&3Qhj{ezrTr>US^D!Y;K1tH+gAB6YCnlt@)3I5aj=fa~$w@7W^FEOv zd?(^olE@r=P)+b9mkTKB{8$sCmbe>g8XBC2mHX@`zg+=0rlFz9GHDcX_VM#OC@U-L z@9)14tg`YI9bj`wNy*z%mkJaPHa0d$5iDz`l=@oAD3th`9ak4E%3sjxPNf&EuT1dq z@ueA7y}lT9R`7VpTB+6cy)=W>0W5;f^G~pqt*xyc*B07QK5l(W(@#>*eB|$ch`_(V z`ou)ZuSIvE6lFNh++^3z|KhoQujA76DQxT0AnlYoj+;@xAJITr4rKQQgU(>^> z{_uep5QzY=larIo2h|eHb>p#_(~RqB2nKG#W>iO{K1O$1P%sS5S>Mb|^6uR|k5$PEUxP2$p^X=6lH4qHDXH z`wuMQF%}kb6 zc)g5Zu5UODuFJ{A%0&v{EbE(?>?lD`o0*?C1R93&2F6?u;HzHb%5PBq{1gj|_omI; z_8mRS7#@{usa&R0T~p(IRx0o=S|jGW3{qG$SIziM83_q}2s2a_O^K@Kh#Gt0PIug_ zqfE{Ih&`M}c}(@BvG&9jyIy}sXXk#@)$nj_gU7Sd%&e?~AUU^wb?1HS?7U#l$D^P< zX?N)kR$ndimW&twwR%s;4C%K!GH$uVUL70J6s_1;nlS+DEDdDSd~?yx%(G3oFTuM9 zg&9nR%WY*|Bf!GcR03KfXl>4v+9Am_1)eL=OHx`MM+LBwPWqI z>F76y$!|BNjL7RLND5VWvPnnASiErK*X3EoXIJ+zn=Lx*3}DE(%)93uEr_9Sr7vrXlIL!9yyHdF|R@UDB0s*AT%gb%YTb>@{ zx;2ejkfyr(?xo(p=7t*t}Q35`+q?Lr=^&>nMraYEoxP!MHfW8=53 zu1xgg?1}T-N@D#98Cz6UBQJ&+`li$gF-pyQo{Te#tF2Ks5=}`FvWt-p7J*hAbWWEZ zFf%KQySuwvDJS0iR)2Z5Z+F6$TnBKVA1&nkUsUbVq!}0)8i}x);43?qkd7%=iCB0LTOh^)4SsJJTfFL9jlNYlPAo;h3_85gk z>O}y1USwb(eIey|NN{d?1|4sZ`@Zp%Pwo0nGi8)c(0)RPewy!j^(r@k_0#xx;-0bq~n!Pgwjj%ryLzLTGK{&{Ov~7vUY_Mn*$C_B$35{u!sbwwv-;({^i(ml+<# z`?tsm?>J0~=^ZG!uiNqQ_i1#OevkEv59y)_yn6zi@)B-W;?-mUjZu>fzL(suG~}H8 z`LiQU-?QApqPpW%sG{%=yXLr#kjM{7A7pqwW{qyYq8MUm{`ISSNt9@DhGpM5t-_E; zzP?AUT{~Ow$C{UdHe&VA`{YqmBlDEx{9B@T80$6d2V*+-)_cApgIbXr>OtM>=TB@M-oggm$v{wIwc7}UznE_t3GV%8Bhjd_2% z1TCAVnK=;)igxUMSAV)mbM^q_ji$reR;NT2?-rsLLpy6(9%?Y(SK!_K$m7c4? zlHIDUEwfkXicS5`dnC|FxuFbI_3S*w1de{!kPs>19diEu_aby0T;1rF)>l~|D7+&n z+rLy;AO#i_{6%rXtowFx(78TQ`sOy1F6Nt%PLiNVE?hwU2HNL?>%Y z)vb?Lj2&%>KL|8Dg5lkSuw`g$e2|Jt5(N9Wfb;i&9d*BA*VcZ zRIXa)Ilq<`7e^P5=8_u;41Qxm+4vKgWZCB}g?zoyQoDgz-140X)V$qoum6o;-eed+?(_f-3uf#>g zW>84ky?*`L@rM^>^x^$B*49hVD${au?%=_X0DJ)LeNH@*_Z|X5mG**V#Mgz1 z$aI4W7e2m%CpkGsfDE&;kFOb!s&Z||4v0S59RG7Z9TnCsw$bbnsxhI3egA$hH8s`$5Nw(uhy)qV z3uX{e-td?onLeXhj_-x)@Tsx!RY}QZSTahTlr%KHsj24%%6&cq7=X~oSh$TVweyk| z?sVns@$m4#Fdm179*1;B6_8vt!5|k=3#;q&TDYH|Cz{*x@^aIJd1q>?Df?QJR@D$& zu;B7x`>Dm@{xTA)&g9i%cM?myP^fOhzxB>`-h2O^j-XTe`ueC5AQ}MB!!rXF_zS=r zcfx1T2n<5(`O*7euYrMqTDf=cqnR7rx+NBR!2-KjVfnVTt?gBMzbFz3w0tXzYKng^ zgTt@xDBzAsI5C~;g}-}0mzRraaO7Xa&j8#$P)XL{fZoLv^`j+Tad{|6*AZUat183Y zCoUek2T22{3m!s6W#tZ7BMJ%%N}V47@QG1?SvS1B5_ZW&;l0S5;rn07MI`3Isz99vIoD zPoJdUoZrO2zyNsl#M_&Wo7*3yX&)tJ1&$t1$_P{m{CYe(YQoCK7A))`1bgXrSB?*! z0lZfMm`VES>FN2@+k4>4(}SR7VGwL);933EP~_$!w7z5jNCy*=yy68dgOE_f+qZAY zotUZ>84nST1gm<+L(F~uz`$qh%1ujyesZG#uA4S(`chVwZa1OA6gWR`OFThI=@5V! zw4duk-b>K62oD4r6m}>fYUSnSwYI4S6*1XOe&c|Ji~3OB+ZzG(uGOU6U0YYT**#g( zW<1FFp*6Ju8QBRpA`5V3B2C%TgS+@#>^W%N4CVTYLfAIlz z-WYPoCb{9%+K5ZX(E|YjK_k5>&%KL{eXJ0F6)agx?*DI^>UOS!gl<^w2@?T8Umgy% z{FZ6FmrOg~Rv!loLaaAToiq?L1BgSJon=CF{}-&9|~$|NeP*%s_I4i$;x`+4XuF{Nz+c= z|B2Y%7bQ+in0KWP@dUX$9Z^@a9en>{QoXpBlr9>t`o97--BXqt+W#Nviuuyq+vMcB znsddqk7?a2QOijc;xA}?ii?FU3m1;q4A-7IeOlz~fQzz5mdSmnQr3CYaBCrZRzmn7v&4pCMV{FJA10RWHIGba3Ckd(eHLukoa$`p38p zjEqzyrWQTBe}5C`@o52pP&ia^Y{f-7x?S#WIy|G)fs>QBVa+P{?jSK0qMLEcevREp zM@Kid0b&R&8-*f0tJd*FB~~^ZP4EHW@cR0yB^kV}w+h3U+>SyQUX;6nKeIJdW%@U7 zipb0FgBm+HG}M@BEZ6J4Y60<4eQc3r86n|Euk6Uq#ib}|r6VK}{PgKg7@q$ORMEaT zP{;e+N7~l-`gZfCRAp4@)7-Q;M`(G3*E*KowBWbW`7|S zdHIuTg%IIk#Yuq4L+~I|xG<|ABqRjQoXd7p{Y1c+@(sGuOz*)|3*kGK`0wQMIc|HWx94`bKl>s&%Zz$^Kmx+MowM|h|#DoJ`B8AiLQxSxRAWdN;=z1}CNt{{jWtN;0t z)!K@kFU=)_8gnyyEKUE|O)EqV9ti1qdST)0#fwyzE)|jo`CoMS^&IRUW2_vSWv*e} z@Mfc<6I~%oNGVF-_9|*@ZdN>Y+h3>4g0U`2_u=q+obf}4591&+4}HrcAh?!6RdsbK z6l$DBLPA4urIJ$D^%D#h1`9<6g;H3QFjWTsEYA_8Ihf1XOsVL96Q@=y|5KbwT)VHa zm~>Wumov-bqLCu)&Kwi%EKTeO{C^$Ps5s;Vk|#AgWD=8ArIxK}9v8IqG|L8$70 zgGk!^fXwzPr9H>I-4_s3%CGCWkB`&O?DicycV3B-p9X1PU+vpCaOlugef=n7PQ%58uB(GA1~GD>m6((@LPbDFAle)hh_tjcjUbY&%@}3WGO`Q*F9+F|TGbH% z{b#J*!;KLhadh-Ua5cD&Qm(G9UbVGo>1W^(5e5U~z3x04W%}o;LpbkxcqKx7DJ>Ow z=Iu>d`Cc_rjdTnXGxJ|>0jZwT3e)V}yB8Ll)BNau0NXDe9qL0Bk|rjMkWYwQPm<;b z3NMjUJxlUnNAWL;;?0ZI)Yai-*`s44)N<HOi69*rI zp|G2pZy#8;w2Vv#v|XR->k<+-mjA>jqM@LeQDFoKMi7P|8phaiZZ01@S_ZZ@e#Cts zXb`?XG5BT3QC_cJ?FSEvf@lKc{(f8>BMih%YPok$;h>X@Y66?IMNk-{LEmvM#6nm` ze*B2Cj%ftYgaUQ_;DZ;`{36J>pb>`WFUn}I8X-i`UFbpy?*V$U^2+776TunX{=-f4 z6EaL5K93)7H*ZV2k*BjH2)zrqgjALMoN0w*x+o=j@jtBoJab7{{R)3jJOQyKgV-Z@ z|HbuZj`;0vDh)yhaTk)ryIIHg=cr?Mrd!`^KC^Od-}o9jckO5`7{^n zzc3HUclq7jS_phRg5v^hlAW^agfrcNDkyM>n;n`?vYJ!5_XJ8RTmgg7(8(8k0 zyLX?#S?cWl$M1)4R|7*%Ij}#q7VvV%?%jsnxmJYR+$<*?FPNHAH2c@)&7g(wDUJYx z6s;|4n)a)iw)JIzVpr9aLa{I~ zFrZ@#j7gCpQd5ZJGzmTR^;HROSL_fm}O1h%O=$Ymf{uhRAR8gbbZKKOHWFUD z9MBo~;o#sP{J#Xr8mddq+{6S3?YQ^tn;Kl>=q>JGPxzors{yfh@7|3foQ0t<(=MS7 z5!&Sl(7xG0cQ)8m+S=OoQ@wS@k!~tKGQ8*)0{Vp5*?nO|5n&9N!1Q}UV6IeFS1YK~ ztRgUhgYiZ-{G#%4V>|rozsjCqACa!JJ0V%4PuxSL!~sjV5ekGNhP2){AUF&wK=vYA z@ry)r2W2b&*s62|WzEF*zm95y@}a-L>>=EnmBpVmP_7bggojYm!g|w(e|=S4+`!bd z3P?giO3DB`7*PhRU)}t&kwR=1y3GbDfB;}Yp*S1;BO~I@&KFS|5KgdOn%18M0_zbL zX+`HFh~h{4pZ%ye@QDL~)X1iL9Qp{K5`NGP<^VX-o4^11C5s>lfkkL1Bm=5GvbS+J0)>k5UGu{&4T0RB;pr}ZQ*RppIGklm`(?mg6{qbH} zv3Ml~HMQ%o0}^`YPp|=yu=Es%WHG_ogG@t2 z0`b)I92_?~7)S}76#?0r2SaFBcudXX$9)??KOhQ-gOC&XV=5{P!s<+53v^iET6DbOKK_bW& zc4V0zgm33YGVbrpv8d6sEG)wgz0VN&nb-}s_G--+zC!;14ME^d+hUT4bwd!j-IIS9 zg^q|~T)%$Z=eMa5c$X6}?(+2Ky`*|=#71B=AS1msVlccb-9X$cbCqZ4-w`;a{N(%# zJ%E$Qr(_`Z1y*|<@OB3UMT)$v@@j5|y}3xU0g2usIeuICXM`jEEhm$JtwLl9I`%JZ zD83vS98?OqXIcA(BS|Cs*8PqwVzUwHJsK7ZQ48NZg|lbRYUSHLB|KlSgJ48uzfVoQ@bQreNZp@ctgrtG;s{)m zO+@bmGg(?*Ru0xpw3SzPo(v2K3uD!O#@P4bpZG#cu8>Use+wJ$+-PcQVs`T=Uj6lv z=!V!z*2A^O2&GJrKP2Zy^U$xul zlgFfp5E&Fc3TnQ4TI{KuG{Mp_H@XpzA4F829%1km1tx)KEij}Y78@g`Pvp8F%rt^Z zEKc>Ma=s|sA0j3D3Z4cdvk+ijXYL zo{p4GY8IXwtsI^IE#pB;(~860C~p)K9esDOaz9$A1WHSKW+t7WV1Zc2L$3tr0zU=^ zuS!VlL{joOHUI19&!PD2W~OdOl`t_i1*O!s5SyPhuDR1!R0kCT$UKw}?L+d$js5ZQ z@lBLkV@AIrfT?J-Abe*-^O|nVnE0>m{Ysp1QORlbX{k*Lezv`Ha+FB@v&{;lKY>dBn1g{c$3C= zTM;@m#-==+6MA0%FJ$n3Kvp_@XTs;n6Fr0{dG1Il;|mpV^pTWki<5!3Hb2!DiAJTI zFUR~|;$uz44IK;L!!pVa_d=eqsvJR~SlsI+@&g$4mz{=RvVx8Nq&mQxGsj-cUz z=XAef4Ip+rI-1nt_iqCkA;x+)Zfm!6u*>wt@5SKK9OBx#F z0VwLA{HlGpbAsIKFGLQq7h37R;;5gu9=v|5K0-!JY#S7!rZdwCz6a5`&~%AX4b;!f zyUV0gOlARTt9Bh1AB22fB5R3vRpzXQ1>0o*!L)fB`UP}RSbw5kKX28Al!fq^^Ev#| z^6GLH6%mQ%+O-fBQz3zn`B4P>@GAPG)o9L;tdFkLL#@MV@s@io>ixew`5ck35E~$E zcuW=ko?cvxL1fX)p#TR5O`Hgs0l>ryQbNW;iy+wOL3(LDKobOgTAXbQY{wJ`ne>7M z75Fs_?DqU3w90{>KkJ?yW+6h&L|B8{j=1CC8yI*5DEqK`t1+^jm)10iEF2t&O|T8e zeo@<5tUxA5qShEo&8m_01c+yoQr-(5QwJj}f7MWfYX{MaL3I({`Gisp%keA+M|!FD z0p<9qf%FSTU!gQ3|Nc}nAg|5yIEJR1fi zRSeKknzUG;OC;qv{m&Fu-&r%8 zq!tEH`S~7D`Fcf~kQkV49(JjTKQQg$iqDIdqus$jx45F4^8g|^y)5166(INywgYCv5 z=z*yhdm^cfry<@~0Oz0^I0gz%_J_y9yT-ZosvzUHwq`et!0uMhGP$As%u-&4!yb7J zEQ5OPU42j4oMi8&jydoxQCwUBc~f#Ww^3|7w5o1G^V-iZJuNM6J`Z6G?x(c-8eIF6 zq!pj{KxKz^3>e+^*3V+%CUVRK@+acSgpoxE`(1^R%62O%lMu%;3vF8t83_NKSa}<$ z#XjOECj>EpyY26fz>Tf-mUAZpv|q|7`s_D$V><4lm`AOm`{DbAXuz#R?NdwYXI|6d zCf2{)PSj}*W5hj1TwSb17X2!KBa$X|I$m0F{8o>y5!WGjTa6yAO&=e-JQ)UN-DH z3M+C{E>UI!M!vhX^E?WWOr?B z1|U@+&qQZC*5m~)4o@xmOe&azA)bkAe)skqzwjMe0Mg2w!MhzC9M++}gXdi%t|}lp z1?2)9<9bbX#g{Me(uKg#ykV0f0BYupE&lBt3WX^70Zw(`#DkINifXdY+@pSlY{5k6O z?ls&(Dp>0GM#(P{>HmbwbRawul9CCwrY^{uq3+K7{=Ge7@D#WWQL52|0GrVQgI>Q1 z^!IPbvCt$gUJ+_LNHN;OHl!~$N3dE0BG#b76E_3MfVpGw^8iur!hN=lpAK?x9T8JKYhy`JIbM)WXVo-Tt@IFsnb+^2cPO*D9s05bM6OJ#2JA!+N#Emzdn+FmY=zEBr zx$rK(wgD#OXBgSg*sTZ3_kfKq;X(kv>rz^$^@PAKTZ@`M^&ab@*r}_(rwB_9`t7q% z)r$YzsTC=d4?52mndcC5=5Sq_)@WyH(eaY_ zfX}XH<``4i7gCf!-}8*PS>W+9Be{@b`sVVxSjGddn$9h#c9LsEZr4)KqsP;)c(k#x-p+iEFY~Q$+M0 F{2%4K0+#>) literal 0 HcmV?d00001 diff --git a/classmimpc_1_1System-members.html b/classmimpc_1_1System-members.html new file mode 100644 index 0000000..9820ab7 --- /dev/null +++ b/classmimpc_1_1System-members.html @@ -0,0 +1,101 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +

+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::System< num_states, num_cont_inputs, num_bin_inputs > Member List
+
+
+ +

This is the complete list of members for mimpc::System< num_states, num_cont_inputs, num_bin_inputs >, including all inherited members.

+ + + + + + + + + + + + + +
AMatrix typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
BMatrix typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
getA(const StateVec &state) const =0mimpc::System< num_states, num_cont_inputs, num_bin_inputs >pure virtual
getB(const StateVec &state) const =0mimpc::System< num_states, num_cont_inputs, num_bin_inputs >pure virtual
InputVec typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
NUM_BIN_INPUTS (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
NUM_CONT_INPUTS (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
NUM_INPUTS (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
NUM_STATES (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
StateVec typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
updateA(const StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeAval) const =0mimpc::System< num_states, num_cont_inputs, num_bin_inputs >pure virtual
updateB(const StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeBval) const =0mimpc::System< num_states, num_cont_inputs, num_bin_inputs >pure virtual
+ + + + diff --git a/classmimpc_1_1System.html b/classmimpc_1_1System.html new file mode 100644 index 0000000..4fcb44a --- /dev/null +++ b/classmimpc_1_1System.html @@ -0,0 +1,336 @@ + + + + + + + +MIMPC++: mimpc::System< num_states, num_cont_inputs, num_bin_inputs > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::System< num_states, num_cont_inputs, num_bin_inputs > Class Template Referenceabstract
+
+
+ +

#include <System.hpp>

+
+Inheritance diagram for mimpc::System< num_states, num_cont_inputs, num_bin_inputs >:
+
+
Inheritance graph
+ + + + +
[legend]
+ + + + + + + + + + +

+Public Types

+using AMatrix = typename Eigen::Matrix< double, num_states, num_states >
 
+using BMatrix = typename Eigen::Matrix< double, num_states, num_cont_inputs+num_bin_inputs >
 
+using StateVec = typename Eigen::Vector< double, num_states >
 
+using InputVec = typename Eigen::Vector< double, num_cont_inputs+num_bin_inputs >
 
+ + + + + + + + + +

+Public Member Functions

virtual AMatrix getA (const StateVec &state) const =0
 
virtual BMatrix getB (const StateVec &state) const =0
 
virtual void updateA (const StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeAval) const =0
 
virtual void updateB (const StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeBval) const =0
 
+ + + + + + + + + +

+Static Public Attributes

+static constexpr auto NUM_STATES = num_states
 
+static constexpr auto NUM_CONT_INPUTS = num_cont_inputs
 
+static constexpr auto NUM_BIN_INPUTS = num_bin_inputs
 
+static constexpr auto NUM_INPUTS = num_bin_inputs + num_cont_inputs
 
+

Detailed Description

+

template<int num_states, int num_cont_inputs, int num_bin_inputs>
+class mimpc::System< num_states, num_cont_inputs, num_bin_inputs >

+ +

In this library the system Dynamics are represented as \( \mathbf{\dot{x}} = \mathbf{A} \mathbf{x} + \mathbf{B} \mathbf{u} \), where

    +
  • system dynamics \(\mathbf{A}\)
  • +
  • input dynamics \(\mathbf{B}\)
  • +
  • system state is \(\mathbf{x} \in \mathbb{R}^{\text{num_states}}\)
  • +
  • system input consists of a continuous and binary part \(\mathbf{u} = \left[\mathbf{u}_\text{cont}^T,\mathbf{u}^T_\text{bin}\right]^T\), \(\mathbf{u}_\text{cont} \in \mathbb{R}^{\text{num_cont_inputs}}\) and \(\mathbf{u}_\text{cont} \in \left\{0,1\right\}^{\text{num_bin_inputs}}\)
  • +
+

This class represents the system dynamics by offering functions that return the matrices \(A,B\) in order to allow a state dependend linearization. When the MPC needs to know the system state, it will call the functions getA() or getB() to retrieve the full state matrix based on the current state. In order to avoid computational overhead when the systems state has changed the functions updateA() or updateB() are used in order to retrieve only the matrix values that change due to linearization.

+

To define the dynamics of a system, this abstract class has to be by a class which returns the linearized system dynamics as specified. The (SCIPSolver) or (MPC) can than be instantiated with the system dynamics as a template argument.

+
Template Parameters
+ + + + +
num_statesNumber of system states
num_cont_inputsNumber of continuous inputs
num_bin_inputsNumber of binary inputs
+
+
+

Member Function Documentation

+ +

◆ getA()

+ +
+
+
+template<int num_states, int num_cont_inputs, int num_bin_inputs>
+ + + + + +
+ + + + + + + + +
virtual AMatrix mimpc::System< num_states, num_cont_inputs, num_bin_inputs >::getA (const StateVec & state) const
+
+pure virtual
+
+

Linearizes and returns the system dynamics as matrix A

Parameters
+ + +
statestate to linearize the system around
+
+
+
Returns
system matrix A
+ +

Implemented in mimpc::systems::REACSA.

+ +
+
+ +

◆ getB()

+ +
+
+
+template<int num_states, int num_cont_inputs, int num_bin_inputs>
+ + + + + +
+ + + + + + + + +
virtual BMatrix mimpc::System< num_states, num_cont_inputs, num_bin_inputs >::getB (const StateVec & state) const
+
+pure virtual
+
+

Linearizes and returns the system input dynamics as a matrix B

Parameters
+ + +
statestate to linearize the system around
+
+
+
Returns
input matrix B
+ +

Implemented in mimpc::systems::REACSA.

+ +
+
+ +

◆ updateA()

+ +
+
+
+template<int num_states, int num_cont_inputs, int num_bin_inputs>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void mimpc::System< num_states, num_cont_inputs, num_bin_inputs >::updateA (const StateVec & state,
std::function< void(unsigned int, unsigned int, double)> & changeAval 
) const
+
+pure virtual
+
+

Updates the states of the linearized system matrix A based on a new state

Parameters
+ + + +
statestate to linearize the system around
changeAvalcallback function that will called for each matrix element which changes due to linearization around the new state. The callback function will be called with parameters (row index, column index, value). The values that are not updated are assumed to stay as returned by getA()
+
+
+ +

Implemented in mimpc::systems::REACSA.

+ +
+
+ +

◆ updateB()

+ +
+
+
+template<int num_states, int num_cont_inputs, int num_bin_inputs>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void mimpc::System< num_states, num_cont_inputs, num_bin_inputs >::updateB (const StateVec & state,
std::function< void(unsigned int, unsigned int, double)> & changeBval 
) const
+
+pure virtual
+
+

Updates the states of the linearized system matrix B based on a new state

Parameters
+ + + +
statestate to linearize the system around
changeAvalcallback function that will called for each matrix element which changes due to linearization around the new state. The callback function will be called with parameter (row index, column index, value). The values that are not updated are assumed to stay as returned by getB()
+
+
+ +

Implemented in mimpc::systems::REACSA.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1System__inherit__graph.map b/classmimpc_1_1System__inherit__graph.map new file mode 100644 index 0000000..862097a --- /dev/null +++ b/classmimpc_1_1System__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1System__inherit__graph.md5 b/classmimpc_1_1System__inherit__graph.md5 new file mode 100644 index 0000000..978935d --- /dev/null +++ b/classmimpc_1_1System__inherit__graph.md5 @@ -0,0 +1 @@ +e15c56fc8910751ddd5aef6b0616a400 \ No newline at end of file diff --git a/classmimpc_1_1System__inherit__graph.png b/classmimpc_1_1System__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..64bc87a07ef4ed2788430618c8a0ceffa48e0a96 GIT binary patch literal 7328 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 literal 0 HcmV?d00001 diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem-members.html b/classmimpc_1_1simulation_1_1MPCLeafSystem-members.html new file mode 100644 index 0000000..902f833 --- /dev/null +++ b/classmimpc_1_1simulation_1_1MPCLeafSystem-members.html @@ -0,0 +1,91 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::simulation::MPCLeafSystem< MPCType > Member List
+
+
+ +

This is the complete list of members for mimpc::simulation::MPCLeafSystem< MPCType >, including all inherited members.

+ + + +
MPCLeafSystem(MPCType &reacsaSolver, double control_dt, const MPCType::SYSTEM_TYPE::StateVec &state_constraints_lb, const MPCType::SYSTEM_TYPE::StateVec &state_constraints_ub) (defined in mimpc::simulation::MPCLeafSystem< MPCType >)mimpc::simulation::MPCLeafSystem< MPCType >
~MPCLeafSystem() override (defined in mimpc::simulation::MPCLeafSystem< MPCType >)mimpc::simulation::MPCLeafSystem< MPCType >
+ + + + diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem.html b/classmimpc_1_1simulation_1_1MPCLeafSystem.html new file mode 100644 index 0000000..b0ba9be --- /dev/null +++ b/classmimpc_1_1simulation_1_1MPCLeafSystem.html @@ -0,0 +1,117 @@ + + + + + + + +MIMPC++: mimpc::simulation::MPCLeafSystem< MPCType > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::simulation::MPCLeafSystem< MPCType > Class Template Reference
+
+
+
+Inheritance diagram for mimpc::simulation::MPCLeafSystem< MPCType >:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for mimpc::simulation::MPCLeafSystem< MPCType >:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + +

+Public Member Functions

MPCLeafSystem (MPCType &reacsaSolver, double control_dt, const MPCType::SYSTEM_TYPE::StateVec &state_constraints_lb, const MPCType::SYSTEM_TYPE::StateVec &state_constraints_ub)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.map b/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.map new file mode 100644 index 0000000..b7086e2 --- /dev/null +++ b/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.md5 b/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.md5 new file mode 100644 index 0000000..fdcd029 --- /dev/null +++ b/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.md5 @@ -0,0 +1 @@ +37d93f632e5d131c06c469110b0a875d \ No newline at end of file diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.png b/classmimpc_1_1simulation_1_1MPCLeafSystem__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b8cfeb7055e0a44b048bad70335f2fcd4a8dff GIT binary patch literal 6521 zcmd6MhdY(=|M#89%wDNDBxLWI?47+wvdPFMnJEcTvUj1ZV`c9hM@Y$*D0^g&%-_53 z_4_{8^ZWFs!1p=$ipIl&zu5+4l;PVY zD>Wr~aZ_ku1_^@NJ&X4tPmG#wtZ=dEkk3GK>(9Ng-A2S>gnk{W5&mt zC5~1sDkzv`xY&&*okIEv+Aa^m4a%m%$IAVDXHS(~uw1&=v78#aKw*+UYzUMZp)%tESP2)zpiMz0{Aa%MMr!4H^laOjasaJaiyj8^_!%4YbyT! z{>H}Ry}iBgMw^?PwY8#Tjudok_amdCBqSvMc2`zaiHVB#U@%u`Y173#FCo%-L)w%= ze0<|A!RM@50ZbemX_=XSW@ZpXnpED@^tdPX1}8P4=~QRu+^?=Ewn$=PVsQzH$;n9) zBBI@c16?*sb@l!*LK<;VQ9&Ug%eM0J^2d)KQ%vS*WPBSLVIhxj8bSLVZZbw@{|r8F zij5^RwYhgM1J+fY8PPU9J-znK$jIm|Td!J3Lc zIXQFlpzfIKcUj_+=N3hpDOY-I#9roW#?;pR&4DQe2!6AJ56bah0CFIq=v= zULHF#`}Fj5dwbi~*4Aiqy2;5XqcH@8yWic z4GVE_ap_`7x%;89@nk4Z)9-c8U3uuJFS~! z7FJdszdG@KJV>ztA+0Qdfq@6>lil_djmZuM7X(^U6g4Wc*;L=_$jQnkavC$;x>fgh z&(Zm(LUNo6StokvdWBAb-jyp?_IHdVB_#*yQd3jcd<+Z{Q&LjUXwFcSrKP1FdxGTZ z$=@A$CO&3n?6iQt+cyzuIk}56q}Vc@U0ugVNAN?B9t?i{s-mfRzWte}zrVl6WpaNG zLxGkO6+PUZ|6F>%WuUkB&Fj~09v;6a`tXA<0OF10R8=FDnR|PB%2>n0!*QmtgAeg$ z;uJLm1qBDv#dPoA|2aH7zq-1*ylkwa!_=OR7q*<5AkTD}nE0E6p!3J_@>oyqP?S+l zMa58e_u}Sk$NKs@Cp8BnqouR+%j?uMGzSMQ=RZDu`q0pD6?yyq{Y@4Yn8~ichGFj$ zXf!l50GYJ_mZQDZ;^N})=g$%3`Sa&6x-ihXIy!G!T3T{*nX@eT%3E~!a4v){kzF&# zI?RjZ0Prv}GEPiP%+Jqf_hWWbN{sh*chP9Hteo7k*JEpIYcDUs(J}x5byStxY&#Ai z^;DfFD| z4TjwLmQO=jncMl)+Qq*4cXfyFfcR>KH9zIv-TH{ z6x%#)hCP#`5qnefM%u`T0V``>c6K&Q6in{i+}wu`EQExFWDD|ac(Wt=ii)3FTSGE4 zGjno&j})8MeR6PeVvz9Z>+V)EH@|cH_EdkrOCvE~x#!}5W$=g|`(Aq(;parIii!$d zZSCZTdeI&$}992tio-Xc9F#EQ!FtR8_W$4Abckjq3DJdBkO7rsa3JU!GOx3|e zx_3Ok%+wd*HY1fwHTSU9+0MpBUR#?_Qu5w+Sv#@{0agL`Cqij5+PiDx72m#ngJ;bi z;Wusd)>!axL1LBlw6sKn&u$;{V}-7!_t{nuY<<9_Ul}>s zY70T~_1HsEFn41%K*|$UP5`L>zP>X1%-^)Mw0MMszzI59T5eum0edUMoyjhf)ns_s zA|f>ap--KiFa6Pyn#oFb>uYPb{kC&qWUH#YH8nL&OiZk;e}BzU^7is#xdaNMrlKMw zC^)yc=xOlT-_LJvfB#O<$zj`5TrMuI^OHp>)*labbiT#jP|DXUtf{GKYC7%I6m$Mj zU)9{)oSU0lSLZkW(YBROK}KAvd?|oOuD~ zBP(v+>_w^V?ne3L3`3!*f1vpS8TQLVx>_TeiTX zVacGw*>D(aptdn)AFQ*@4w4H9pl$7VeGP|?SK_0g0#mH$B7xCkLtR}8dU_3}SXo(F zFK=%KsUR~018Q2@{I_p;_g>BrpRrEY2@=ub#$h-)Ij8EqIgT&mXaINImXv%TI1xp| zV^Cs-e-?1s2K@5%YdJ7eU0upumdWvP%Po3(dN_q2KYpmIs~ZJU_|v}4&o_dT8y)pM zIdm5j6QhfM?m=`>i_+WO-QCLzU0i(q+Ol`fUc49_9!`jjEiWtU>F=lNqK~4L>5F_D5RByH=5`Ja zk_IV|Za23zGu1x)A%2H%$Dxm)P2!&k`#)~%|GHrhFmHN%x-#sfU6lOv?in$4f@;RD z$bD40S^X}a%Mpt)|{%1k3v z!fMA()pvLqU0z~VV8fd{#{9Ic5922)EPOUB)f4~3j*713+&Bij6qM3$?MAO7@fVBzG`i92^xfGc)Vh zYtO>iP|-+jtafa%2H2AfqGe}}_Uwr+eKFM|y0ing0tNOZ{FtIKQkh3Pc4aN+rD+DZ z#1IW)=ucODgXiXQDXDDb-#S0!OA6Mt_@t#5Kf9a#vJVRhNgT2IdMh=p)e^xLk*<(+ zyC}%<|HDnk`EfFDf@*PoK50U{n4Fp#A%YSR(ETp!_6mGJg#3{c-8|~X4LPs&1>#@7 z2)nvyB2Bu?;FYICS!Q>J%+1Vh?|ekPc7KhTbC+}jto|o3{4Yc|?z*{c0_n*YTiw~F z?-ws3E_CSXE7Y4wIylU6iHL~UaGl@iC5pl)A_4}es;Z*Gj4ZOd(IRb^b;T+!VPhw! zq(}yzH8wY!>+1`#v#*R-*c%%ggK=IREhQl#Q6j}gNUvR61Fe~vK^-z(xNxD!p!o68 z?lRB=m?JjINbu!|g@eOVI73i=em;nWQO(19%E~X||rs6O_kR`ABq$IfWwMOiToYT$r1qrK3}nm#?g>OqUA2BPLdto&BrkXHePz z6G-M{wae$;UZyyVwzf9NA`$`_VPtf)yQ}McUf%h-Yq0j*)bDpZ*TKbx^De|_PPobi|u5NjCRZUGT_-Hw=qoV^{ zA4CCWa!g+zy16+>JW5nTA}uwQJVG8Eg01cR$B+DU(f^DY71euy83)Je(o!whZKQRf zKW%)G*2fg4QC2oonVH+DtaWgZmyJ!?=;$wsg{9hSSqF4|d)wnI7F?`m=I!w&{{skc zU_gA=K?aw1yP{}33z~kt8bbb1ySnWFwJ9zc#)hw`A zd#j^@bnCmzL*Put9wgA1`FaNNulB9X&BdptuFTH5!$XaY8LdhEesU2PcAx3Sjlh6_ zm6er5p8Eq%?z+0Vkn{8N*}##5+LtyTse%=DRK>b@5eym}D~#S~$vp`^X?1ljUfxZJ z@%#JxFnc2-BWuQY?%Vj|8knc{J+BIQP{{LoIy#XtF`222et7ME81R3~>+4+Y zsMG#zRpNyeUnC{YZu}BdPg6p6>8RUrxp0rXH_V`C%ODGm-bfW>zcl&l@QUG&SBjlt(ZkfjY$E+7z5 zVe1>>bSM9CtgoMwlLLxynz~7I}&1Yw)$K~PDFg!V0Y|P}#kPzVi zNS#z?pbKk#*(8tfu4@L}Z_p>TS%O}|mV08>~I)tQa3xWI3d4x1-X=w=?8yjs}6Eph!d3d;H)*YCp^`#}+>(_sb zk4Nl5jEKX`!LA-39-1{iB5N?ccKv$bd~d?ZNdSM!Ne77(%u`KO70kyi4i1V4c_>4m zsM)l)r17T!j$}AL#I0TcVg`0HH8mv&3)QbITRny3=@Xunlp7Kf(%C6b5N2g>zqqk+ z-g17*BOovYS6ka`!$xzOk?ipI@9}Tm{90cR1bYdTVXl(=L~ln$Sz21!(UCn&*4@o* ztj^P3U!UsycY8!rQ&Vp4+-yg9jq|t%q}~DCWnJq?I|b5C4Ca=I2n_;EZ2=I=&gNg% z0V93=`t_`!qk@^MknAw*&2~PPGJg|dkq{0>If>`~G(_(( zStv(DA8lFyy-7)~Ff%iAaBy&PqN}QeP^b{ucPG$f z04PKAQ+vK|ToM%*PfSSIJ2+UJpLdz4j4&J<9MpmY0Xp{X9b#``^6z20QJFiyJ;TI0*3$K@6@WCnez`7QD1j zNI=%Z4o#rhPGVM`xAgGX25SJ_0>HApqa!*xy4=L|PUD8&jw;@#&g_1bSA?uqR#yK) zGBA#b2}s(M@6SMyd6M(Hrw>CyLqo&DxntOj$L&I^cnm+^{AoKQi zXjtTAMoK??c#cwj_^_n0@wUB`LD~T*eOgM2ikg}=)#DRG1!nSlW@h{X0!4*|ch%La zDl3VIh=BC9O-vj?S{S#K=s~04(xzzk^p*B}h;O=({*Nssh#Dx;0Bznw@QBYYUxEIF1ys z<={Ix=z26==vg7W9v^I!qS0&6L0r4m_vOpR(h@H(Z|g#RZEbE|o}r;(#RkC^JI@^Y z;P=htd*AkPfgyo#Knlpn$OP%4gHH#KHH2moNr?dIq0F;j0fC0WAN{Mkp^OmBAh0`o z*V>!Fp_w7>4QUUUvBveMql3fP*jU;5vc>tpSli;4tXDBH&2F=@Ha0fEI59CXz|7E% zH3*lswA_cDZek*J^^^=40;ptncXwjKge6XeDRztp!9t)Q_B`5s00M|MV?Zn*i$NNs zq5?vM$UHV52HMvBis1_e^L2Do6U-(1gI;_YQk$+wDrbG!XTgQ6{CteGMqgR>30NB( zbYC;y<$RUSQc)!D#$w4!3vEw>?*!%6Z0ggcUECo?f L(2y^YwFvzmhgzDc literal 0 HcmV?d00001 diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.map b/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.map new file mode 100644 index 0000000..b7086e2 --- /dev/null +++ b/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.md5 b/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.md5 new file mode 100644 index 0000000..fdcd029 --- /dev/null +++ b/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.md5 @@ -0,0 +1 @@ +37d93f632e5d131c06c469110b0a875d \ No newline at end of file diff --git a/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.png b/classmimpc_1_1simulation_1_1MPCLeafSystem__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b8cfeb7055e0a44b048bad70335f2fcd4a8dff GIT binary patch literal 6521 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 L(2y^YwFvzmhgzDc literal 0 HcmV?d00001 diff --git a/classmimpc_1_1simulation_1_1Simulation-members.html b/classmimpc_1_1simulation_1_1Simulation-members.html new file mode 100644 index 0000000..63547b4 --- /dev/null +++ b/classmimpc_1_1simulation_1_1Simulation-members.html @@ -0,0 +1,93 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::simulation::Simulation< MPCType > Member List
+
+
+ +

This is the complete list of members for mimpc::simulation::Simulation< MPCType >, including all inherited members.

+ + + + + +
saveData(const std::string &filename) (defined in mimpc::simulation::Simulation< MPCType >)mimpc::simulation::Simulation< MPCType >
simulate(float for_seconds) (defined in mimpc::simulation::Simulation< MPCType >)mimpc::simulation::Simulation< MPCType >
simulateToTarget(float time_out_seconds) (defined in mimpc::simulation::Simulation< MPCType >)mimpc::simulation::Simulation< MPCType >
Simulation(double delay_to_simulate, const std::string &plant_urdf_file, MPCType &mpc, const StateVec &initState, const StateVec &targetState, const StateVec &targetThreshold, const StateVec &stateConstraintsLb, const StateVec &stateConstraintsUb, bool withViz, double binary_force) (defined in mimpc::simulation::Simulation< MPCType >)mimpc::simulation::Simulation< MPCType >
+ + + + diff --git a/classmimpc_1_1simulation_1_1Simulation.html b/classmimpc_1_1simulation_1_1Simulation.html new file mode 100644 index 0000000..76d1b53 --- /dev/null +++ b/classmimpc_1_1simulation_1_1Simulation.html @@ -0,0 +1,108 @@ + + + + + + + +MIMPC++: mimpc::simulation::Simulation< MPCType > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::simulation::Simulation< MPCType > Class Template Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

Simulation (double delay_to_simulate, const std::string &plant_urdf_file, MPCType &mpc, const StateVec &initState, const StateVec &targetState, const StateVec &targetThreshold, const StateVec &stateConstraintsLb, const StateVec &stateConstraintsUb, bool withViz, double binary_force)
 
+bool simulateToTarget (float time_out_seconds)
 
+int simulate (float for_seconds)
 
+void saveData (const std::string &filename)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1simulation_1_1VizForces-members.html b/classmimpc_1_1simulation_1_1VizForces-members.html new file mode 100644 index 0000000..b2ade52 --- /dev/null +++ b/classmimpc_1_1simulation_1_1VizForces-members.html @@ -0,0 +1,91 @@ + + + + + + + +MIMPC++: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::simulation::VizForces Member List
+
+
+ +

This is the complete list of members for mimpc::simulation::VizForces, including all inherited members.

+ + + +
updateArrows(const drake::systems::Context< double > &context) const (defined in mimpc::simulation::VizForces)mimpc::simulation::VizForces
VizForces(drake::multibody::MultibodyPlant< double > &plant, drake::geometry::Meshcat &meshcat, const int num_forces, const std::string &bodyLinkName, const double arrowLenMultiplier) (defined in mimpc::simulation::VizForces)mimpc::simulation::VizForces
+ + + + diff --git a/classmimpc_1_1simulation_1_1VizForces.html b/classmimpc_1_1simulation_1_1VizForces.html new file mode 100644 index 0000000..233c34c --- /dev/null +++ b/classmimpc_1_1simulation_1_1VizForces.html @@ -0,0 +1,120 @@ + + + + + + + +MIMPC++: mimpc::simulation::VizForces Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::simulation::VizForces Class Reference
+
+
+
+Inheritance diagram for mimpc::simulation::VizForces:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for mimpc::simulation::VizForces:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + +

+Public Member Functions

VizForces (drake::multibody::MultibodyPlant< double > &plant, drake::geometry::Meshcat &meshcat, const int num_forces, const std::string &bodyLinkName, const double arrowLenMultiplier)
 
+void updateArrows (const drake::systems::Context< double > &context) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1simulation_1_1VizForces__coll__graph.map b/classmimpc_1_1simulation_1_1VizForces__coll__graph.map new file mode 100644 index 0000000..19c63fc --- /dev/null +++ b/classmimpc_1_1simulation_1_1VizForces__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1simulation_1_1VizForces__coll__graph.md5 b/classmimpc_1_1simulation_1_1VizForces__coll__graph.md5 new file mode 100644 index 0000000..a63c9b8 --- /dev/null +++ b/classmimpc_1_1simulation_1_1VizForces__coll__graph.md5 @@ -0,0 +1 @@ +76adf16fc6be0f9e07fae8b200cd532d \ No newline at end of file diff --git a/classmimpc_1_1simulation_1_1VizForces__coll__graph.png b/classmimpc_1_1simulation_1_1VizForces__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b6334e8de38109b17dd1a1635ff66dab74b0325d GIT binary patch literal 5464 zcmc(jhf`Bg_Q#)6M4BKS0hJC00ud0ACMGCVKza$qAVsS5t^uTjfFKAW(v%`idJjzy z=`9rL5V}$Yr2MY?+uhlj{R8%9l6U9L%PsGm^F5z)!!*?IQ<1ZhLl8uz^Z=;^u4CXE zMRp$imbW};0vA#XmHSBO?C&SN{$o4@F;FQX?`nIdZoKo6);>J@D)*JAQWW`eWT7ys zj2oq#{nH(1edV?Gm4rlbrOr6J{QDzZb}_;+Iwh`Nt~;T4i9MBU>sVny<%&r`MZ~?p zcKhVpjdDG|ecTh1!!Ei+_U;t*5?rPTzG%YDqQlgigt}f9Vw5KIf(E*6L-Abxlwy}N zh+iJA5PJS^ho4M$d}3m4Z7rLJ1Tl3jzVlIzDlY%*EmLi6?U>#EClzeueeeKiBu4b4 zq-yVF{mORb+u?9@-SX)9UZ(5FbKbNH^y#28>r#Jkdg4QT_iakbg~srxsP1YPg6tR5 z2ab+Kpw-mWBqSu1l~Z0)@UN9`Ck{B?`kHw^CP_8t<;$0UZ_oc`wzsnKING(zb*=Y3 z+}@a|3|LZBR#Dm5*l_03)zuwXaU~B%IL{%OnBHKq=Pyj^)Muu&c(%r2)agQfx*zz(X|kEN`^mw{@j};6Omzk|Nhr-h8xBv zCe_B9Ut_LT+D|+&GfV&QVRmV0f2sQl%=7H@Bqt|_sOx?-n}LIQ(uX=$kz8qG1$(`4r8=;%wlzOkW6&%o0(KJNWBntg}RtM};9m*V28fV0yV zL>G4V_Bt`!i9$x6(rNrM7Oilj3K%zc*7T?F%hz0)OB5qNefsqK=QI(NChIrum@>dl zw*__z8b!r}ITRls-@}K!U_q;^ws-E_xeH%iSz%yc*xTEi#rgU9Jxr4py?OIaz^QZt zpH**~y`5dzmoF5Ql&#nm*P4h36?=PoBcq9)cXzCMQo}al`eJs5^Yy~R!-Io^O-xMM z+S<&`&GAjKoeRy)3NTMX&%3TSa3+SxjO7A@FY524g4gK(Zfm@w<5O1F0(c2mZaHY{ z=}nhfs(@x`nVpt~_V%tx5`MXW(mao(;tIr(k&!ih^Oc>Rob+A%mH=h|^BfpzvBf_` zP@)S83rQg{adGqE$w}k8@YCa+UWHMqXA7Z~mA7;&Dk`EQBgG^nq9Y<&42x4{sHmv) z6TZ%a)q$;r4QLn{<>%x`h&;!c6__@1p!zpA9qjElzJFI0#bM`#6`z-v@8JS3lAX2vjc-tKR+a6P zhf^Q=#&%-za&tBL=?iRaZ3U}_nwlWE6$XPJACG&$O?+2DK_N+%w_$mqGd?dbkCK!q zzrp{66-qBEin&IHy|%r*4IJHZs*W}rhsR3_32lU2^)LSNWunaHk%0lr2nRjA>&ifO zVq#)sBqa$6iHC;=Sb8W^dS+%I!|Q|u9UYzFp`l;4dU~VRYH4Da&sn_Gr1A4RX>Dx< z(=9D6xvhxhuqxGuU`ot-}~Fz z*)8lGhETJwuC2AS%+1X``JPmQ>AXxGLIjD3iM@`Gf9l}Cc${dK$xH6x@jEp&HRRG& zVRW4*4omXx-8%>ZCie09Gx+f#9}myr;h}(_VEDzv_&-+DJTxNAGJ*GBLt8EU^oZo| zW+IW1k-)36?(p8T>_7tpzq{o)HS*bL%+4KnAO@4wS6o;qEc?Fb!v|6G=Ab{ne_oYx zec+Uf#Wo-A5Iz?aq`rG+084!F0taIA`1n}x#tq=?S7p4B9|wKBy&=fi+4;$nCwN28 zLoh0c^uofz&5e!4El+(@eN_z&4F!efdY|9NCnqJ0nz(qrhyMHPEc^Z8v?9z%x9i$< z8pw+@a*>k2p*A-+D;=kooFu`zIy*aotx75@-^?XFc+NfQ3O3)d_)JYr%|>keCDoOn zc4ih99&YY~gM(L{3w?bWmoCMevUhc6XJwh0D)YvBEqzb68O*7!s?y+pJu_n_Cntxa zU_8;Ua{2%QHX@>{HH_{OyVUEnGKYopEeob0vxx2#Id;E};1B1J@zw@|4-P&WHw+9ubi(gwc-mgEx3?S&SB%fK+gLdU|wpl&@FB z!90k^KgjIwz?5cZTRwThJJn-RGE!)w@|wz0Qw z%L4+ZuC9(jjE#&i)>4dK5`J^#@?{Ha>rc74N}2sr4Ssh-o($%wDJv^;aBzUI__M#U z=8>tR8*2cU5Eo~c^~H~jxC1W+qR%93{OR-OsHiA$2?-8npwz(GfcOLd7D~d`dGD

ME@D|T!=*^fWr<>6^-Z52sY1>z1O@x@PBe6jgG5S#w~{w5|r%4`OgU8Veq z=&X)*S3q=GAdosiEQYvr%QSJFGIiWj6gxC8VX&&fGjUH8nEhQ+>Uk zvNE~U?z$wUL`oD74-$o=AJ{@o-llV|jOiP>5*w3#X zi^ayq((1N3EctKy-Q(ru#V+~_pznQ)p5O8W(FxL$xTxsiui1NAT3Y)0cs_R@7}po{ z(D3k&lE+^`(EpsOSK*BxEiia&VX-|QBS(EagR;b_B_px{2^1Dm=UWW&?F(}PTOG3^ z8aPRpBzzxf3+gznT%#)y6ckjrcQ034Fc2pqDk>l(Bm{#|l9ByQ;=ahxn3?pB0nwVP z(i}fQG+&XhYl`nANd{}m)5+I|>8h!9r`~pHIztRI!Sv;Uz3YAS^z;bp>+5rK*ft+8 zul^NR>X4nk$(o&1PVuRY%_4zNSy_3u-315u0Ar+JkW|d%uX(np%o?@7I-DOJ9SxMN z(73u35YhXzzP`SurlyRHjMytQxi_VIYdbhpc?a9tEN2EWz)_x#6eNq;#6?H<9PO=@ zDAJ>z+S&qb)Yj1ft`p6Ehj+Qnq}IJV+^B4;+k00AXbtDn}E5`m!VgKxe zyuf0WZB$;71WEry{36+**+MEl*%;foDyXA4)p=X0tgsJ8~o@-Ma2d^&&W8w8X%oeky=8vJ7?v5xJ`#bc|r1yaJb9~ zZOrJI&AE=57wFe)vRAvmc@Io@DjW8wQBwa>z3JB&M{dy6h$H1@{aCQ<# zzZdD2&cwraW3BOmb>tL!>SyEGO*Ms=Q&&qDOHUXc?u{(djicabs1B6Z<3V1tkNxQ{{Vj5o(@Rz!7$SPWcUwOO>5@ zynvw7Jyk)>E0JV2oDs~0aLPtEzqL1-=oyig_A)L`wLZX`{`ox5MeWsAe<3NU)t4{F zwP?9+Ha!;m4;ueBmjBN>&7qAHVlpy*S+&>B1OEE)BVj;Sv{X_`N-KAWb{%3jSJaR) z*U--D=oC;gY72GQnrovi|7Kmsbz4fx8@Om@A1!9V$=#h}MR?}$KMM_cxbpk-^z^5r zg-S-jyDTbb?jb8)6VV{n@L3Dk$!H(YjVz(rtBMAy^77C-b<+mlYHjbU?Ck?}WU=;S zqVS_XeeFD*$N=zxUI z&c>D|iNQD#w5qy2=$jT<*0c`GYI7#-i{kJ_(`&zOV^Tg^lOJ;9BuoHoYG0e=%g z#9amexL8=&sI69qa&b5u7%wi&pxkyC@Zgi~w`<^T$xgIt!rkJY&4*VIVmeCzKo zsjE8%aBXO4c>VfycX#&_ceP@eTPOm~NKbF~qelG3jjn+K1PoRH#2)Y?fREo`13teu z2?fspDXXPOSYj}eckbLrBFic&&O;WDALr-g0c->5so{9L>*K@s;g{Pnh?uK#91IL@ z;4eVMCMq2-z48CBKHVq>hr@5(@&GCNmcwL~3xOJ%0Sx$7%FPyuM557CO_@7DNUMz< z0N6fzhDhm-j*4ny`cdUPU;DG6>)SWO3OfTkI~dL}khU!Xq}4|s)payA4QgC%Kp_^0 z)6moVsFe$nCCG#CzkCCjW@l#yG||u3*VWaPoPxptHUbEYlarH@ib{$5a+G4q9S>p1 z3>f5q^2M9Q#YF~sdhk4-YLc0a4GS}~r14SPH9kHo2ZznsSxs$iZrRe3l9GY~JCMvl z#X(QbBPn?Ra316iycQf@1VBqbK)`RO`xeOR`n7#OxX%YkDiZyzCQ6!vF4DaQEg@mc z7F0`w0)*E#1_$=&e|B1*nmWm3>MP1@4zO_Qi`7Gr?u?95a&vP(e*Bo5yHdQ&r0nm1 z8ce|iFd5{Ba}b^-m{}i|SXWn#yI_Io;D z=g`;rB&_}WcNiaENY^5OBpyD#OO(qiD|a=u0q<&RmSkjba&ZxvW@TsV7#T$v(OGRT zbej6@4bQfO7#SMs!$yi4Pi-9?W7NVkXlhcB^85A6o11BG->xn$CZwd)2Auh?7Xucs zw6kO5;Mkm>2L;b*& zHWg*x;2;GVS!h_8vzwcY`#K&=Lh%bFD=T}6Ls}pBCV>3LauKDJTaMIZWJzK+TA-@H zY-dp;1{y!p5XV~dBsDfRR#yIw<59^PsD;h0uloXF0|6Oh%v34|S7;~ii=fGnfBjU7 z3u$YcSH>exN|E~iXCDxY8jjVa<3N;^50p4a&b`_xAZ65CT$!(4y?U5q790{H=edegy-m}(dVb89Ox8TWG;-vbd&P6eknq6^e!252JM_=3fm84WZV4TOu4 zacO2oL`3d$e*O({@$%y0;>^s)?U5`X+((CpNjSF$+b_;rqLDPM-Q84j0_(tYo##oT z6xWy}ta{jdwoCG^uoeIOUNa_ zdb3gB4I5QDwB=h`T3W=F^V5@$2#d*4sj!3U`?8%ci1^IRd9&?7OoHHx>%^e)`i@vl(e@N)q+3mroc6QPt>AATA2*fjR{PSMbf*n(u z*mo=j0u_{(RaKI_@neI7JKKw0GCupe`}@?7{m1n&zTFXI*goqrIzIJ-qa$)Eetv#y z2M2(v?MAJ~;1VtCy}P{BokB~TEaM{)h@)X;WMD{$i@VIhF*Q6~Zr#rbTe*QiY=2L_ zIXgScM*S6!_xw@g2C8sShk$B?mX@}=yIWgu&jmOOCnD`8DT}aK4>N}CTs_(Kf5Zax zUmX$F(Hhe_Pf_xE`F3fpqZoGLfD#7GgUH>p+Q + + + diff --git a/classmimpc_1_1simulation_1_1VizForces__inherit__graph.md5 b/classmimpc_1_1simulation_1_1VizForces__inherit__graph.md5 new file mode 100644 index 0000000..a63c9b8 --- /dev/null +++ b/classmimpc_1_1simulation_1_1VizForces__inherit__graph.md5 @@ -0,0 +1 @@ +76adf16fc6be0f9e07fae8b200cd532d \ No newline at end of file diff --git a/classmimpc_1_1simulation_1_1VizForces__inherit__graph.png b/classmimpc_1_1simulation_1_1VizForces__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b6334e8de38109b17dd1a1635ff66dab74b0325d GIT binary patch literal 5464 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 + + + + + + +MIMPC++: Member List + + + + + + + + + + + +

+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mimpc::systems::REACSA Member List
+
+
+ +

This is the complete list of members for mimpc::systems::REACSA, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
AMatrix typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
BMatrix typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
get_angular_velocity_bound(double rw_speed_final_bound) (defined in mimpc::systems::REACSA)mimpc::systems::REACSAstatic
get_angular_velocity_bound(double body_Izz, double rw_Izz, double rw_speed_max, double rw_speed_final_bound) (defined in mimpc::systems::REACSA)mimpc::systems::REACSAstatic
get_limitcycle_v_bounds(unsigned int num_break_thrusts, double &v_bound, double &x_bound) (defined in mimpc::systems::REACSA)mimpc::systems::REACSAstatic
get_limitcycle_v_bounds(unsigned int num_break_thrusts, double system_m, double f_nom, double t_min_on, double t_min_off, double t_max_on, double &v_bound, double &x_bound) (defined in mimpc::systems::REACSA)mimpc::systems::REACSAstatic
getA(const SystemSized::StateVec &state) const overridemimpc::systems::REACSAvirtual
getB(const SystemSized::StateVec &state) const overridemimpc::systems::REACSAvirtual
InputVec typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
NUM_BIN_INPUTS (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
NUM_CONT_INPUTS (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
NUM_INPUTS (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
NUM_STATES (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >static
REACSA(double systemM, double bodyIzz, double rwIzz, double r, double fNom) (defined in mimpc::systems::REACSA)mimpc::systems::REACSA
REACSA() (defined in mimpc::systems::REACSA)mimpc::systems::REACSA
StateVec typedef (defined in mimpc::System< num_states, num_cont_inputs, num_bin_inputs >)mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
updateA(const SystemSized::StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeAval) const overridemimpc::systems::REACSAvirtual
updateB(const SystemSized::StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeBval) const overridemimpc::systems::REACSAvirtual
~REACSA()=default (defined in mimpc::systems::REACSA)mimpc::systems::REACSAvirtual
+ + + + diff --git a/classmimpc_1_1systems_1_1REACSA.html b/classmimpc_1_1systems_1_1REACSA.html new file mode 100644 index 0000000..7773de4 --- /dev/null +++ b/classmimpc_1_1systems_1_1REACSA.html @@ -0,0 +1,331 @@ + + + + + + + +MIMPC++: mimpc::systems::REACSA Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mimpc::systems::REACSA Class Reference
+
+
+
+Inheritance diagram for mimpc::systems::REACSA:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for mimpc::systems::REACSA:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + +

+Public Member Functions

REACSA (double systemM, double bodyIzz, double rwIzz, double r, double fNom)
 
SystemSized::AMatrix getA (const SystemSized::StateVec &state) const override
 
SystemSized::BMatrix getB (const SystemSized::StateVec &state) const override
 
void updateA (const SystemSized::StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeAval) const override
 
void updateB (const SystemSized::StateVec &state, std::function< void(unsigned int, unsigned int, double)> &changeBval) const override
 
+ + + + + + + + + +

+Static Public Member Functions

+static double get_angular_velocity_bound (double rw_speed_final_bound)
 
+static void get_limitcycle_v_bounds (unsigned int num_break_thrusts, double &v_bound, double &x_bound)
 
+static double get_angular_velocity_bound (double body_Izz, double rw_Izz, double rw_speed_max, double rw_speed_final_bound)
 
+static void get_limitcycle_v_bounds (unsigned int num_break_thrusts, double system_m, double f_nom, double t_min_on, double t_min_off, double t_max_on, double &v_bound, double &x_bound)
 
+ + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
+using AMatrix = typename Eigen::Matrix< double, num_states, num_states >
 
+using BMatrix = typename Eigen::Matrix< double, num_states, num_cont_inputs+num_bin_inputs >
 
+using StateVec = typename Eigen::Vector< double, num_states >
 
+using InputVec = typename Eigen::Vector< double, num_cont_inputs+num_bin_inputs >
 
- Static Public Attributes inherited from mimpc::System< num_states, num_cont_inputs, num_bin_inputs >
+static constexpr auto NUM_STATES = num_states
 
+static constexpr auto NUM_CONT_INPUTS = num_cont_inputs
 
+static constexpr auto NUM_BIN_INPUTS = num_bin_inputs
 
+static constexpr auto NUM_INPUTS = num_bin_inputs + num_cont_inputs
 
+

Member Function Documentation

+ +

◆ getA()

+ +
+
+ + + + + +
+ + + + + + + + +
SystemSized::AMatrix mimpc::systems::REACSA::getA (const SystemSized::StateVec & state) const
+
+overridevirtual
+
+

Linearizes and returns the system dynamics as matrix A

Parameters
+ + +
statestate to linearize the system around
+
+
+
Returns
system matrix A
+ +

Implements mimpc::System< num_states, num_cont_inputs, num_bin_inputs >.

+ +
+
+ +

◆ getB()

+ +
+
+ + + + + +
+ + + + + + + + +
SystemSized::BMatrix mimpc::systems::REACSA::getB (const SystemSized::StateVec & state) const
+
+overridevirtual
+
+

Linearizes and returns the system input dynamics as a matrix B

Parameters
+ + +
statestate to linearize the system around
+
+
+
Returns
input matrix B
+ +

Implements mimpc::System< num_states, num_cont_inputs, num_bin_inputs >.

+ +
+
+ +

◆ updateA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void mimpc::systems::REACSA::updateA (const SystemSized::StateVec & state,
std::function< void(unsigned int, unsigned int, double)> & changeAval 
) const
+
+overridevirtual
+
+

Updates the states of the linearized system matrix A based on a new state

Parameters
+ + + +
statestate to linearize the system around
changeAvalcallback function that will called for each matrix element which changes due to linearization around the new state. The callback function will be called with parameters (row index, column index, value). The values that are not updated are assumed to stay as returned by getA()
+
+
+ +

Implements mimpc::System< num_states, num_cont_inputs, num_bin_inputs >.

+ +
+
+ +

◆ updateB()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void mimpc::systems::REACSA::updateB (const SystemSized::StateVec & state,
std::function< void(unsigned int, unsigned int, double)> & changeBval 
) const
+
+overridevirtual
+
+

Updates the states of the linearized system matrix B based on a new state

Parameters
+ + + +
statestate to linearize the system around
changeAvalcallback function that will called for each matrix element which changes due to linearization around the new state. The callback function will be called with parameter (row index, column index, value). The values that are not updated are assumed to stay as returned by getB()
+
+
+ +

Implements mimpc::System< num_states, num_cont_inputs, num_bin_inputs >.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classmimpc_1_1systems_1_1REACSA__coll__graph.map b/classmimpc_1_1systems_1_1REACSA__coll__graph.map new file mode 100644 index 0000000..476ebff --- /dev/null +++ b/classmimpc_1_1systems_1_1REACSA__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1systems_1_1REACSA__coll__graph.md5 b/classmimpc_1_1systems_1_1REACSA__coll__graph.md5 new file mode 100644 index 0000000..40ffd60 --- /dev/null +++ b/classmimpc_1_1systems_1_1REACSA__coll__graph.md5 @@ -0,0 +1 @@ +7eaf0fc06e4084bcdd818d3954e7ea48 \ No newline at end of file diff --git a/classmimpc_1_1systems_1_1REACSA__coll__graph.png b/classmimpc_1_1systems_1_1REACSA__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9e68c9a06b317c34419f0c3483803c8f8832db7e GIT binary patch literal 4056 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 literal 0 HcmV?d00001 diff --git a/classmimpc_1_1systems_1_1REACSA__inherit__graph.map b/classmimpc_1_1systems_1_1REACSA__inherit__graph.map new file mode 100644 index 0000000..476ebff --- /dev/null +++ b/classmimpc_1_1systems_1_1REACSA__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmimpc_1_1systems_1_1REACSA__inherit__graph.md5 b/classmimpc_1_1systems_1_1REACSA__inherit__graph.md5 new file mode 100644 index 0000000..40ffd60 --- /dev/null +++ b/classmimpc_1_1systems_1_1REACSA__inherit__graph.md5 @@ -0,0 +1 @@ +7eaf0fc06e4084bcdd818d3954e7ea48 \ No newline at end of file diff --git a/classmimpc_1_1systems_1_1REACSA__inherit__graph.png b/classmimpc_1_1systems_1_1REACSA__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9e68c9a06b317c34419f0c3483803c8f8832db7e GIT binary patch literal 4056 zcmcInc{r4B+kRw7vJQsGkZj2=P1#Dx5+S?a7&3Ool07?FLdafr$reWTeM<}x8M4(V zGLa=~mTd3c`+djpe#iU&ch52N95cr~&vV_^bzbLrUeUVRYV@?6v=9W*YpAQ}fonf_ zyV0BipYoR7Yv4kS)l^e~PX4~~+KQ7Qh%rt>McKeNYn9}r%VNxRdYuJM$N%gl8Lmak z7jw&5*;*xBL~>5W<#r?8ovhNjNfBLUiFcY6(++IqlwPmDMewCudioAx5!XwkI4i)a zd|5B%=Eb|6yw^h1vAq55JUiLXRpDXHf>jHOkTQoP(Tn0E z`mF8Qx3q(ZaJJ`SG?!r*_Vx1#1Wg^C2`{$D4+8^E6L?HBe(q#@vGvo$gwOt_4aV5A zGb1CzS0M*q=Bu4BgciPgqHxbdkyG($d@S8*OcEG+|kCUXER1RQ&LM0-?CBj!pU5;-Y=etiPWhAC0t< zQo9v_L0-PaXXcTRurLjYS((Y$cw&Cunumu+`o+r1%9pV*&&_!a&N$V4-Fg?2NOJ#` zlyKfB#l;H|XW5xxP448F_XFk_Ooio4XlQ6&9LhlwN4L zI63K`Q@M@~3=D)qj*o*p4F!|$3$uE%g9L7Gd)Btq*CV336$AgUV&dZBNDZ#JKa$J` zja*#tj~{n;M={C{ejXjAggDNhSNU9tX|c_ll5RZ^NHSiS6BXmYOp6aAH+b%> z+cgE`$$WqE%#68bS!ya<^8+mQ7GGkYbv4#d6yYSU(etUy*i_WW#zr9Z?kCC0o4mZq z{o~`~i{|n1@s$e^{@>{&(6p?y0^sxjKOHB>@=#|_PtWM63<|ZoGW8dcSFc`GZHWjE zH!w7mMWGH34k}G+RQcf)(9@?mJdFT;iHRfY>u)xP&vSk-7S))_4L)vi7!_oQs`31( z_hF0pb2~aZS}g&YPudGO)--s@NGFOuIy$;=;exEJEP#!bmDR#f_VViL@9k}shF$_8 z_u9jkRaN&lhB}&?|8#~@Dk>`K>+4Iu&=N%qklmq>iV9~mI@3Ue3YwgniinJKnQ3h* zE7RnMlNujB?zg_npERKdUphWI=<4b+H8q`?nTb*L+LDu#^Yix?5)@>hr{CB=JUZCz z__JKZ<+=kek51b~lgVTX3JQ;fp+a5Z%SPpW0|WZFjI69zdZow5$1#X#m87(^dixPR z5D6%KQWCtjEkED#C$SKAiXt#~57Yo~kf>SXGc7^Tb!lm7FG&EhTU%QrHpm1u!DP0J z!8=oS8X6iIntEScZLFJ0^%J*DYSE$VH?ak@ylgUK+^T;Dgm;a%oZ2d|! z(&)dpty5}%|NDI~&8Voz+U%DY)Hyj>^EIfYY}x(azdAadAbHXuhz3@Wlw^cSx8itE zU;B2p7EYrIL8S&prc;6louy_zN~lIwCegmS`Hw`YK_vbzKhbGI&J&%a95R(*YWOL; zU!xSu7S;XmnwVTULAMk4;c2&nl(gS*r-5Md#Mq&toCwiUgPOwDiMpWR<=3EPy+^-7 zc=KK_#pCZvvr3|6gfAa>OnYDDGDp~fCp{iWN6))|vcU9_H;ambsZSF;^^)>Krij*V zZsmoAKGPPlvm1@o)egr3Vy~c@LJf_6F|Q7n)VpNdP8;e;J`jw>JMK7Jmtzm+_kbHsmT?A}BK2et3L@c*sL|52v@ z5fk3>PMosIe+u{ixk0kv&?d(3Wc9h6Ew-8?0Rgp;yI$X5?NS?TYLY6u|XcW+%bqx)gg?jAl>3}yGZyf4AQuCs8WDLqpn2CP! zL|scOMV+6Gjg1h`?cwR^>E@<8vppwH6J}s!L`_ZY-eg7=zJfvp|NdmGCFpUmvub2y zL`g{rct`;`JTZ~pgKaxGK3Eve6-w^s=H{lNqIy52hx%6Ds#QNXH}{1^k_Rf<(&CK6 znTU>O%lk~?>ecx-cXz+mIk7WDQ9|zsgwx{iRdY~OL+@GlCZJxHHB&)BK|q*1Jz1f3pt4>* zKE*{v2n0ghw0a((Vu_Z81_n6$G$V4}z3Fqkb6IIA1q6e^=olF48yX4%-@kvaprC-m z;fhude@|G*U%y^uQa(NX&vtdt;ob(IYM!9I{F0Ksp`l+N^KZvUOlEB46=mPzf=9o4 z^$Hf%EoNG6-8*DsV{`xheb}iBqN3%kt>>Ks*1v`73TN$Mt*s5{cX^_cJ+|k}nKM6r{P2_`kw|SVEeD3)XXxp@JUlKYs!K^p0Yrh! zCm^Cg=oJg zyHh|wUJMNl!Tu$=G7e78*OirDTYM@jD#W5yrt6*2!NDhO{=2mb!e07XXoZ;W*}eUJ zDUPS*<>js&M`_x{WjH+!E-p$)A?UENrRDSRFk|3vyhVq2qB;aECKMJHl4DOtbk9ml zON)w$C2-3lSXom*;VdjFCttgCPWkm8h@Cxq*3)t*>pH;cyLT#8ukj3GK2>#fhUQ34 zPB?9Zs;cVN!tg|qBpUtsb`(RlqQ5r|H#jmP#mDz{WP}-FLLheb7jl8l9&ZqMd=-%Q zikpYtBb5SZpeIkC8o0310!t}A_9L(M#Vsm7eOWoVjKsvm^z;UI@?8Kr@;#BG%OWC3 zML$+1rab%7iV7P^4trvUA#;*oN||s#VH^I5uh`vX=!@G68qd)quNs6%>h9DfpcwqXa$UvUs^UIj2Dm$ zu<@Y0_L@#k%b-Kg(M4uwbEn<~uHXCN!x2g5XcgMCXTezV{MMV#nD?2_muye`{XQC2@7Y3}Qp^&;dK$AX>j<5fs zj34l66azPyYlxd}WA~(-H$(;p2VWKx0NO3oD{bBY`J;eh&O;C|EWq^U4ijeG`uqD+ zQ&RyGs>QCYu6`IA!k3kCA(2XM-#R~Jq6h>6C@|>7@LTycH8npd>J+T0+T>kGs%cl@SS}dk&?n%WwNro%*De~>EeSzHRR+V5wWrg3R=aZKx}Z1jxjEq z8youoFQhMDSQl=1Wm{pf?SP5r=CDFS#UNVX)=mz$hA&;Z1TezDz))3H)!WCT| zua+5!9I~ycG;4yx;isT)Zr9E;s8yx*V8KiWoS4YkEncQH2@7*0qqLNiT6gk${bFtM z!U8w~pgf{|ZAb_tAtAw+2)gYb6BFOvUzitKs>P$btDmEkM83N>aZ-=9yXS3YzrAzk z&dA6JNNo-0oGgG)Y<#>?JF!C*v@Eb?@;<+|cXtWc!;{8~YVjtfrk8?aG}rLa9Lh|u zYHNWi;el(Os5>-XB*`*gq@(U0926B0xbu*m(ehr0`63t^pQ;`MMw8+^r?=4IelL7R z;XiXGZ@HF-MDToHBFdcFdL3}nI382>WwR33wmai5(vcFuD^`JNK^(zC-ge{+-2UhU e`)`>h2SaDF;18Y8T?eB&q;W@E1%K;7*uMbTUbHd* literal 0 HcmV?d00001 diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/dir_3c04bc290434a2bfff240c0777e37105.html b/dir_3c04bc290434a2bfff240c0777e37105.html new file mode 100644 index 0000000..59a064b --- /dev/null +++ b/dir_3c04bc290434a2bfff240c0777e37105.html @@ -0,0 +1,95 @@ + + + + + + + +MIMPC++: include/systems Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
systems Directory Reference
+
+
+
+Directory dependency graph for systems:
+
+
include/systems
+ + + + +
+
+ + + + diff --git a/dir_3c04bc290434a2bfff240c0777e37105_dep.map b/dir_3c04bc290434a2bfff240c0777e37105_dep.map new file mode 100644 index 0000000..8d2857a --- /dev/null +++ b/dir_3c04bc290434a2bfff240c0777e37105_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_3c04bc290434a2bfff240c0777e37105_dep.md5 b/dir_3c04bc290434a2bfff240c0777e37105_dep.md5 new file mode 100644 index 0000000..3109b5b --- /dev/null +++ b/dir_3c04bc290434a2bfff240c0777e37105_dep.md5 @@ -0,0 +1 @@ +eb26a1d358ea4d58eed82a9abea3b8e1 \ No newline at end of file diff --git a/dir_3c04bc290434a2bfff240c0777e37105_dep.png b/dir_3c04bc290434a2bfff240c0777e37105_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..cc26ac17018d606c841dad1b985fb9536cfc2542 GIT binary patch literal 2274 zcmb7G`#%$E7@tF^j4^jc7onOlm$clHa>-rDoiNqXnJ9CaQJlr%bR@UjjWf(Gl}l~3 zlWT58TQ-cCOC-5OZrfRZ!1;VSpZEK|&o9sC^L*dueV*_0rZ_oR0S_o10000$8|(8f ze4EJM@uI@~v##k+~pTj-E{A$-)c{#$v>&EV+mBAv4kh4 zi7zBi84#MBCABBVOTp40na?75q{A03$Y%RuaYYFc>udU9JCV_P z164Cjd$BB>ApM!=?r_qJYX7zu<)n8D%>Hz9YE&fnjdqcGXR5+EFV+!u97g%>T~i7- zCO&eB1?ydAQ!P*nK6r89KcO2zY|6umsw!02Xh{imgc?i2;+9x4sg{B=GG@PpO?Tdr z0tf9ETff5T1~rBmzX&5MIDb19jV82IBoUl ziR-1Mfw?9|DMjoU!0+(FZ`Zi>5 z`%6sk)xpAl{y2Cn7&+tO6edP|UsP6hTE!$LcqQn$`YXiMYt~q-RNVIZzJQ@Jp`jt} z+cc$*6*V=;(MIFdHHoRkQE z7I&xr3p3);W&fq$&R%?bt}n!l@W4?L6oA58p&*fvMAB7_tr0pMm=L>J)q>koyvce_ z>*^Yuiu0ky?89I%#wJF+A91bY4Gj+fNq8>LaBryGC9R}9I(Em&+uQc~=V*kkaT=Md zwE5MocW!3JaAvyJm&(s^DP{L>A!qkU^DN9F17c-mC9Zth;=XtmFRu6)^E={AMpSe( zSjF_w2B-SqC3R27+wh*{UMvAH$Y=D${|ih731gagXTkswgO z5mTJ;8+W2{{DeeoYX?CPh&^&9ZV%iD)KLU-I2;fd zJp93a{=32l-Zim{{}&!h^!LN0F7F$cYY0r^gruZOcV;#{u)BBkd{~&MpC6mSDjzqB z3R{jhLm}Y+yMk>=bSsl17utGzYML1RZL*cVL7MxYaVfXqN%uuEGBcS&!}T`WzG4eK zp{MYvsYs!HTkmV~M2MDuIJ>S30?3!+dnRer#TsuH7rVIuhj7T8Mw-2K@=SNSgFYUwb}l_4;4BT>Zqht;MBX4IH-SX zk{^|_^8M!EeN}D=+l^DCFXA1N0e}2B{|a~4EIoZiVxZuphQXbuJ`6MU5UFffW&?WS zcTY1ty~HbTEZc!3fRBkgiPT?=%7-LT036bjWnFcAECsLdoI)Phf>eYRie zbo8pO@5?BG`mj%=A6s`gA1c8)b`Kw(Q^o3J@Oc94a=xi}dgemCo=ame5@#ayb#Bjx z5eT?|vF7=?!o-^To}-C%b*ldH1^v5Q5uy?jA)Tq42pq*aOGC{L$ycbcmu>@{X*aG9 zccvsKKTT8Iv6a&<6nP!IfTv9+&?e849Bwv8knRl)9c*9^qT!PZ3xvEpqpx38Rt@Cj zF1P6JtqsuJM>y#MhmHh7B_)HR*XJb{8Ay1{I>@2mo~b~ zQ@QXjolIn}DU!!EY4138Dkd}==8L#Br759mDx@-zcSLs;__zH7QW-~#PIpr_#U?a2 zYobt3A|E7l_D#q#gT+cpEUr(q3c}&({7eRS5X!5)zB?KlvwF@Dt*kyxPFj16EYCC7 z4AWGMB0_XW8)rVv%&42$S9`1gx!gKQ2qdMAS7+l;NNZ17X>QhEk`+kHZPRLCX$kWc zpX@%PKWbFPe?*;JiU%bMfu_prd=ZG8Ct+L-HYPU9DII6|)9~bFSQnk1_B5!gY5ler zFwf*JR#96U!)jVS8?#*%qw(ik-AIKubTWO=&&I^?750gfHomhs>DS@rKepN-XS=mA z`hqc5?#u6PZNBEeU~#KuErK~p0C#F|D|K<0q#d#bATJG~;QF&NtyRd+i2s<*vb>?= z+GwyPu>>(&>Xmch<5f*4w5+~f literal 0 HcmV?d00001 diff --git a/dir_7a55efb13937f868f8144ef9f510f0c6.html b/dir_7a55efb13937f868f8144ef9f510f0c6.html new file mode 100644 index 0000000..10b918d --- /dev/null +++ b/dir_7a55efb13937f868f8144ef9f510f0c6.html @@ -0,0 +1,95 @@ + + + + + + + +MIMPC++: include/sim Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
sim Directory Reference
+
+
+
+Directory dependency graph for sim:
+
+
include/sim
+ + + + +
+
+ + + + diff --git a/dir_7a55efb13937f868f8144ef9f510f0c6_dep.map b/dir_7a55efb13937f868f8144ef9f510f0c6_dep.map new file mode 100644 index 0000000..b90e597 --- /dev/null +++ b/dir_7a55efb13937f868f8144ef9f510f0c6_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_7a55efb13937f868f8144ef9f510f0c6_dep.md5 b/dir_7a55efb13937f868f8144ef9f510f0c6_dep.md5 new file mode 100644 index 0000000..a5d86dc --- /dev/null +++ b/dir_7a55efb13937f868f8144ef9f510f0c6_dep.md5 @@ -0,0 +1 @@ +9a4d4a38c869a4d90f4babc01b50817a \ No newline at end of file diff --git a/dir_7a55efb13937f868f8144ef9f510f0c6_dep.png b/dir_7a55efb13937f868f8144ef9f510f0c6_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..d70b86dd4a329f9761871ac63a139907e165c069 GIT binary patch literal 1806 zcmeAS@N?(olHy`uVBq!ia0vp^wLo0Y!3HD`d7RY)Qfx`y?k)`fL2$v|<&%K|hdo^! zLn`LHy<6)eTrP9`BY#(bgL$i@x`D*%J{I+DQ8CU;67o$C4y$l&(vVh~d8Xa%c#DNl zo2jzlv0WCWigriNu$DTgSTF@Q`)7ofa2$4ZIS}aBq9|A?wPb_+v{Erit?<60`|n@t z-+KJ+`|dr(<-VExv+v!z7iSRU#`~RR#t#cCN13?_eSQM&>K%)Pk6h$@^n#_ZqzP3x zMLQ*Rt{?l}xcrqnH(Z}EaiZaiQdZaNufJ;O?BQA(q?%&<#`Mbd>kD`MShgUSql=Hh zYbn?7Z?dAhB)@eP6>koVkx|Z&uJMK1pd?!R^AoE@<)<49uIK0EG{n5?dG<_=`+iKkg70MH_`B_1{Wuwpxq70j!)jULppEr!&zjrTh)LSzamLEefNk6l}C>se|Rrm3Zx32`*HHg+jVw}=O_OvVOJy9lHG4mcb$A$?|5Y#mkmSxw=-}*%8PmKE1P`aArqK zONxtYE8~ynYYLv7IlrUoYq`&?FJ=r1hK1Hsy!1mt?zC>--p~52B%|lV3q8I3nRU}n z$}lj@ohw`MXNTNk_x`r__UR7{_dE$&6oZsKyKfF0z*P`$dyNJl2OYh(R{!!C# z=1j?!EjF&XYZzV>%ng3i+4A${UEKAL&$0BHGWBj-lZ7z>@9_jkWv1b+%3(<>cY%igkSOs#Xa>&v+K`BTw?pp_3_z0$ijLD|dCPtD0`ny0oE!uSem z9_jxlhJ4wwWp9ASo(IpKwOqKsFlEZ0tf*_>zsO0fa0t32&cVyuu={t!imP@zN?%)j zdw;(-^YWdCFMq0;<^MbL>ir8FiAkMtk(K->PsS_hzI6`?HFaEl_v@jxyMCWKYukF| zN`7Em9KXH2>7hen3l=SsX>DDqp|PX$&!5W{wN~CsYz6vL7TvzpcW{PbnS}W}-W#`1 z0|Q{;)pt?_b4y>F1ZbokJejEzw(buww$^(1-fiX-o&$^|*MJK)n>V+Hc&P1KzFeG7 z)~fHxleIIf!&`l4Ck2Fs89lH%fB#yv+T?==4+{46`7L|?=51Tb6urk;9$6zd88$`VQNgu2!0<{P$4n<{KLyYlnp1buTYB?{QPMvbI+F z>ExqvQs(8qe~ucux^6Bm9Isww8K$24ZBg_@-NLe0_T9=z*^@5YH*aoso6OLww($Pb z+WT{Mmb~0{GkL04Z##eV*?G5jhtGQd!1LLcb8)ix3R$%1gB8gtuhO6J$=qmu^M=Q; zJ>{=}Zk5N0AO?r>^63%IeHx02-oRv|b}C|#>;3KTS422(ocC8Lt z+!QKKRNDCR?c2AqZ%$S1m1Ao@IO%iZdJUzd5C2aF1(cW>eKaLlB>-K!iS@vJW2I;L ZZu_ntO1_Z06 + + + + + + +MIMPC++: include/solvers Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
solvers Directory Reference
+
+
+
+Directory dependency graph for solvers:
+
+
include/solvers
+ + + + +
+
+ + + + diff --git a/dir_949292de90bec6ca0ef87cb838b26113_dep.map b/dir_949292de90bec6ca0ef87cb838b26113_dep.map new file mode 100644 index 0000000..6ea486f --- /dev/null +++ b/dir_949292de90bec6ca0ef87cb838b26113_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_949292de90bec6ca0ef87cb838b26113_dep.md5 b/dir_949292de90bec6ca0ef87cb838b26113_dep.md5 new file mode 100644 index 0000000..3e6bc1f --- /dev/null +++ b/dir_949292de90bec6ca0ef87cb838b26113_dep.md5 @@ -0,0 +1 @@ +1e5672de980964a2a94fe33a6a05b371 \ No newline at end of file diff --git a/dir_949292de90bec6ca0ef87cb838b26113_dep.png b/dir_949292de90bec6ca0ef87cb838b26113_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..043bbb923ac263174c6fedd2de68709ee0f1349b GIT binary patch literal 2201 zcmb7Gc{CIX7oRAVsFZaiNueT3G^F9lo+M#jmYO8%Fw!h#8N>9bp0f7F!`Nm>vPKey zu|*k1V~Q*d#*F2S-7vOk-gLfmzW=`Oym#*J-h0kH=bn4d@0{Pc_vy8(w$hS7NdN#K zZEt6FU6e5*$L^63#a6qXv!Wz%$HCSLApB{0jYVkyz@Dr2Ru--g33K1Wuf3R3XmW&RlI1vBhn)92=V6Tp@%4w=TI(0L&9E&^4GSyem25snv*P2ReX@X;Q6Ji?GWLH~&YSDt&d#v7l`el)hJ zs!FU3Vu?bz?WT2Y2AkCv=C?o6{=ta!AFkn2JHc`A&dFXReJR*%QwU`iIVwBcUpDQ| z-a5WxN6r<(x^`!h>iG}~W=r1Q{)`gn?7?i>W4Dr9h2`b6*(S?N(bniSXU2lB@4)9E zqc2}ZcIFX@gl{**e>UeF>7L46fUR!S*L$RdCtKI#r2b9Gk2EgI())h_DdPW&NPZJY;))!>}-C4CU zY<6w&D=kuS@zaW?3wDtHKr%UA?6w}cuU!A~<=>4_ryqw>1VWGqX(@uZrvJ1B+Amqfnor$(fn9k0})I zp3I%_k#&%bk3P5mWDStJF|}HHe10Z ztZaLa8@hJZA;Nd=PSW3EwznI({`#xTA(m5cY3!%8HjfbDG|4px2HPvGVj(Im-m@&3 zQ;kZ-LAccI4Vh;^4t1zzFPYaD9I<+T_U#0B4;p_l_o$4FMMwx~oAFxC*Kgi;V_8w# z9g;VkJ;N%pNACK!aGx8lbV#@HguOZoYr&nIM)smNjUfrqi(_Uu94-uns_jp{+0}$G zrE~p}71MwO1xnX5rIh|7Rn*S`v!&$_{80&RSzD7UpY^q^?)CDf{P_156q zK=Fx=8IMLZ=dz5r1TU|kKrv=$Xt>mC!&FR+ytsz$xc#S}hq(Oh*>ArvBVcmg-uVw7 z@_hL7b0M@|$RLu3!$m@GW=-b)29V5Cp9_~IVpdjGW)KphlM%& z@#SRn)3>*=VQaxTGc`P3uOj$@tdmnHKwc*z1BY{%9mW1u?eDO-iiv;qY7ycP9y*Ng zQVu0shAkbCQZ*y?Yz&^xx^?hdOTH#Ja*YV3K*y%1t*%|uv#@9Z$SNqLW@BEE$;TxQ zpm&Wm^7~gt5N%qz6k48zrN+HRARj#@%?Q z9gmoz0j_xjwYRjiAn{^SDw__B^N2}Wwv$cAXh3i<``a6BICDF;vNEGt-~f)HP?Uks zRYVXGJ=R|aWN=jHD+~o%E7iW|F)zihWE|>vamw2e1gb{(16_&|Ijj%d_jTd-7MS4j zTRQr2TH0i(5h#9`urz^9AdwC~-mh}(9OA$^f8Z7FhscKyy+cEtqN8^KpHnTTeEbJC zOS%qZK^K^q3#>)cILF)>+r+3(S)o5-TU)6kjgjduUupn>e+9zf9mA1YYHB|2Z|>~n za0X847%dOMs2Rr2!sbGO?b_O!qLl8+Cr$1k1q)i46!3-Gs0Vzjid zh0mWN5?kvKo!i%$Aw43tki6vNu!|c7=TcH4qM|m_QkT_=i?KzaqnZFa$L|)SO-_0d zNWesA(%p{-LD#Rpdt29Qf|yLp#>ndGs@gnL{2JtWxl29@ldE?8Qc}f&%ZU@(K5Mf9 zM^t)rIRclJYBz}Irf135MMubbaX4e(!y=3OAaIMhe*|G2L5LQZ$f zqb<=zQqfoNJ}D2*%}GmpL=T9@DA4PUs}Bna6l=QmzzP08+tLKEOh~!&L%bbd2EdP~ S4T^pZfW7rqtMW^?aeo7HVLt-^ literal 0 HcmV?d00001 diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..a10c8ef --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,99 @@ + + + + + + + +MIMPC++: include Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + +

+Directories

+ + + + + + + +

+Files

file  Solver.hpp [code]
 Abstract class that represents any solver interface and provides a low-lever mpc solver interface.
 
file  System.hpp [code]
 Abstract class to represent system dynamics.
 
+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..ffbff02 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..3174bd7 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +MIMPC++: File List + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + +
  include
  sim
 MPCLeafSystem.hpp
 Simulation.hpp
 VizForces.hpp
  solvers
 SCIPSolver.hpp
  systems
 REACSA.hpp
 MPC.hpp
 Solver.hppAbstract class that represents any solver interface and provides a low-lever mpc solver interface
 System.hppAbstract class to represent system dynamics
+
+
+ + + + diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..e6ddc30 --- /dev/null +++ b/functions.html @@ -0,0 +1,183 @@ + + + + + + + +MIMPC++: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- g -

+ + +

- h -

+ + +

- m -

+ + +

- s -

+ + +

- u -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..ede0f1d --- /dev/null +++ b/functions_func.html @@ -0,0 +1,154 @@ + + + + + + + +MIMPC++: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..e843be5 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,83 @@ + + + + + + + +MIMPC++: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 0000000..030f850 --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,142 @@ + + + + + + + +MIMPC++: Graph Legend + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 0000000..8fcdccd --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +f51bf6e9a10430aafef59831b08dcbfe \ No newline at end of file diff --git a/graph_legend.png b/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2cbcfb2d143e382be6ed65635a3d859e53bc36 GIT binary patch literal 20615 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 literal 0 HcmV?d00001 diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..6379954 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,97 @@ + + + + + + + +MIMPC++: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..2274364 --- /dev/null +++ b/index.html @@ -0,0 +1,157 @@ + + + + + + + +MIMPC++: MIMPC++ + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
MIMPC++
+
+
+

A fast typesafe Mixed Integer Model Predictive Control C++ library

+

+

+Description

+

Full documentation under: Documentation

+

The library was originally developed as a fast implementation of an MPC for European Space Agency's free-floating platform REACSA which is controlled by a continuous actuated Reaction Wheel and eight binary actuated thrusters under dwell time constraints.

+

This project contains:

    +
  1. The MIMPC library that has been designed to provide a fast MPC for any system that combines continuous and binary actuators under dwell time constraints.
  2. +
  3. A Simulator that provides a simulation based on Drake toolbox that simulates the free-floating platform REACSA controlled by the MPC.
  4. +
  5. Example code (examples/) that shows how to use the library together with the simulator.
  6. +
+

+Documentation

+

Full documentation under: Documentation

+

+Installation

+

Please refer to the installation instructions. For simple use a [Dockerfile](Dockerfile) is available. To build and run the container simply run:

docker build -t mimpc .
+

To directly run the example run:

docker run -it --init --network="host" mimpc build/reacsamimpc
+

Or simply launch the container and play around:

docker run -it --network="host" mimpc
+

(Note that when trying to stop the controller in docker CTRL+C might get cought, making it nececarry to press it 5 times to enforce termination.)

+

+Usage

+

+Run examples

+

When the simulation and examples have been built, run ./build/reacsamimpc within the repos root folder. It starts a few tests with the simulated free-floating platform REACSA and safes the results. The simulation creates a visualisation that can be rendered by opening (http://localhost:7000) in any browser.

+

+Use the library

+

To get a fully working MIMPC for your own system the system dynamics have to be specified by deriving from mimpc::System. The library provides next to mimpc::System two main interfaces:

    +
  • mimpc::Solver is the low level interface in which the dwell time constraints, the cost function and the system constraints can be specified. It also provides the functionality to set the current state, solve the problem and retrieve the optimal solution. Currently, the library with mimpc::SCIPSolver only contains one Solver which implements this lowe level interface. It is based on the open source SCIP solver (https://scipopt.org/). To integrate your favourite solver, derive from mimpc::Solver
  • +
  • mimpc::MPC is the high level interface which warps a configured mimpc::Solver implementation and wraps the typical MPC control loop into a simpler interface.
  • +
+

+Authors

+ +

Feel free to contact us if you have questions about the library or examples. Enjoy!

+

+Acknowledgments

+

The authors would like to thank the support of the projects M-RoCk (Grant No.: FKZ 01IW21002), AAPLE (Grant Number: 50WK2275) and COOPERANTS (Grant No.: 68GX21003H). Further many thanks to the University of Lübeck and especially the Institute for Electrical Engineering in Medicine, the Underactuated Robotics Lab and European Space Agencies Orbital Robotics Lab for the collaboration.

+


+
+

+

+License

+

This work has been released under the BSD 3-Clause License. Details and terms of use are specified in the LICENSE file within this repository. Note that we do not publish third-party software, hence software packages from other developers are released under their very own terms and conditions, e.g. Stable baselines (MIT License) and Tensorflow (Apache License v2.0). If you install third-party software packages along with this repo ensure that you follow each individual license agreement.

+

+Citation

+

Please cite one of the following works:

+

[1] F. Stark, S. Vyas, G. Schildbach, and F. Kirchner, “Mixed Integer Model Predictive Control for a free-floating platform with binary and continuous actuation,” in Procceding of CEAS Conference on Guidance, Navigation and Control 2024 (EuroGNC 2024), Bristol, 2024.

@inproceedings{stark_mixed_2024,
+
address = {Bristol},
+
title = {Mixed {Integer} {Model} {Predictive} {Control} for a free-floating platform with binary and continuous actuation},
+
volume = {2024},
+
author = {Stark, Franek and Vyas, Shubham and Schildbach, Georg and Kirchner, Frank},
+
year = {2024},
+
}
+

[2] F. Stark, S. Vyas, G. Schildbach, and F. Kirchner, “Linear Model Predictive Control for a planar free-floating platform: A comparison of binary input constraint formulations,” in Proccedings of 17th Symposium on Advanced Space Technologies in Robotics and Automation, Oct. 2023. doi: 10.48550/arXiv.2312.10788.

@inproceedings{stark_linear_2023,
+
title = {Linear {Model} {Predictive} {Control} for a planar free-floating platform: {A} comparison of binary input constraint formulations},
+
volume = {17},
+
copyright = {All rights reserved},
+
doi = {10.48550/arXiv.2312.10788},
+
booktitle = {Proccedings of 17th {Symposium} on {Advanced} {Space} {Technologies} in {Robotics} and {Automation}},
+
author = {Stark, Franek and Vyas, Shubham and Schildbach, Georg and Kirchner, Frank},
+
month = oct,
+
year = {2023},
+
}
+

[3] F. Stark, “Model Predictive Control for 3-dof free floating platform with binary actuated thrusters and reaction wheel,” Master Thesis, Univerität zu Lübeck, Lübeck, Germany, 2023.

@mastersthesis{stark_model_2023,
+
address = {Lübeck, Germany},
+
title = {Model {Predictive} {Control} for 3-dof free floating platform with binary actuated thrusters and reaction wheel},
+
school = {Univerität zu Lübeck},
+
author = {Stark, Franek},
+
month = oct,
+
year = {2023},
+
}
+
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 0000000..9a50488 --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 0000000..e49add7 --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +a91ca2f229c8cecf82952374a07fb61c \ No newline at end of file diff --git a/inherit_graph_0.png b/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..05eeb3e26dfba5cc0258b12b63ad523f704636de GIT binary patch literal 3114 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_1.map b/inherit_graph_1.map new file mode 100644 index 0000000..5ac552a --- /dev/null +++ b/inherit_graph_1.map @@ -0,0 +1,5 @@ + + + + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 0000000..2d9feb1 --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +e431d6526f462d66fc0a12c4e316e382 \ No newline at end of file diff --git a/inherit_graph_1.png b/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fe14ffdc42cb252c3763c71b1dfa5dae14d244dd GIT binary patch literal 9351 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

(-@aoOhJjm zY1&3nS;LrvKLi3hhU{0i^^3N0d1qDUU;6YRPh6x@3i$NI}Me=QQbm=mb_f`d52GhyiY8T=XPJRSdO|i$)eg zb?@&pEnZs4pxXcbIhKF_01fWmq13EEak#WfZ73zU7#iPZ-r#Etj-lw{Vh(#~JaTr! zo{vtHI{de)A};@!MDIORIw@TIm#HvrXa3{!GH{<`#peYMW0HrF4e-e##I>usYNaYx G!T$%O7Uj7B literal 0 HcmV?d00001 diff --git a/inherit_graph_2.map b/inherit_graph_2.map new file mode 100644 index 0000000..37dbbd1 --- /dev/null +++ b/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 0000000..4071956 --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +9d5f75335a73e9212d4b4d0a1142ab20 \ No newline at end of file diff --git a/inherit_graph_2.png b/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..af456da247e523022fc71df3b508960f14414187 GIT binary patch literal 2962 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 mp3# + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 0000000..8d91379 --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +de667735bdbfab7269ad8ee0714f8371 \ No newline at end of file diff --git a/inherit_graph_3.png b/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d803ec92cc737e115d378eec476b1adc41932871 GIT binary patch literal 8600 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 VE+={g9<_i-zflk`5_|vkKL9#GBxL{q literal 0 HcmV?d00001 diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 0000000..9878d59 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 0000000..d4cfac0 --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +6e4fead04720f1f66ab4c4ee1694168b \ No newline at end of file diff --git a/inherit_graph_4.png b/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7425f8e9e693c0b301b96fc46f2c2e4dee931f70 GIT binary patch literal 5442 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 KGL=#$f&T%Rt(rLi literal 0 HcmV?d00001 diff --git a/inherits.html b/inherits.html new file mode 100644 index 0000000..6277666 --- /dev/null +++ b/inherits.html @@ -0,0 +1,115 @@ + + + + + + + +MIMPC++: Class Hierarchy + + + + + + + + + + + +

+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..103c32d --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/md_INSTALL.html b/md_INSTALL.html new file mode 100644 index 0000000..1342d3e --- /dev/null +++ b/md_INSTALL.html @@ -0,0 +1,115 @@ + + + + + + + +MIMPC++: Installation + + + + + + + + + + + +
+
+ + + + + + +
+
MIMPC++ +
+
A fast typesafe Mixed Integer MPC C++ library
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Installation
+
+
+

The full blueprint to install the lib and the examples is also available in the (Dockerfile).

+

+Dependencies

+

+Library

+

+SCIP Solver

+

Refer to the instructions in https://scipopt.org/index.php#download. There are precompiled packages available. Otherwise, install from sources.

+

+EigenLib

+

Eigen is a header lib, available at https://eigen.tuxfamily.org/. For Ubuntu there is also a package available:

sudo apt install libeigen3-dev
+

+LibFMT

+

Follow instructions in https://fmt.dev/latest/usage.html#building-the-library and https://fmt.dev/latest/usage.html#installing-the-library

+

+Simulator and Example

+

+Drake

+

Follow instructions in https://drake.mit.edu/installation.html

+

+Cnpy

+

Follow the instructions in https://github.com/rogersce/cnpy

+

+ZLIB

+

Install ZLIB available on https://www.zlib.net/. For Ubuntu there is also a package available:

sudo apt install zlib1g-dev
+

+Build and install

+
mkdir build
+
cmake -DBuildSim=ON -DBuildExamples=ON ..
+
make
+
sudo make install
+

The cmake flags BuildSim and BuildExamples control weather the free floating satellite simulation and the example project based on Drake should be installed as well.

+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..2fe2214 --- /dev/null +++ b/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..75efe84 --- /dev/null +++ b/menudata.js @@ -0,0 +1,44 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"c",url:"functions.html#index_c"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"m",url:"functions.html#index_m"}, +{text:"s",url:"functions.html#index_s"}, +{text:"u",url:"functions.html#index_u"}]}, +{text:"Functions",url:"functions_func.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +MIMPC++: Related Pages + + + + + + + + + + + +
    +
    + + + + + + +
    +
    MIMPC++ +
    +
    A fast typesafe Mixed Integer MPC C++ library
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     Installation
    +
    +
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 0000000..1ec5b2d --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..14e786c --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['addinputconstraintonindex_0',['addInputConstraintOnIndex',['../classmimpc_1_1Solver.html#a07f26e76b0e6d06c1febf24650eb9353',1,'mimpc::Solver::addInputConstraintOnIndex()'],['../classmimpc_1_1SCIPSolver.html#a7ed4245e2c7729e3078458ea0899146e',1,'mimpc::SCIPSolver::addInputConstraintOnIndex()']]], + ['addinputconstraintonstep_1',['addInputConstraintOnStep',['../classmimpc_1_1Solver.html#a0ed2b1607217cf74d260b5383e5e204a',1,'mimpc::Solver']]], + ['addstateconstraintonindex_2',['addStateConstraintOnIndex',['../classmimpc_1_1Solver.html#aada42af55792445d859ec55d44d1db6c',1,'mimpc::Solver::addStateConstraintOnIndex()'],['../classmimpc_1_1SCIPSolver.html#a4d60d3a82be84b6d8629c35c88758397',1,'mimpc::SCIPSolver::addStateConstraintOnIndex()']]], + ['addstateconstraintonstep_3',['addStateConstraintOnStep',['../classmimpc_1_1Solver.html#a21cc368b2574fa8deb44b1319a469551',1,'mimpc::Solver']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 0000000..9f80e90 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..06fb4bd --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['backward_5feuler_4',['BACKWARD_EULER',['../Solver_8hpp.html#a261f292cabf858e672f30baad5c9d6eea7872173843da47b482047add36451b3f',1,'mimpc']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 0000000..02cfffc --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..5014a2e --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['control_5',['control',['../classmimpc_1_1MPC.html#a4724571ea495f05120558446cfa56931',1,'mimpc::MPC']]], + ['cost_5ftype_6',['COST_TYPE',['../Solver_8hpp.html#a757f7bfa05ad32c34d8f69e7861806e5',1,'mimpc']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 0000000..39767b8 --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..a3a4a5d --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['forward_5feuler_7',['FORWARD_EULER',['../Solver_8hpp.html#a261f292cabf858e672f30baad5c9d6eea93af78ff661bdee5321c90b57eb8ce95',1,'mimpc']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 0000000..fc40463 --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..b0e6a88 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['geta_8',['getA',['../classmimpc_1_1System.html#aa8f6a77d32bae4a2fea1a073ff814973',1,'mimpc::System::getA()'],['../classmimpc_1_1systems_1_1REACSA.html#a424700baf3ccb959e366d5a17bfe5b81',1,'mimpc::systems::REACSA::getA()']]], + ['getb_9',['getB',['../classmimpc_1_1System.html#aecd758e0c940364975be31fc891636ed',1,'mimpc::System::getB()'],['../classmimpc_1_1systems_1_1REACSA.html#a2506264f0e7ee6f549cd52c8de364be4',1,'mimpc::systems::REACSA::getB()']]], + ['getstepstocompensatecontrollerdelay_10',['getStepsToCompensateControllerDelay',['../classmimpc_1_1Solver.html#a5a0939f3a743777b060af28981bce161',1,'mimpc::Solver::getStepsToCompensateControllerDelay()'],['../classmimpc_1_1SCIPSolver.html#a589472fe1996c829d1bba973875af5be',1,'mimpc::SCIPSolver::getStepsToCompensateControllerDelay()']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 0000000..9dd9344 --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..a2c2178 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['history_5fdepth_11',['history_depth',['../classmimpc_1_1Solver.html#a0fe7838161467c745697cfa56923a37a',1,'mimpc::Solver']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 0000000..f1e516d --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..a3e2af6 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['installation_12',['Installation',['../md_INSTALL.html',1,'']]], + ['integration_5fscheme_13',['INTEGRATION_SCHEME',['../Solver_8hpp.html#a261f292cabf858e672f30baad5c9d6ee',1,'mimpc']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 0000000..8ddbf6c --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..32c56d6 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['l1linear_14',['L1Linear',['../Solver_8hpp.html#a757f7bfa05ad32c34d8f69e7861806e5af0cc1f46390b05c733fc35856d20c9b6',1,'mimpc']]], + ['l2quadratic_15',['L2Quadratic',['../Solver_8hpp.html#a757f7bfa05ad32c34d8f69e7861806e5adc9e5d5bf030ee5d7e07d4951fb63c6c',1,'mimpc']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 0000000..83c55ae --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..ec29a26 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['mimpc_2b_2b_16',['MIMPC++',['../index.html',1,'']]], + ['mpc_17',['MPC',['../classmimpc_1_1MPC.html',1,'mimpc::MPC< SystemType, SolverType >'],['../classmimpc_1_1MPC.html#ad9e6ec21ff1b0b43d022fd536359ee76',1,'mimpc::MPC::MPC()']]], + ['mpcleafsystem_18',['MPCLeafSystem',['../classmimpc_1_1simulation_1_1MPCLeafSystem.html',1,'mimpc::simulation']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 0000000..1e263c1 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..1c20b9e --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['no_5fsolution_19',['NO_SOLUTION',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133a4d72f13778ad951b5944036936b74b07',1,'mimpc']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 0000000..3a6cac1 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..54cf269 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['optimal_20',['OPTIMAL',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133ae86b1d624e861a727060a3e0d4943c87',1,'mimpc']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 0000000..130deb4 --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..f18bab1 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reacsa_21',['REACSA',['../classmimpc_1_1systems_1_1REACSA.html',1,'mimpc::systems']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 0000000..3dd5af0 --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000..321a331 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['scipsolver_22',['SCIPSolver',['../classmimpc_1_1SCIPSolver.html',1,'mimpc::SCIPSolver< SystemType, N, min_steps_on, min_steps_off, max_steps_on, num_steps_solver_delay, integration_scheme >'],['../classmimpc_1_1SCIPSolver.html#a8d0cab61e628a7fbc830a9bbafeb8c45',1,'mimpc::SCIPSolver::SCIPSolver()']]], + ['setcost_23',['setCost',['../classmimpc_1_1Solver.html#abd91779b58e0201fc46520678fac3326',1,'mimpc::Solver']]], + ['setfinalweights_24',['setFinalWeights',['../classmimpc_1_1Solver.html#a96def2d0d14f9a35bd4317d1253a35ec',1,'mimpc::Solver']]], + ['setinputhistory_25',['setInputHistory',['../classmimpc_1_1Solver.html#afe701e06933a7e7fe190d5cf99ff8225',1,'mimpc::Solver']]], + ['setinputweights_26',['setInputWeights',['../classmimpc_1_1Solver.html#a61c4ae84ecd358839d039ebd09f6cca8',1,'mimpc::Solver']]], + ['setnextinputs_27',['setNextInputs',['../classmimpc_1_1Solver.html#aefb9eb399325c4e0549125b55ab7d062',1,'mimpc::Solver']]], + ['setsetpoint_28',['setSetPoint',['../classmimpc_1_1Solver.html#af2ad746dfcb72fd351231998fd903e05',1,'mimpc::Solver']]], + ['setsolvertimelimit_29',['setSolverTimeLimit',['../classmimpc_1_1SCIPSolver.html#a43e49c124aa56ff5bf0307674e5a25d7',1,'mimpc::SCIPSolver::setSolverTimeLimit()'],['../classmimpc_1_1Solver.html#aeddf3054660be361436992f930461f46',1,'mimpc::Solver::setSolverTimeLimit(double max_seconds)=0']]], + ['setstate_30',['setState',['../classmimpc_1_1Solver.html#a34435622c0b5a1dfc9615f3f9852f1bd',1,'mimpc::Solver']]], + ['setstateweights_31',['setStateWeights',['../classmimpc_1_1Solver.html#a6336046c972ea148dfa02e5746f6cd22',1,'mimpc::Solver']]], + ['simulation_32',['Simulation',['../classmimpc_1_1simulation_1_1Simulation.html',1,'mimpc::simulation']]], + ['solve_33',['solve',['../classmimpc_1_1Solver.html#adbe3aa87885c74b6216e771345f69e5a',1,'mimpc::Solver']]], + ['solver_34',['Solver',['../classmimpc_1_1Solver.html',1,'mimpc']]], + ['solver_2ehpp_35',['Solver.hpp',['../Solver_8hpp.html',1,'']]], + ['solver_5freturn_36',['SOLVER_RETURN',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133',1,'mimpc']]], + ['system_37',['System',['../classmimpc_1_1System.html',1,'mimpc']]], + ['system_2ehpp_38',['System.hpp',['../System_8hpp.html',1,'']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 0000000..af7f2f0 --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000..1165ca2 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['time_5flimit_5fwith_5fsolution_39',['TIME_LIMIT_WITH_SOLUTION',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133a0e7abcc6bfd5354d25e01522bc16ea1c',1,'mimpc']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 0000000..e25df42 --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000..483995c --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['updatea_40',['updateA',['../classmimpc_1_1System.html#aea99836a1635a5f506528b677fedf633',1,'mimpc::System::updateA()'],['../classmimpc_1_1systems_1_1REACSA.html#aa6cffe6f4d0bd2d55bb114383252ff55',1,'mimpc::systems::REACSA::updateA()']]], + ['updateb_41',['updateB',['../classmimpc_1_1System.html#a83ac2c559bccc0439f72b8bfbd5d1dc3',1,'mimpc::System::updateB()'],['../classmimpc_1_1systems_1_1REACSA.html#a16615cede0e3a95f5598d9b999e7a74d',1,'mimpc::systems::REACSA::updateB()']]], + ['user_5finterrupt_42',['USER_INTERRUPT',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133a63ecf8086eeb1c71f82e6acd53b660a0',1,'mimpc']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 0000000..b23da6c --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000..d8efc4a --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vizforces_43',['VizForces',['../classmimpc_1_1simulation_1_1VizForces.html',1,'mimpc::simulation']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 0000000..af8159e --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..5c2875c --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['mpc_44',['MPC',['../classmimpc_1_1MPC.html',1,'mimpc']]], + ['mpcleafsystem_45',['MPCLeafSystem',['../classmimpc_1_1simulation_1_1MPCLeafSystem.html',1,'mimpc::simulation']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 0000000..576e916 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..d537941 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reacsa_46',['REACSA',['../classmimpc_1_1systems_1_1REACSA.html',1,'mimpc::systems']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 0000000..956405e --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..f19eabd --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['scipsolver_47',['SCIPSolver',['../classmimpc_1_1SCIPSolver.html',1,'mimpc']]], + ['simulation_48',['Simulation',['../classmimpc_1_1simulation_1_1Simulation.html',1,'mimpc::simulation']]], + ['solver_49',['Solver',['../classmimpc_1_1Solver.html',1,'mimpc']]], + ['system_50',['System',['../classmimpc_1_1System.html',1,'mimpc']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 0000000..d33343b --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000..c4f5860 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vizforces_51',['VizForces',['../classmimpc_1_1simulation_1_1VizForces.html',1,'mimpc::simulation']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 0000000..141fff5 --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 0000000..0b91c64 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cost_5ftype_77',['COST_TYPE',['../Solver_8hpp.html#a757f7bfa05ad32c34d8f69e7861806e5',1,'mimpc']]] +]; diff --git a/search/enums_1.html b/search/enums_1.html new file mode 100644 index 0000000..d29f3b1 --- /dev/null +++ b/search/enums_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 0000000..cecb4aa --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['integration_5fscheme_78',['INTEGRATION_SCHEME',['../Solver_8hpp.html#a261f292cabf858e672f30baad5c9d6ee',1,'mimpc']]] +]; diff --git a/search/enums_2.html b/search/enums_2.html new file mode 100644 index 0000000..59aadf2 --- /dev/null +++ b/search/enums_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 0000000..a82614f --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['solver_5freturn_79',['SOLVER_RETURN',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133',1,'mimpc']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 0000000..0d131d9 --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 0000000..e488fa3 --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['backward_5feuler_80',['BACKWARD_EULER',['../Solver_8hpp.html#a261f292cabf858e672f30baad5c9d6eea7872173843da47b482047add36451b3f',1,'mimpc']]] +]; diff --git a/search/enumvalues_1.html b/search/enumvalues_1.html new file mode 100644 index 0000000..cd9187a --- /dev/null +++ b/search/enumvalues_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 0000000..d6bfb05 --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['forward_5feuler_81',['FORWARD_EULER',['../Solver_8hpp.html#a261f292cabf858e672f30baad5c9d6eea93af78ff661bdee5321c90b57eb8ce95',1,'mimpc']]] +]; diff --git a/search/enumvalues_2.html b/search/enumvalues_2.html new file mode 100644 index 0000000..2b95d92 --- /dev/null +++ b/search/enumvalues_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 0000000..413a3b4 --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['l1linear_82',['L1Linear',['../Solver_8hpp.html#a757f7bfa05ad32c34d8f69e7861806e5af0cc1f46390b05c733fc35856d20c9b6',1,'mimpc']]], + ['l2quadratic_83',['L2Quadratic',['../Solver_8hpp.html#a757f7bfa05ad32c34d8f69e7861806e5adc9e5d5bf030ee5d7e07d4951fb63c6c',1,'mimpc']]] +]; diff --git a/search/enumvalues_3.html b/search/enumvalues_3.html new file mode 100644 index 0000000..bc0ac8a --- /dev/null +++ b/search/enumvalues_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 0000000..001a046 --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['no_5fsolution_84',['NO_SOLUTION',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133a4d72f13778ad951b5944036936b74b07',1,'mimpc']]] +]; diff --git a/search/enumvalues_4.html b/search/enumvalues_4.html new file mode 100644 index 0000000..ef94dd8 --- /dev/null +++ b/search/enumvalues_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_4.js b/search/enumvalues_4.js new file mode 100644 index 0000000..2d4e8b7 --- /dev/null +++ b/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['optimal_85',['OPTIMAL',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133ae86b1d624e861a727060a3e0d4943c87',1,'mimpc']]] +]; diff --git a/search/enumvalues_5.html b/search/enumvalues_5.html new file mode 100644 index 0000000..1c2e2f3 --- /dev/null +++ b/search/enumvalues_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_5.js b/search/enumvalues_5.js new file mode 100644 index 0000000..c4c5526 --- /dev/null +++ b/search/enumvalues_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['time_5flimit_5fwith_5fsolution_86',['TIME_LIMIT_WITH_SOLUTION',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133a0e7abcc6bfd5354d25e01522bc16ea1c',1,'mimpc']]] +]; diff --git a/search/enumvalues_6.html b/search/enumvalues_6.html new file mode 100644 index 0000000..f985df9 --- /dev/null +++ b/search/enumvalues_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_6.js b/search/enumvalues_6.js new file mode 100644 index 0000000..ac2bb8e --- /dev/null +++ b/search/enumvalues_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['user_5finterrupt_87',['USER_INTERRUPT',['../Solver_8hpp.html#a383cda20e6b30b64cccaac7a84042133a63ecf8086eeb1c71f82e6acd53b660a0',1,'mimpc']]] +]; diff --git a/search/files_0.html b/search/files_0.html new file mode 100644 index 0000000..9498842 --- /dev/null +++ b/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 0000000..dd17261 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['solver_2ehpp_52',['Solver.hpp',['../Solver_8hpp.html',1,'']]], + ['system_2ehpp_53',['System.hpp',['../System_8hpp.html',1,'']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 0000000..eb4c501 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..8807f3b --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['addinputconstraintonindex_54',['addInputConstraintOnIndex',['../classmimpc_1_1Solver.html#a07f26e76b0e6d06c1febf24650eb9353',1,'mimpc::Solver::addInputConstraintOnIndex()'],['../classmimpc_1_1SCIPSolver.html#a7ed4245e2c7729e3078458ea0899146e',1,'mimpc::SCIPSolver::addInputConstraintOnIndex()']]], + ['addinputconstraintonstep_55',['addInputConstraintOnStep',['../classmimpc_1_1Solver.html#a0ed2b1607217cf74d260b5383e5e204a',1,'mimpc::Solver']]], + ['addstateconstraintonindex_56',['addStateConstraintOnIndex',['../classmimpc_1_1Solver.html#aada42af55792445d859ec55d44d1db6c',1,'mimpc::Solver::addStateConstraintOnIndex()'],['../classmimpc_1_1SCIPSolver.html#a4d60d3a82be84b6d8629c35c88758397',1,'mimpc::SCIPSolver::addStateConstraintOnIndex()']]], + ['addstateconstraintonstep_57',['addStateConstraintOnStep',['../classmimpc_1_1Solver.html#a21cc368b2574fa8deb44b1319a469551',1,'mimpc::Solver']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 0000000..ef4088b --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..7a896ec --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['control_58',['control',['../classmimpc_1_1MPC.html#a4724571ea495f05120558446cfa56931',1,'mimpc::MPC']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 0000000..ca5aa10 --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..8f98f68 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['geta_59',['getA',['../classmimpc_1_1System.html#aa8f6a77d32bae4a2fea1a073ff814973',1,'mimpc::System::getA()'],['../classmimpc_1_1systems_1_1REACSA.html#a424700baf3ccb959e366d5a17bfe5b81',1,'mimpc::systems::REACSA::getA()']]], + ['getb_60',['getB',['../classmimpc_1_1System.html#aecd758e0c940364975be31fc891636ed',1,'mimpc::System::getB()'],['../classmimpc_1_1systems_1_1REACSA.html#a2506264f0e7ee6f549cd52c8de364be4',1,'mimpc::systems::REACSA::getB()']]], + ['getstepstocompensatecontrollerdelay_61',['getStepsToCompensateControllerDelay',['../classmimpc_1_1Solver.html#a5a0939f3a743777b060af28981bce161',1,'mimpc::Solver::getStepsToCompensateControllerDelay()'],['../classmimpc_1_1SCIPSolver.html#a589472fe1996c829d1bba973875af5be',1,'mimpc::SCIPSolver::getStepsToCompensateControllerDelay()']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 0000000..d79f55b --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..c7f9c47 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mpc_62',['MPC',['../classmimpc_1_1MPC.html#ad9e6ec21ff1b0b43d022fd536359ee76',1,'mimpc::MPC']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 0000000..1657cad --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..b2d6b55 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['scipsolver_63',['SCIPSolver',['../classmimpc_1_1SCIPSolver.html#a8d0cab61e628a7fbc830a9bbafeb8c45',1,'mimpc::SCIPSolver']]], + ['setcost_64',['setCost',['../classmimpc_1_1Solver.html#abd91779b58e0201fc46520678fac3326',1,'mimpc::Solver']]], + ['setfinalweights_65',['setFinalWeights',['../classmimpc_1_1Solver.html#a96def2d0d14f9a35bd4317d1253a35ec',1,'mimpc::Solver']]], + ['setinputhistory_66',['setInputHistory',['../classmimpc_1_1Solver.html#afe701e06933a7e7fe190d5cf99ff8225',1,'mimpc::Solver']]], + ['setinputweights_67',['setInputWeights',['../classmimpc_1_1Solver.html#a61c4ae84ecd358839d039ebd09f6cca8',1,'mimpc::Solver']]], + ['setnextinputs_68',['setNextInputs',['../classmimpc_1_1Solver.html#aefb9eb399325c4e0549125b55ab7d062',1,'mimpc::Solver']]], + ['setsetpoint_69',['setSetPoint',['../classmimpc_1_1Solver.html#af2ad746dfcb72fd351231998fd903e05',1,'mimpc::Solver']]], + ['setsolvertimelimit_70',['setSolverTimeLimit',['../classmimpc_1_1Solver.html#aeddf3054660be361436992f930461f46',1,'mimpc::Solver::setSolverTimeLimit()'],['../classmimpc_1_1SCIPSolver.html#a43e49c124aa56ff5bf0307674e5a25d7',1,'mimpc::SCIPSolver::setSolverTimeLimit()']]], + ['setstate_71',['setState',['../classmimpc_1_1Solver.html#a34435622c0b5a1dfc9615f3f9852f1bd',1,'mimpc::Solver']]], + ['setstateweights_72',['setStateWeights',['../classmimpc_1_1Solver.html#a6336046c972ea148dfa02e5746f6cd22',1,'mimpc::Solver']]], + ['solve_73',['solve',['../classmimpc_1_1Solver.html#adbe3aa87885c74b6216e771345f69e5a',1,'mimpc::Solver']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 0000000..9301d6b --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..8b0804b --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['updatea_74',['updateA',['../classmimpc_1_1System.html#aea99836a1635a5f506528b677fedf633',1,'mimpc::System::updateA()'],['../classmimpc_1_1systems_1_1REACSA.html#aa6cffe6f4d0bd2d55bb114383252ff55',1,'mimpc::systems::REACSA::updateA()']]], + ['updateb_75',['updateB',['../classmimpc_1_1System.html#a83ac2c559bccc0439f72b8bfbd5d1dc3',1,'mimpc::System::updateB()'],['../classmimpc_1_1systems_1_1REACSA.html#a16615cede0e3a95f5598d9b999e7a74d',1,'mimpc::systems::REACSA::updateB()']]] +]; diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 0000000..2b9360b --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 0000000..8517b48 --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..09c0e73 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['installation_88',['Installation',['../md_INSTALL.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 0000000..a0fb679 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000..c513fe6 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mimpc_2b_2b_89',['MIMPC++',['../index.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..9074198 --- /dev/null +++ b/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..fb226f7 --- /dev/null +++ b/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 0000000..3e403f6 --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,36 @@ +var indexSectionsWithContent = +{ + 0: "abcfghilmnorstuv", + 1: "mrsv", + 2: "s", + 3: "acgmsu", + 4: "h", + 5: "cis", + 6: "bflnotu", + 7: "im" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "files", + 3: "functions", + 4: "variables", + 5: "enums", + 6: "enumvalues", + 7: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Files", + 3: "Functions", + 4: "Variables", + 5: "Enumerations", + 6: "Enumerator", + 7: "Pages" +}; + diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 0000000..1e477c0 --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 0000000..78ed167 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['history_5fdepth_76',['history_depth',['../classmimpc_1_1Solver.html#a0fe7838161467c745697cfa56923a37a',1,'mimpc::Solver']]] +]; diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..7d45d36 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}